[
https://issues.jboss.org/browse/DROOLS-1098?page=com.atlassian.jira.plugi...
]
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)