[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