[jboss-jira] [JBoss JIRA] (DROOLS-551) Incorrect serialization of Drools STREAM KieSession with expirable events causes NPE

RH Bugzilla Integration (JIRA) issues at jboss.org
Fri Jul 11 11:50:28 EDT 2014


     [ https://issues.jboss.org/browse/DROOLS-551?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

RH Bugzilla Integration updated DROOLS-551:
-------------------------------------------

    Bugzilla References: https://bugzilla.redhat.com/show_bug.cgi?id=1118449, https://bugzilla.redhat.com/show_bug.cgi?id=1118828  (was: https://bugzilla.redhat.com/show_bug.cgi?id=1118449)


> Incorrect serialization of Drools STREAM KieSession with expirable events causes NPE
> ------------------------------------------------------------------------------------
>
>                 Key: DROOLS-551
>                 URL: https://issues.jboss.org/browse/DROOLS-551
>             Project: Drools
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>    Affects Versions: 6.1.0.CR2
>         Environment: Mac OS X 10.9.2, Oracle HotSpot 1.7.0_60, JBoss BRMS 6.0.2.GA
>            Reporter: Duncan Doyle
>            Assignee: Mario Fusco
>            Priority: Critical
>              Labels: backport-to-6.0.x
>             Fix For: 6.1.0.Final
>
>
> There is an issue in Drools 6, both in PHREAK and RETEOO mode, which causes NPEs to be thrown when a session is serialized and deserialized.
> The problem occurs when running a stateful KieSession in STREAM mode and using Events with @expires annotations. When you insert an event with an @expires annotation, and you explicitly retract that Event again from the engine (i.e. KieSession.delete), and after that serialize the session, you end up with an invalid serialized session.
> When you later deserialize the session, and immediately serialize it again, a NPE is thrown at: org.drools.core.reteoo.ObjectTypeNode$ExpireJobContextTimerOutputMarshaller.serialize(ObjectTypeNode.java:669). When you deserialize the session and then advance the pseudo clock to a moment where the original event (which we've already retracted from the working memory) should have expired, a NPE is thrown at: org.drools.core.common.AbstractWorkingMemory$WorkingMemoryReteExpireAction.execute(AbstractWorkingMemory.java:1524)
> So, it seems that when the Event is explicitly retracted with KieSesion.delete(event), the event is removed from the WM, but the Expiry Timer Job is not. That ExpiryJob gets serialized with a 'null' fact handle, which does not give issues on de-serialization, but on the next serialization of the session, or when an action is peformed that triggers the expire action (i.e. move the pseudo-clock).
> A reproducer can be  found here: http://www.github.com/DuncanDoyle/DroolsSerializationIssue . To reproduce:
> - git clone http://www.github.com/DuncanDoyle/DroolsSerializationIssue
> - cd DroolsSerializationIssue/DroolSerializationIssue
> - mvn clean test -P phreak	(runs the test with Drools in PHREAK mode)
> - mvn clean test -P reteoo 	(runs the test with Drools in RETEOO mode)
> In both modes 2 of the 3 tests produce an NPE.
> Cheers,
> Duncan



--
This message was sent by Atlassian JIRA
(v6.2.6#6264)


More information about the jboss-jira mailing list