Details
-
Bug
-
Resolution: Unresolved
-
Major
-
None
-
7.48.0.Final
-
None
-
Undefined
-
NEW
-
NEW
-
---
-
---
Description
Exception says 'Currently we cannot modify something that has mixed stated and justified equal objects'. But there are no two equal objects in the session.
Test
@Test public void testUpdateLogicalEvent() { KieSession session = ... AtomicInteger positive = new AtomicInteger(1); session.insert(new AtomicInteger(-1)); session.fireAllRules(); session.insert(positive); session.fireAllRules(); session.insert(new AdminEvent("update logical event")); session.fireAllRules(); assertEquals(1, positive.get()); } public static class Event { private String message; public Event(String message) { this.message = message; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } @Override public boolean equals(Object obj) { return reflectionEquals(this, obj, false); } @Override public int hashCode() { return reflectionHashCode(this, false); } } public static class AdminEvent { private String message; public AdminEvent(String message) { this.message = message; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
Rule
dialect 'mvel' import java.util.concurrent.atomic.AtomicInteger import ...Event import ...AdminEvent rule 'negative integer' when $int: AtomicInteger(intValue < 0) then insertLogical(new Event("negative integer")) end rule 'increment positive if no negative values' when $positive: AtomicInteger(intValue > 0) not Event() then $positive.incrementAndGet(); end rule 'update logical event' when AdminEvent(message == 'update logical event') $event: Event() then $event.setMessage("Updated logical event"); update($event); end
Exception
Exception executing consequence for rule "update logical event" in org.droolsassert: [Error: drools.update($event, new org.drools.core.util.bitmask.LongBitMask(2L), org.droolsassert.LogicalEventsTest.Event.class): Currently we cannot modify something that has mixed stated and justified equal objects. Rule update logical event attempted an illegal operation] [Near : {... $event.setMessage("Updated log ....}] ^ [Line: 1, Column: 1] at org.drools.core.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39) at org.drools.core.common.DefaultAgenda.handleException(DefaultAgenda.java:1291) at org.drools.core.phreak.RuleExecutor.innerFireActivation(RuleExecutor.java:439) at org.drools.core.phreak.RuleExecutor.fireActivation(RuleExecutor.java:380) at org.drools.core.phreak.RuleExecutor.fire(RuleExecutor.java:136) at org.drools.core.phreak.RuleExecutor.evaluateNetworkAndFire(RuleExecutor.java:89) at org.drools.core.concurrent.AbstractRuleEvaluator.internalEvaluateAndFire(AbstractRuleEvaluator.java:34) at org.drools.core.concurrent.SequentialRuleEvaluator.evaluateAndFire(SequentialRuleEvaluator.java:43) at org.drools.core.common.DefaultAgenda.fireLoop(DefaultAgenda.java:1101) at org.drools.core.common.DefaultAgenda.internalFireAllRules(DefaultAgenda.java:1048) at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1040) at org.drools.core.impl.StatefulKnowledgeSessionImpl.internalFireAllRules(StatefulKnowledgeSessionImpl.java:1330) at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1321) at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1305) at org.droolsassert.LogicalEventsTest.testUpdateLogicalEvent(LogicalEventsTest.java:58) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.droolsassert.DroolsAssert.evaluate(DroolsAssert.java:789) at org.droolsassert.DroolsAssert$1.evaluate(DroolsAssert.java:781) at org.junit.rules.RunRules.evaluate(RunRules.java:20) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:542) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:770) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:464) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210) Caused by: [Error: drools.update($event, new org.drools.core.util.bitmask.LongBitMask(2L), org.droolsassert.LogicalEventsTest.Event.class): Currently we cannot modify something that has mixed stated and justified equal objects. Rule update logical event attempted an illegal operation] [Near : {... $event.setMessage("Updated log ....}] ^ [Line: 1, Column: 1] at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:435) at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.optimizeAccessor(ReflectiveAccessorOptimizer.java:163) at org.mvel2.ast.ASTNode.optimize(ASTNode.java:159) at org.mvel2.ast.ASTNode.getReducedValueAccelerated(ASTNode.java:115) at org.mvel2.MVELRuntime.execute(MVELRuntime.java:85) at org.mvel2.compiler.CompiledExpression.getDirectValue(CompiledExpression.java:123) at org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:119) at org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:113) at org.mvel2.MVEL.executeExpression(MVEL.java:929) at org.drools.core.base.mvel.MVELConsequence.evaluate(MVELConsequence.java:110) at org.drools.core.phreak.RuleExecutor.innerFireActivation(RuleExecutor.java:432) ... 39 more Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getMethod(ReflectiveAccessorOptimizer.java:1119) at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getMethod(ReflectiveAccessorOptimizer.java:1002) at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:396) ... 49 more Caused by: java.lang.IllegalStateException: Currently we cannot modify something that has mixed stated and justified equal objects. Rule update logical event attempted an illegal operation at org.drools.core.common.NamedEntryPoint.update(NamedEntryPoint.java:383) at org.drools.core.base.DefaultKnowledgeHelper.update(DefaultKnowledgeHelper.java:410) at org.drools.core.base.DefaultKnowledgeHelper.update(DefaultKnowledgeHelper.java:425) ... 56 more
Attachments
Issue Links
- causes
-
DROOLS-6081 Logical events hardly fit specification
- Open
- is related to
-
DROOLS-6072 Logical events. Staging will set it's status to stated
- Open
-
DROOLS-6080 Logical events. The justified set can be unstaged, when the last stated has been deleted
- Open