我想知道,我们应该如何执行IBM ODM中编写的规则。我正在使用ODM V8.0.1。我试过如下。
我创建了一个XOM,它有一个带有String变量的Request类和一个带有boolean
的Response类public class Request{ private String xyz;
public Request(String s1){
this.xyz=s1;
}//to set DVS
with getters & setters
}
public class Response{
private boolean x; and getters and setters
}
我创建了一个规则项目,添加此XOM以创建相应的BOM。
我已将Request Object添加为IN ruleset参数并响应OUT 然后使用以下代码
创建一个规则如果 xyz'请求'是{" "" " "" "}
然后
在请求';
上将x设置为true创建了一个具有action function()和一个规则包
的规则流我创建了
prepareWorkMemory(){
Request r=new Request();
r.x=true;
insert(r);
}
我已生成DVS excel文件并填充输入和预期结果。
然后我使用Excel工作表运行此规则流程
以 - >运行运行配置
我的执行引发了Nullpointer异常和一些其他ExecutionUnit异常。当我调试时,我发现问题是在prepWorkingMemory()函数之后并且当规则试图设置布尔值时没有创建响应对象。
我尝试将Ruleset参数设置为IN_OUT,然后执行为自己创建了响应对象,而没有使用prepWorkingMemory()函数。但它甚至期望布尔值作为输入而不适合我的场景。
有人可以帮助我解决我出错的地方我坚信这个问题与功能有关。请纠正我。
如果可能,您还可以详细说明IBM ODM中的内存管理。
谢谢。非常感谢您的帮助和时间:)
答案 0 :(得分:1)
如果您使用的是经典规则引擎,则实际上您不需要编写preWorkMem类功能。如果Ruleset Param的方向是IN_OUT,则不需要像创建的那样创建两个XOM类,即Request和Response。您将在规则条件和操作中使用XOM类的相同对象。
但是,你没注意到你创建了两个XOM类,即Request&响应并且您正在使用IN_OUT规则集参数方向?怎么样和为什么?
另一个问题在于prepareWorkMemory()函数。您正在创建Request的对象并设置'x'的值,它实际上是Response类的成员。
阅读我的第一段,它将帮助您编写一个简单的规则集,其中单个参数设置为IN_OUT。除非做一些不常见的事情,否则我们不需要手动在工作记忆中输入对象。
如果您需要任何帮助,请评论答案。快乐的规则发展。 :)