如何在ilog jrules中调用ilrmain函数

时间:2012-03-15 10:46:23

标签: ilog jrules

如何在ilog jrules中调用ilrmain函数,它是无意义地调用还是我们必须explcitly调用,在后一种情况下,我该怎么做。有关ilrmain函数的IBM文档非常模糊。

3 个答案:

答案 0 :(得分:2)

IlrMain提供了一种简单的方法来测试您的规则,而无需太多开销。 您可以定义输入变量,创建测试用例并调用规则 使用context.execute执行。执行后,您可以显示 结果

这是一个小例子: 想象一下,您已经创建了一个规则集来决定是否授予贷款。 您的输入称为 LoanApplication 类型的应用程序 期待输出中的决定。你的IlrMain会看起来像什么 像这样:

LoanApplication app = new LoanApplication();
app.loanAmount = 5000
Applicant applicant = new Applicant();
app.applicant = applicant;
applicant.dateOfBirth = new ilog.rules.xml.types.IlrDate("1980-01-01");
applicant.income = 2000;
applicant.fixedExpenses = 600;

input = app;
context.execute();

System.out.println("Loan Decision: "+output.decision);

要启动IlrMain,请单击运行>运行配置...>规则 项目并为您的规则项目创建新的运行配置。 选择具有IlrMain功能的项目并使shure 启动 已选择具有功能ilrmain 的项目。 在参数&参数您应该选择清除所有值 您的IlrMain中的参数正在用于执行。 申请并运行

在您的命令行中,您的贷款决策应该出现。类似的东西:

Loan Decision: green

答案 1 :(得分:1)

注意:在“运行配置”中,您可以自动创建规则集 因此,每次更改规则时都不需要手动创建新规则集。
如果经常更改规则,导出规则集会很麻烦,例如在规则工件中测试某些内容时。

您的代码也可能如下所示:

IlrSessionFactory factory = new IlrJ2SESessionFactory();
IlrStatelessSession session = factory.createStatelessSession();
IlrSessionRequest sessionRequest = factory.createRequest();
sessionRequest.setRulesetPath(“/RuleAppName/rulesetName”);
sessionRequest.setTraceEnabled(true);
sessionRequest.getTraceFilter().setInfoAllFilters(true);
Map inputParameters = new HashMap ();
Report in_report = new Report(); // no-arg constructor
// ...populate the report...
inputParameters.put("report", in_report);
sessionRequest.setInputParameters(inputParameters);
IlrSessionResponse sessionResponse = session.execute(sessionRequest);
Report out_report = (Report)sessionResponse.getOutputParameters().get("report“);

和你一起用Java报告或断言东西......

希望它有所帮助

答案 2 :(得分:0)

在规则项目页面/标签中选择“使用函数ilrmain启动项目”后,从参数页面清除所有参数时出现问题; 如果没有设置参数,则无法运行ilrmain技术功能。 您需要将参数表达式设置为某个值,它可以是emplty值。假设XOM的构造函数没有参数{Customer()};然后将参数表达式设置为'new Customer()' 保存并运行ilrmain。确保将CLASSPATH VARIABLE设置为rule-engine.jar文件并运行该函数。它应该工作。如果您还有其他问题,请回复。 这是一个示例 - (规则引发计数将确认规则是否被实际触发),使用ilrmain签名作为void ilrmain(Object arg).--

    customer.firstName="Abhishek";

    customer.age=17;

    int nrules = 0;



    insert customer;



    execute ();

    System.out.println(" The last name of the customer is " + customer.lastName );

    System.out.println("The first name of the customer is " +customer.firstName);


    nrules += returnValues.getIntValue("ilog.rules.firedRulesCount");

    System.out.println("The Number of rules fired " + nrules);

    //retractAll();

    //reset ();