[jboss-jira] [JBoss JIRA] (DROOLS-1098) Equals behaviour faulty when loading sessions after exception

Artur Kronenberg (JIRA) issues at jboss.org
Fri Mar 18 10:27:00 EDT 2016


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

Artur Kronenberg commented on DROOLS-1098:
------------------------------------------

So, in case anyone needs to work around this so that persistence is stable. (I hope/think). You can do that: 

1. Create marker interface for objects that need de-duplication 
2. create a rule: 


{code:java}
rule "Schrodinger Rule"
no-loop true
salience 1 // this will make this rule the first to execute

    when
        $e : Equality();
        $e2 : Equality( this == $e, eval($e != $e2) );
    then
        retract($e);
end
{code}


(I called it Schrodinger's rule because the facts are at the same time kinda equal and not equal :P ) 

This matches all facts, that have a different identity but are still equal and removes the duplicate automatically. I tested it with 30k facts and it runs in about 600 ms. 

After this, one can switch their beliefe system to "identity", which fixes the session loading, and the rule implements the equals behaviour. 

> Equals behaviour faulty when loading sessions after exception
> -------------------------------------------------------------
>
>                 Key: DROOLS-1098
>                 URL: https://issues.jboss.org/browse/DROOLS-1098
>             Project: Drools
>          Issue Type: Bug
>          Components: core engine
>    Affects Versions: 6.3.0.Final
>         Environment: Mac OS 10.10.5, Eclipse Mars Release, Java 1.8, Drools 6.3.0.Final
>            Reporter: Artur Kronenberg
>            Assignee: Mario Fusco
>         Attachments: test-standalone.zip
>
>
> This is in a series of debugging and I think a few issues boil down to this:
> https://issues.jboss.org/browse/DROOLS-1093
> https://issues.jboss.org/browse/DROOLS-1097
> This bug demonstrates how two identical sessions with identical input and rules produce a NPE when loading with equals behaviour vs identity behaviour. I am currently battling that issue and looking for a workaround. 
> Essentially, you can run the unit tests I attached in the test project: (ExceptionTest)
> testIdentity - passes 
> testIdentityWithReload - passes
> testEquals - NPE
> testEqualsWithReload- NPE
> The tests do the same thing: 
> * Create new persistent session 
> * Load facts into it
> * Run 20 times either reloading the session (depending on the test cases) or using the old session. Each run, insert one fact and run all the rules. Eventually the equals tests (I believe after iteration 2) NPE when trying to deserialise the session. Identity has no issues and functions correctly. 
> Let me know if you need anything else and please do let me know if there is a workaround. I am currently exploring the workaround avenue myself as well and will come back here with an update should I find one. 



--
This message was sent by Atlassian JIRA
(v6.4.11#64026)


More information about the jboss-jira mailing list