[jboss-jira] [JBoss JIRA] Updated: (JBRULES-2267) NullPointerException would be thrown during rule execution

Freddy Andersen (JIRA) jira-events at lists.jboss.org
Thu Sep 3 17:12:23 EDT 2009


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

Freddy Andersen updated JBRULES-2267:
-------------------------------------

    Attachment: Message.java


Attaching one more file.

> NullPointerException would be thrown during rule execution
> ----------------------------------------------------------
>
>                 Key: JBRULES-2267
>                 URL: https://jira.jboss.org/jira/browse/JBRULES-2267
>             Project: Drools
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>          Components: All
>    Affects Versions: 5.0.1.FINAL
>         Environment: Drools version: 5.0.1
> JDK version: 1.5.0_6 
>            Reporter: Freddy Andersen
>            Assignee: Mark Proctor
>             Fix For: 5.0.1.FINAL
>
>         Attachments: ClassFieldAccessorStore.java, HelloWorld-1.drl, Message.java, SerializedPackageMergeTest.java
>
>
> NullPointerException would be thrown during rule execution when the following conditions were met:
> 1. The org.drools.rule.Package instances should be serialized/de-serialized before being added to the RuleBase.
> 2. The de-serialized package instances should be added to a RuleBase - all the packages have the same package name.
> 3. At least one of the rules in the packages (not in the first package to be added to the RulBase; it would work fine while in the
> first package) should contain an IN, or NOT IN operator. 
> Our investigation revealed the followings:
> * One of the object field, ClassFieldReader. reader which is defined as transient, was let null when the package's were added to the RuleBase.
> * It became null because the parent package has been serialized/de-serialized.
> * It was not properly re-wired during the package merging when adding the package(s) to the RuleBase.
> * It only happens to the conditions/fields when IN or NOT IN was used. In other words, when a MultiRestrictionFieldConstraint was used.
> * The correct ReadAccessor was correctly set to instances of MultiRestrictionFieldConstraint in ClassFieldAccessorStore.merge, and
> the instance of ReadAccessor was propagated throw restrictions, such as OrCompositeRestriction during rule execution. The issue is that the
> leaf restrictions, such as LiteralRestriction, would only use their own ReadAccessor, not the one passed in, when evaluating isAllowed. Since
> it's own ReadAccessor was not properly re-set, meaning the field reader is null in this case, a NullPointerException would occur.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jboss-jira mailing list