我正在尝试使用 java 客户端在 IBM Jrule 规则执行服务器中执行规则。我有 Websphere 社区版 V2.1 服务器,我能够使用 samae 服务器中部署的 JSF 调用和执行规则。
我想使用 java 客户端调用和执行规则。我没有找到任何方法可以做到这一点,
在EJB中,我们可以通过设置初始上下文环境属性从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 值一样。
让我澄清一下什么是RES,因为这里似乎有一个误解,可能是我。
RES 在 Ilog 术语中用于描述多种事物:
- 允许您管理规则应用程序的 Web 界面。
- 您在 WebSphere CE(或其他)上部署以执行规则的实际应用程序。
- 允许您在本地执行规则应用程序的.jar文件。
您(AFAIK)无法使用本地 JAVA 应用程序连接 RES。
您编码的内容是调用 RES*.jar 文件中包含的规则引擎,以便在本地执行规则应用程序。
您无法像使用 EJB 应用程序那样使用 JAVA 应用程序。
您必须使用 Web 服务,否则,如果您将规则应用程序名称作为 Web 服务的参数,这是可行的。
您正在使用 miniloan,因此您可能知道使用 Web 界面的示例,您可以在其中判断要使用的规则集版本。
如果要以编程方式管理部署在 RES(应用程序服务器上的实际应用程序)上的规则应用程序,则需要使用 MDB。没有别的。
我知道这是令人失望的,因为我经历过,但我不知道(至少)这样做。这不是你必须遵循的行为。
要使其正常工作,请将您的规则应用程序放在类路径中(或 eclipse 中 JAVA 应用程序的根目录)并运行它......然后您将执行您的规则。
RES 不提供与 RTS 相同的工具,您可以在其中从任何 JAVA 应用程序访问 RTS 以操作您的规则项目。
您是 100% 正确的,无法告诉 J2SE 连接什么是服务器 URL,因此无法从服务器运行规则。
希望对您有所帮助。
您绝对可以从 J2EE 代码调用规则执行服务器,或者像您一样通过远程 J2SE 调用调用规则执行服务器,并且提供了执行此操作的文档。但我确实想澄清一些关于第一反应的事情。
规则执行服务器是执行规则的运行时。它有一个持久性层(文件或数据库)和一个管理控制台,用于管理它和任何其他连接的规则执行服务器。
当您使用以下命令时,您连接到的正是此管理服务器:
- 服务器:端口/重定向网址
您不会连接到实际的 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 控制台并请求在提供规则集路径中指定的规则应用程序。
对于 J2EE,这是类似的,但您实际上是在远程 RES 中执行规则,而不是在本地拉取规则集。
如果检查 ODM 示例,则会发现 J2EE 和 J2SE 示例演示了这两种技术。
*.dsar 的同一文件夹中添加以下文件对我有用creation_date.txt、display_name.txt、属性.txt