Bug 1318855

Summary: [GSS] (6.2.z) ClassCastException on classes with the same FQCN after incremental build
Product: [Retired] JBoss BRMS Platform 6 Reporter: Toshiya Kobayashi <tkobayas>
Component: BREAssignee: Mario Fusco <mfusco>
Status: CLOSED EOL QA Contact: Ivo Bek <ibek>
Severity: high Docs Contact:
Priority: high    
Version: 6.2.0CC: ibek, mfusco, mwinkler, rrajasek
Target Milestone: CR1   
Target Release: 6.2.3   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: 1318532 Environment:
Last Closed: 2020-03-27 19:10:42 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Bug Depends On: 1318532    
Bug Blocks: 1327763, 1327765    
Attachments:
Description Flags
ClassFieldReaderRuleRepo.zip none

Description Toshiya Kobayashi 2016-03-18 02:05:28 UTC
+++ 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

Comment 1 Toshiya Kobayashi 2016-03-18 02:06:56 UTC
Created attachment 1137644 [details]
ClassFieldReaderRuleRepo.zip

Comment 3 Mario Fusco 2016-04-18 09:03:16 UTC
Cherry-picked to 6.3.x branch with https://github.com/droolsjbpm/drools/commit/d82e484b5

Comment 4 Ivo Bek 2016-05-04 09:23:03 UTC
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.