流口水-在编组中不需要的对象,这些对象不属于工作记忆

时间:2019-07-29 22:36:25

标签: drools

我正在尝试通过KieSession API序列化KieMarshaller!但是由于尝试序列化不是事实的对象而失败!

为了清楚起见,我在会话中检索了所有事实:

kieSession.getFactHandleS();

我有10个事实;

我还实现了被动ObjectMarshallingStrategyAcceptor来记录在封送处理期间迭代的对象:

ObjectMarshallingStrategyAcceptor filterCI = new ObjectMarshallingStrategyAcceptor() {
  @Override
  public boolean accept(Object object) {
    System.out.println(object.getClass().getName());
    return true;
  }
};

ObjectMarshallingStrategy realSerialization = 
    marshallers.newSerializeMarshallingStrategy(filterCI);

Marshaller marshaller =  
    services.getMarshallers().newMarshaller(
        base, 
        new ObjectMarshallingStrategy[]{ realSerialization }
    );

运行代码时,它记录了30行!

以下是我的规则示例:

global Service srv;

rule "Catch X"
when
    x : X()
    y : Y() from srv.load(x.uri)
then
    System.out.println(x.toString() + y.toString());
end

我只在会话中插入10个X对象,但是当我登录filterCI时,看到20条X和10条Y行/日志;我没有将Y插入工作内存,而是使用from游标加载它!但Marshaller尝试对其进行序列化(虽然这不是事实),并且由于Y未实现Serializable接口而面临序列化错误。

0 个答案:

没有答案