【发布时间】:2016-03-24 05:29:02
【问题描述】:
我正在使用 6.3.0 Drools Workbench 和 KIE 执行服务器,通过 REST 从 JAVA 应用程序到 KIE 执行服务器进行通信。
我是使用 Drools 的新手。
这里有类似的问题,但没有解决问题(尤其是对于 REST 和 6.3.0 的组合):
- Access to Drools returned fact object in Java Code
- Drools: How to retrieve the fact in response from Kie Execution Server?
好的,既然我们已经奠定了基础,这真的不可能吗?还是我们都理解错了?还有什么? :)
问题是这是应该经常遇到的事情,因为当您在 Drools Workbench 中使用引导规则时,它只在规则的 THEN 部分提供这种操作:“插入事实......”和“逻辑插入事实...”(并调用方法)。
当添加事实(在我的例子中是“交易”)时,它会生成如下规则代码:
import java.lang.Number;
rule "BigAmount"
dialect "mvel"
when
Transaction( amount > 10000.0 )
then
Transaction fact0 = new Transaction();
fact0.setActivatedRule( "BigAmount" );
insert( fact0 );
end
并且希望在 Java 中恢复这一事实。 Java 结果是这样的:
<fact-handle identifier="Transaction" external-form="0:9:338894407:338894407:9:DEFAULT:NON_TRAIT:hr.company.Transaction"/>
当尝试像这样检索它时,你会得到 NULL:
... before is request sent ...
KieServerCommand call = new CallContainerCommand(containerId, xStreamXml);
List<KieServerCommand> cmds = Arrays.asList(call);
CommandScript script = new CommandScript(cmds);
for (int i=0; i<1; i++) {
ServiceResponsesList reply = client.executeScript(script);
for (ServiceResponse<? extends Object> r : reply.getResponses()) {
System.out.println(r.getResult());
ExecutionResultImpl result = (ExecutionResultImpl) BatchExecutionHelper.newXStreamMarshaller().fromXML( (String) r.getResult() );
DefaultFactHandle obj = (DefaultFactHandle) result.getFactHandle("Transaction");
Transaction t = (Transaction) obj.getObject();
System.out.println("BU!");
}
};
或者这只是错误的方法?
谢谢!
【问题讨论】:
-
您引用的第一个问题已完全回答并接受。第二个问题的 cmets 提到了 getObjects 命令,用于检索事实。其他命令也可用于从 Drools 服务器返回信息。
-
@laune 你是在暗示这是重复的,应该关闭吗?
-
值得商榷。我还在检查它。无论如何,我正在使用 REST,建议的解决方案不起作用。今天我会发表评论,提供更多信息。
-
@kaskelotti 首先,我驳斥了 Eddie 的说法,即第一个问题“未得到解答”。更详细的描述可能会阐明他的问题。
-
更改了声明的“未回答”部分。谢谢。