0

我想知道,我们应该如何执行 IBM ODM 中编写的规则。我正在使用 ODM V8.0.1。我已经尝试如下。

我创建了一个 XOM,它有一个带有 String 变量的 Request 类和一个带有布尔值的 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。

我已将请求对象添加为 IN 规则集参数并响应 OUT 然后使用以下代码创建了一个规则

如果“请求”的 xyz 是 {" "," " "," "}

然后

在“请求”上将 x 设置为 true;

创建了一个具有操作函数()和一个规则包的规则流

我创造了

prepareWorkMemory(){
Request r=new Request();
r.x=true;
insert(r);
}

我已经生成了一个 DVS excel 文件并填充了输入和预期结果。

然后我用excel表运行这个规则流

运行方式 --> 运行配置

我的执行引发了 Nullpointer 异常和其他一些 ExecutionUnit 异常。当我调试时,我发现问题是在 prepWorkingMemory() 函数之后以及规则尝试设置布尔值时未创建响应对象。

我尝试将 Ruleset 参数设置为 IN_OUT 然后执行为自己创建了响应对象,而没有 prepWorkingMemory() 函数。但它甚至期望布尔值作为输入,这不适合我的场景。

有人可以帮我解决我出错的地方吗?我坚信问题出在功能上。请纠正我。

此外,如果可能的话,您能否详细说明 IBM ODM 中的内存管理。

谢谢你。非常感谢您的帮助和时间:)

4

1 回答 1

1

如果您使用的是经典规则引擎,您实际上不需要编写 preWorkMem 类型的函数。如果您的规则集参数的方向是 IN_OUT,则不需要像您所做的那样创建两个 XOM 类,即请求和响应。您将在规则条件和操作中使用 XOM 类的相同对象。

但是,您是否注意到您创建了两个 XOM 类,即 Request 和 Response 并且您正在使用 IN_OUT 规则集参数方向?如何和为什么?

另一个问题在于您的 prepareWorkMemory() 函数。您正在创建 Request 对象并设置“x”的值,它实际上是 Response 类的成员。

阅读我的第一段,它将帮助您编写一个简单的规则集,其中单个参数集为 IN_OUT。我们不需要手动在工作内存中输入对象,除非做一些不寻常的事情。

如果您需要任何帮助,请对答案发表评论。快乐的规则发展。:)

于 2015-06-04T06:58:18.873 回答