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

标签 java jakarta-ee ilog jrules

我正在尝试使用 java 客户端在 IBM Jrule Rules 执行服务器中执行规则。我有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 术语中用于描述多种事物:
- 允许您管理规则应用程序的网络界面。
- 您在 WebSphere CE(或其他)上部署的实际应用程序,以便执行规则。
- 允许您在本地执行规则应用程序的 .jar 文件。

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

我知道这令人失望,因为我经历过那件事,但我不知道(至少)无法做到这一点。这不是您必须遵循的行为。

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

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

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

关于java - 从 java 客户端调用 Ilog Jrule 规则执行服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10739001/

相关文章:

java - 顺序运行 Java 线程

jakarta-ee - 带有插件和嵌入式数据库的 Java EE 应用程序结构

java - Hibernate 谓词 - 无效路径

jakarta-ee - Gradle:找不到提供的方法()

java - 如何从 ILOG JRules 业务规则调用 java 类

java - windows下如何区分几个正在运行的java Jar

java - Java 对象引用是如何工作的?

java - 使用 BufferedReader 和 BufferedWriter 在 Java 中播放 mp3 文件

javax.naming.NameNotFoundException : Name "ilog.rules.res.session.impl.ejb3.IlrStatelessSessionLocal" not found in context "ejblocal:"

java - 示例 Hello World ILOG Jrule?