[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
Thu Aug 21 09:52:00 EDT 2014


    [ https://issues.jboss.org/browse/DROOLS-551?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12994745#comment-12994745 ] 

RH Bugzilla Integration commented on DROOLS-551:
------------------------------------------------

Lukáš Petrovický <lpetrovi at redhat.com> changed the Status of [bug 1130937|https://bugzilla.redhat.com/show_bug.cgi?id=1130937] from MODIFIED to CLOSED

> 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.3.1#6329)



More information about the jboss-jira mailing list