[rules-users] AfterEvaluatorDefinition NullPointer Exception in deserialized ksession

Alexander Wolf mail at alexander-wolf.net
Fri Oct 11 11:09:08 EDT 2013


Hey Demian, 

thank you! This might actually be related. But how do I get the reference to these Operators to (re)set them?

This is my unmarshalling code (pretty simple and basic..):

ByteArrayInputStream bais = new ByteArrayInputStream(serializedKnowledgeBase);
ObjectInputStream ois = new ObjectInputStream(bais);
kbase = (KnowledgeBase)ois.readObject();
			
Marshaller marshaller = MarshallerFactory.newMarshaller(kbase);
ByteArrayInputStream bais2 = new ByteArrayInputStream(serializedKnowledgeSession);
knowledgeSession = marshaller.unmarshall(bais2);

Also: Is this going to be fixed in 5.6.0 ? (@Mark Proctor?)

- Alex


On 11.10.2013, at 16:09, Demian Calcaprina <calcacuervo at gmail.com> wrote:

> Hey Alexander, 
> 
> Would this be related to this?
> 
> https://issues.jboss.org/browse/DROOLS-243
> 
> If it is this one, you can do something like this as a workaround before constructing the KBase:
> 
> Operator op = BeforeEvaluatorDefinition.BEFORE;
> Operator op = AfterEvaluatorDefinition.AFTER;
> 
> This will cause the evaluation definition to be put in  memory.
> 
> Hope this helps!
> 
> Demian
> 
> 
> On Fri, Oct 11, 2013 at 9:21 AM, Alexander Wolf <mail at alexander-wolf.net> wrote:
> [Drools 5.5.0 Final]
> 
> I wrote a webserver that keeps StatefulKnowledgeSessions running in Stream mode. When the server is stopped, the sessions are serialized and stored in a database. When the server is restarted, the existing sessions are restored / deserialized.
> 
> Some time after recreating the session and inserting some events I get the following exception:
> 
> java.lang.NullPointerException: null
> at org.drools.base.evaluators.AfterEvaluatorDefinition$AfterEvaluator.evaluateCachedLeft(AfterEvaluatorDefinition.java:351)
> ...
> 
> Apparently the exception seems to be related to a rule that uses temporal reasoning.
> After getting it once, the session seems to be corrupt -> from now on every time I call ksession.insert(event) the same exception occurs.
> When I serialize the session and attempt to deserialize it, I get a long stack trace --> I can not deserialize it anymore. (as apparently it is corrupted).
> When I run the server with the same events/sessions without stopping (serialization/deserialization) the exception does not occur)
> 
> Can I do anything to prevent this behaviour? I thought maybe the "after" timer/trigger is somehow still active when I serialize the ksession.
> I tried ksession.halt() before serialization, but with no effect.
> 
> Any ideas?
> 
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
> 
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20131011/e73c2ff2/attachment.html 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 841 bytes
Desc: Message signed with OpenPGP using GPGMail
Url : http://lists.jboss.org/pipermail/rules-users/attachments/20131011/e73c2ff2/attachment.bin 


More information about the rules-users mailing list