我正在使用编组程序序列化和反序列化DROOLS会话。它似乎按预期工作。但是我注意到的是,以前创建的事实句柄在尝试在反序列化会话上检索事实时不再起作用。
以下测试失败,因为事实变量等于null。请注意,下面的代码是伪代码,仅用于传达想法。
Customer c = new Customer();
KieSession kSession = kContainer.newKieSession();
FactHandle h = kSession.insert(c);
byte[] bytes = marshaller.marshall(kSession);
KieSession restoredSession = marshaller.unmarshall(bytes);
Object fact = restoredSession.getObject(h);
Assert.assertEquals(c, fact);
我想保留/重复使用该句柄的原因是,我可以在分布式环境中以一致的方式检索事实。
有什么想法我可以实现吗?
更新:
我也尝试了普罗霍罗夫先生的建议。
Customer c = new Customer();
KieSession kSession = kContainer.newKieSession();
FactHandle originalHandle = kSession.insert(c);
String externalHandle = h.toExternalForm();
byte[] bytes = marshaller.marshall(kSession);
KieSession restoredSession = marshaller.unmarshall(bytes);
FactHandle restoredHandle = DefaultFactHandle.createFromExternalFormat(externalHandle)
Object fact = restoredSession.getObject(restoredHandle);
Assert.assertEquals(c, fact);
谢谢