Hide Forgot
+++ This bug was initially created as a clone of Bug #1318532 +++ Description of problem: Assuming you have a rule which uses ClassFieldReader, for example a rule like this: === when $p : Person ($types : types) $type : String() from $types === ("types" is a List field.) Incremental Build overwrites existing ClassFieldReader.reader. So later runtime execution results in ClassCastException on classes with the same FQCN. ========= 16:07:09,011 WARN [org.drools.persistence.SingleSessionCommandService] (http-localhost.localdomain/127.0.0.1:8080-1) Could not commit session: java.lang.ClassCastException: org.kie.example.project1.Person cannot be cast to org.kie.example.project1.Person at org.drools.base.org.kie.example.project1.Person1340276313$getTypes.getValue(Unknown Source) at org.drools.core.base.ClassFieldReader.getValue(ClassFieldReader.java:91) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.rule.Declaration.getValue(Declaration.java:253) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.base.mvel.MVELCompilationUnit.updateFactory(MVELCompilationUnit.java:366) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.base.mvel.MVELCompilationUnit.getFactory(MVELCompilationUnit.java:297) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.base.dataproviders.MVELDataProvider.getResults(MVELDataProvider.java:117) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.phreak.PhreakFromNode.doLeftInserts(PhreakFromNode.java:105) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.phreak.PhreakFromNode.doNode(PhreakFromNode.java:67) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.phreak.RuleNetworkEvaluator.evalNode(RuleNetworkEvaluator.java:386) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.phreak.RuleNetworkEvaluator.innerEval(RuleNetworkEvaluator.java:332) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.phreak.RuleNetworkEvaluator.outerEval(RuleNetworkEvaluator.java:166) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.phreak.RuleNetworkEvaluator.evaluateNetwork(RuleNetworkEvaluator.java:123) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.phreak.RuleExecutor.reEvaluateNetwork(RuleExecutor.java:194) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.phreak.RuleExecutor.evaluateNetworkAndFire(RuleExecutor.java:73) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:978) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1292) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.impl.StatefulKnowledgeSessionImpl.internalFireAllRules(StatefulKnowledgeSessionImpl.java:1294) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1281) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1260) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.command.runtime.rule.FireAllRulesCommand.execute(FireAllRulesCommand.java:111) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.command.runtime.rule.FireAllRulesCommand.execute(FireAllRulesCommand.java:36) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.command.impl.DefaultCommandService.execute(DefaultCommandService.java:36) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.command.impl.AbstractInterceptor.executeNext(AbstractInterceptor.java:41) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.persistence.SingleSessionCommandService$TransactionInterceptor.execute(SingleSessionCommandService.java:584) [drools-persistence-jpa-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.command.impl.AbstractInterceptor.executeNext(AbstractInterceptor.java:41) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.persistence.jpa.OptimisticLockRetryInterceptor.execute(OptimisticLockRetryInterceptor.java:82) [drools-persistence-jpa-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.command.impl.AbstractInterceptor.executeNext(AbstractInterceptor.java:41) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.persistence.jta.TransactionLockInterceptor.execute(TransactionLockInterceptor.java:73) [drools-persistence-jpa-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.persistence.SingleSessionCommandService.execute(SingleSessionCommandService.java:377) [drools-persistence-jpa-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.command.impl.CommandBasedStatefulKnowledgeSession.fireAllRules(CommandBasedStatefulKnowledgeSession.java:268) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.jbpm.process.instance.event.listeners.TriggerRulesEventListener.afterRuleFlowGroupActivated(TriggerRulesEventListener.java:83) [jbpm-flow-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.event.AgendaEventSupport.fireAfterRuleFlowGroupActivated(AgendaEventSupport.java:152) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.common.DefaultAgenda.activateRuleFlowGroup(DefaultAgenda.java:703) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.common.DefaultAgenda.activateRuleFlowGroup(DefaultAgenda.java:691) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.jbpm.workflow.instance.node.RuleSetNodeInstance.internalTrigger(RuleSetNodeInstance.java:87) [jbpm-flow-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.jbpm.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:173) [jbpm-flow-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerNodeInstance(NodeInstanceImpl.java:366) [jbpm-flow-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerCompleted(NodeInstanceImpl.java:325) [jbpm-flow-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.jbpm.workflow.instance.node.ActionNodeInstance.triggerCompleted(ActionNodeInstance.java:61) [jbpm-flow-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.jbpm.workflow.instance.node.ActionNodeInstance.internalTrigger(ActionNodeInstance.java:57) [jbpm-flow-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.jbpm.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:173) [jbpm-flow-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerNodeInstance(NodeInstanceImpl.java:366) [jbpm-flow-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerCompleted(NodeInstanceImpl.java:325) [jbpm-flow-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.jbpm.workflow.instance.node.StartNodeInstance.triggerCompleted(StartNodeInstance.java:73) [jbpm-flow-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.jbpm.workflow.instance.node.StartNodeInstance.internalTrigger(StartNodeInstance.java:44) [jbpm-flow-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.jbpm.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:173) [jbpm-flow-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.jbpm.ruleflow.instance.RuleFlowProcessInstance.internalStart(RuleFlowProcessInstance.java:35) [jbpm-flow-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.jbpm.process.instance.impl.ProcessInstanceImpl.start(ProcessInstanceImpl.java:236) [jbpm-flow-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.jbpm.workflow.instance.impl.WorkflowProcessInstanceImpl.start(WorkflowProcessInstanceImpl.java:439) [jbpm-flow-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.jbpm.process.instance.ProcessRuntimeImpl.startProcessInstance(ProcessRuntimeImpl.java:208) [jbpm-flow-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.jbpm.process.instance.ProcessRuntimeImpl.startProcessInstance(ProcessRuntimeImpl.java:217) [jbpm-flow-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.jbpm.process.instance.ProcessRuntimeImpl.startProcess(ProcessRuntimeImpl.java:225) [jbpm-flow-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.impl.StatefulKnowledgeSessionImpl.startProcess(StatefulKnowledgeSessionImpl.java:1812) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.command.runtime.process.StartCorrelatedProcessCommand.execute(StartCorrelatedProcessCommand.java:146) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.command.runtime.process.StartCorrelatedProcessCommand.execute(StartCorrelatedProcessCommand.java:44) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.command.impl.DefaultCommandService.execute(DefaultCommandService.java:36) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.command.impl.AbstractInterceptor.executeNext(AbstractInterceptor.java:41) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.persistence.SingleSessionCommandService$TransactionInterceptor.execute(SingleSessionCommandService.java:584) [drools-persistence-jpa-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.command.impl.AbstractInterceptor.executeNext(AbstractInterceptor.java:41) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.persistence.jpa.OptimisticLockRetryInterceptor.execute(OptimisticLockRetryInterceptor.java:82) [drools-persistence-jpa-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.command.impl.AbstractInterceptor.executeNext(AbstractInterceptor.java:41) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.persistence.jta.TransactionLockInterceptor.execute(TransactionLockInterceptor.java:73) [drools-persistence-jpa-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.persistence.SingleSessionCommandService.execute(SingleSessionCommandService.java:377) [drools-persistence-jpa-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.drools.core.command.impl.CommandBasedStatefulKnowledgeSession.startProcess(CommandBasedStatefulKnowledgeSession.java:529) [drools-core-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.jbpm.kie.services.impl.ProcessServiceImpl.startProcess(ProcessServiceImpl.java:126) [jbpm-kie-services-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.jbpm.services.cdi.impl.ProcessServiceCDIImpl$Proxy$_$$_WeldClientProxy.startProcess(ProcessServiceCDIImpl$Proxy$_$$_WeldClientProxy.java) [jbpm-services-cdi-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at org.jbpm.console.ng.bd.backend.server.KieSessionEntryPointImpl.startProcess(KieSessionEntryPointImpl.java:78) [jbpm-console-ng-business-domain-backend-6.3.0.Final-redhat-5.jar:6.3.0.Final-redhat-5] at ... =============== Steps to Reproduce: 1. Start BPMS 6.2.0 2. Access business-central. 3. Clone the attached repository (ClassFieldReaderRuleRepo.zip) to business-central 4. Click [Build&Deploy] -> the project is deployed 5. Open 'drl1' under org/kie/example/project1 6. Edit 'drl1' and Save (e.g. add a white-space) -> Incremental Build done 7. Go to [Process Management] -> [Process Definitions] 8. Press [Start] for 'process1' 9. Press [Submit] on the pop-up * This is not a concurrency issue. You can reproduce this step-by-step. Actual results: java.lang.ClassCastException: org.kie.example.project1.Person cannot be cast to org.kie.example.project1.Person is thrown. Expected results: Execute the process without Exception. Additional info: This reproduce step requires BPMS but I filed this BZ for BRMS because the issue seems to belong to drools build process. Reproduced in BPMS 6.1.3 / 6.2.0 / 6.2.1 --- Additional comment from Mario Fusco on 2016-03-17 13:28:25 EDT --- Fixed by https://github.com/droolsjbpm/drools/commit/464aad2fd
Created attachment 1137644 [details] ClassFieldReaderRuleRepo.zip
Cherry-picked to 6.3.x branch with https://github.com/droolsjbpm/drools/commit/d82e484b5
Verified in BPM Suite 6.2.3.CR1 The process1 completes successfully in org.kie.example:project1:1.0.0 as well as in the incremental build org.kie.example:project1:1.0.1.