0

我正在尝试使用 java 客户端在 IBM Jrule Rules execution server 中执行规则。我有 Websphere community Edition V2.1 服务器,我可以使用部署在 samae 服务器中的 JSF 调用和执行规则。

我想使用 java 客户端调用和执行规则。我没有找到任何方法来做到这一点,

在 EJB 中。通过设置 Initial Context 环境属性,我们可以从 web 以及从 java 客户端调用 EJB。有没有与此类似的方法,调用规则执行服务器规则,使用 java 客户端,Web 部件已经在工作。

import ilog.rules.res.session.IlrPOJOSessionFactory;
import ilog.rules.res.session.IlrStatelessSession;
import ilog.rules.res.session.IlrSessionFactory;
import ilog.rules.res.session.IlrStatefulSession;
import ilog.rules.res.session.IlrSessionRequest;
import ilog.rules.res.session.IlrJ2SESessionFactory;
import ilog.rules.res.session.IlrSessionResponse;
import ilog.rules.res.model.IlrPath;
import ilog.rules.res.session.extension.IlrExtendedJ2SESessionFactory;
import miniloan.Borrower;
import miniloan.Loan;

public class POJOEx {

    public static void main(String... arg) {
        // create rule session factory
        //IlrSessionFactory sessionFactory = new IlrPOJOSessionFactory();
        //IlrExtendedJ2SESessionFactory sessionFactory = new IlrExtendedJ2SESessionFactory();
        //      j2se factory
        IlrSessionFactory sessionFactory = new IlrJ2SESessionFactory();

        try {
            // use stateless session for invocation
            IlrStatelessSession statelessSession = sessionFactory.createStatelessSession();
//input parameter
            Borrower borrower = new miniloan.Borrower("Joe", 600,
                    80000);
// in out parameter
            Loan loan = new miniloan.Loan(500000, 240, 0.05);

            IlrSessionRequest request = sessionFactory.createRequest();
//rule path
            request.setRulesetPath(IlrPath.parsePath("/miniloanruleapp/2.0/miniloanrules/1.0"));

request.setUserDat("miniloanruleapp.MiniloanrulesclientRunnerImpl.executeminiloanrules");

            request.setInputParameter("borrower", borrower);
            request.setInputParameter("loan", loan);
//executing 
            IlrSessionResponse response = statelessSession.execute(request);

            System.out.println("userdata = " + response.getOutputParameters().get("loan"));
            System.out.println("outputString = " + (String) response.getUserData());
            System.out.println("executionId  = " + response.getExecutionId());


        } catch (Exception ex) {
            ex.printStackTrace();
        }          

    }
}

我得到以下错误。

ilog.rules.res.xu.ruleset.impl.archive.IlrRulesetArchiveInformationNotFoundException: Cannot get the information about the ruleset /miniloanruleapp/2.0/miniloanrules/1.0

任何人都可以建议在哪里指定规则执行服务器 url、用户名和密码。就像我们在 EJB 中指定 InitialContext 值一样。

4

3 回答 3

2


让我澄清一下什么是RES,因为这里似乎有一个误解,可能是我。
RES 在 Ilog 术语中用于描述多种事物:
- 允许您管理规则应用程序的 Web 界面。
- 您在 WebSphere CE(或其他)上部署以执行规则的实际应用程序。
- 允许您在本地执行 ruleapp 的 .jar 文件。

您,AFAIK,无法使用本地 JAVA 应用程序连接 RES。
您编写的代码是调用 RES*.jar 文件中包含的规则引擎,以便在本地执行您的 ruleapp。
您无法像使用 EJB 应用程序那样使用 JAVA 应用程序。
您必须使用 web 服务,否则如果您将 ruleapp 名称作为 web 服务的参数,这是可行的。
您正在使用 miniloan,因此您可能知道使用 Web 界面的示例,您可以在其中知道要使用哪个版本的规则集。
如果您想以编程方式管理部署在 RES(应用程序服务器上的真实应用程序)上的规则应用程序,这将是相同的,您将需要使用 MDB。没有其他的。

这令人失望,我知道因为我经历过,但我(至少)不知道怎么做。这不是您必须遵循的行为。

为了使其工作,然后将您的规则应用程序放在类路径中(或 Eclipse 中您的 JAVA 应用程序的根目录)并运行它......然后您将执行您的规则。

RES 不提供与 RTS 相同的工具,您可以从任何 JAVA 应用程序访问 RTS 以操作您的规则项目。

您是 100% 正确的,无法告诉 J2SE 连接什么是服务器 URL,因此无法从服务器运行您的规则。
希望能帮助到你。

于 2012-05-25T09:51:13.013 回答
1

您绝对可以从 J2EE 代码调用 Rule Execution Server,或者在您的情况下通过远程 J2SE 调用,并且提供了执行此操作的文档。但我确实想澄清一些关于第一反应的事情。

Rule Execution Server 是执行规则的运行时。它有一个持久层(文件或数据库)和一个管理控制台,用于管理它和任何其他连接的 Rule Execution Server。

当您使用以下设备时,您连接的就是此管理服务器:

  • 服务器:端口/res URL

您无需连接到实际的 RES,因为您可以将多个 RES 连接到单个管理控制台。管理控制台包含有关持久层的详细信息以及提取您希望执行的规则集的方法。

对你的问题。您收到错误的原因是您尚未配置要从哪个远程规则执行服务器中提取规则集,这就是您收到错误的原因。

要配置远程连接,您可以使用名为“ra.xml”的文件并将设置更改为指向您的远程资源/控制台。

'/executionserver/bin' 目录中有一个默认的 ra.xml(默认为 ./IBM/ODM87/ODM/executionserver/bin)。

该文件中要考虑的主要方面是:

  To enable management of Java SE XU instances that are running on different JVM or JMX MBean server, you must configure the  XU MBean plug-in with the TCPIP protocol:
    <config-property>
               <config-property-name>plugins</config-property-name>
               <config-property-type>java.lang.String</config-property-type>
               <config-property-value>{pluginClass=Management,xuName=default,protocol=tcpip,tcpip.port=TCPIP_PORT,tcpip.host=RES_CONSOLE_HOST,tcpip.retryInterval=INTERVAL}
          </config-property-value>
        </config-property>
    where:
RES_CONSOLE_HOST is the host on which the Rule Execution Server console is deployed.
TCPIP_PORT is the TCP/IP port on which the Rule Execution Server console management server is listening.
INTERVAL is the interval of time, in milliseconds, during which the console tries to reconnect to the management server if a connection fails.

只要 ra.xml 在您正在运行的本地 J2SE 引擎的应用程序的类路径中,就应该调用远程 RES 控制台并请求提供 RuleSet 路径中指定的规则应用程序。

对于 J2EE,这类似,但您实际上是在远程 RES 中执行规则,而不是在本地拉取规则集。

如果您查看 ODM Samples,则有一个 J2EE 和 J2SE 示例演示了这两种技术。

于 2015-11-17T16:36:03.623 回答
0

在 *.dsar 的同一文件夹中添加以下文件对我有用 creation_date.txt、display_name.txt、properties.txt

于 2018-08-14T03:12:51.347 回答