Hello; I'm using Drools 5.2.0-SNAPSHOT.
I have a StatefulKnowledgeSession spawned from a KnowledgeBase whose
KnowledgeBaseConfiguration is set up to use equality, not identity for (as I
understand it) testing to see whether a fact is in the base or not.
I have this verified with a (nasty) assert statement (I didn't see any other
way to get the KnowledgeBaseConfiguration out, which looks like an API
omission to me):
assert ((InternalRuleBase)((
KnowledgeBaseImpl)sks.getKnowledgeBase()).getRuleBase()).getConfiguration().getAssertBehaviour().equals(AssertBehaviour.EQUALITY);
OK, so the internal knowledge base is using equality.
I stick some facts in via insert. Then I serialize the session using all
the right classes from org.drools.marshalling. I choose the full
serialization mode.
As I understand it, this means that the knowledge base and the facts will
all be serialized. I am aware of the fact that all facts will get new
identities.
At some point in the future, I deserialize the session (successfully).
When I take the same object that I inserted, and call
statefulSession.getFactHandle(myObject), I get null back.
This is despite the fact that my object has an equals() method, and that the
equals() method is heavily unit tested (and simple).
That is, despite the fact that the KnowledgeBase is confirmed to use
equality, not identity, there does not seem to be a way to test if the
session contains a particular fact. It's like identity is still being used.
Am I overlooking something obvious?
Thanks,
Laird
Show replies by date