我想知道,我们应该如何执行用IBM ODM编写的规则。我使用的是ODM V8.0.1。我试过如下方法。
我创建了一个XOM,它有一个带有字符串变量的请求类和一个带有布尔值的响应类
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。
我添加了请求对象作为IN规则集参数和响应一个OUT然后创建一个规则,代码如下
如果'请求'的Xyz是{" "," " "," "}中的一个
然后设置x为true;
创建一个包含操作函数()和一个规则包的规则流
我创建了
prepareWorkMemory(){
Request r=new Request();
r.x=true;
insert(r);
}
我已经生成了一个DVS excel文件,并填充了输入和预期结果。
然后我用excel表格
运行这个规则流Run as -> Run Configuration
我的执行抛出了一个Nullpointer异常和一些其他ExecutionUnit异常。当我调试时,我看到问题是在prepWorkingMemory()函数之后没有创建响应对象,并且当规则试图设置布尔值时。
我尝试将Ruleset参数设置为IN_OUT,然后执行为自己创建了响应对象,而没有prepWorkingMemory()函数。但它甚至期望布尔值作为输入,这是不适合我的场景。
有人可以帮助我哪里我错了,我坚信问题是与功能。请纠正我。
如果可能的话,您能详细说明一下IBM ODM中的内存管理吗?
谢谢。非常感谢您的帮助和时间:)
如果你使用的是Classic Rule Engine,你实际上不需要编写preWorkMem类型的函数。如果你的规则集参数的方向是IN_OUT,你不需要创建两个XOM类,因为你已经做了,即请求和响应。您将在规则条件和操作中使用相同的XOM类对象。
然而,你没有注意到你已经创建了两个XOM类,即Request &响应,您正在使用IN_OUT规则集参数方向?怎么做,为什么?
另一个捕获是在你的prepareWorkMemory()函数中。您正在创建请求对象并设置值'x',该值实际上是响应类的成员。
阅读我的第一段,这将帮助你编写一个简单的规则集与单一参数设置为IN_OUT。我们不需要在工作内存中手动输入对象,除非做一些不寻常的事情。
如果你需要任何帮助,请评论答案。快乐的规则发展。:)