Слюни упорный факт управления - PullRequest
2 голосов
/ 16 октября 2019

Я сериализую и десериализирую сеансы 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);

Спасибо

...