Я сериализую и десериализирую сеансы DROOLS, используя маршаллер. Кажется, работает как ожидалось. Однако кое-что, что я замечаю, это то, что ранее создаваемые дескрипторы фактов больше не работают при попытке извлечь факты в десериализованном сеансе.
Приведенный ниже тест не пройден, поскольку переменная факта равна нулю. Обратите внимание, что приведенный ниже код является псевдокодом, просто чтобы передать идею.
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);
Спасибо