从java客户端调用Ilog Jrule规则执行服务器

时间:2012-05-24 14:01:10

标签: java java-ee ilog jrules

我正在尝试使用Java客户端在IBM Jrule Rules执行服务器中执行规则。我有Websphere社区版V2.1服务器,我可以使用samae服务器中部署的JSF来调用和执行规则。

我想使用java客户端调用并执行规则。我没有找到任何办法,

在EJB中。我们可以通过设置Initial Context envionment属性从web和java客户端调用EJB。有没有类似于此的方法,要调用Rule Execution服务器规则,使用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值一样。

3 个答案:

答案 0 :(得分:2)


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

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

这是令人失望的,我知道,因为我经历过,但我不知道(至少)这样做。这不是您必须遵循的行为
为了使它工作,然后将你的ruleapp放在类路径(或在eclipse中你的JAVA应用程序的根目录)并运行它...然后你将执行你的规则。

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

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

答案 1 :(得分:1)

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

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

使用以下内容时,您连接的是此管理服务器:

  • server:port / res URL

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

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

要配置远程连接,请使用名为“ra.xml”的文件,并将设置更改为指向远程res / console。

'/ 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示例,则同时展示了两种技术的J2EE和J2SE示例。

答案 2 :(得分:0)

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