EAR containing SwitchYard jars sometimes fails during deployment when the application has a dependency on "org.overlord.rtgov"
Issue
- Sometimes users get this exception when deploying an
EAR
application (at server start-up) that contains multipleSwitchYard
jars containing a lot ofDrools
rule files (drl
) .
12:52:29,600 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-7) MSC000001: Failed to start service jboss.deployment.subunit."simple.ear"."backendswitchyard-0.0.1-SNAPSHOT.jar".SwitchYardService: org.jboss.msc.service.StartException in service jboss.deployment.subunit."simple.ear"."backendswitchyard-0.0.1-SNAPSHOT.jar".SwitchYardService: [Error: ASMAccessorImpl_16291840971449834749560 cannot be cast to org.mvel2.compiler.Accessor]
[Near : {... @declare{"returnValueMethod"} ....}]
^
[Line: 1, Column: 1]
at org.switchyard.as7.extension.services.SwitchYardService.start(SwitchYardService.java:89)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.4.GA-redhat-1.jar:1.0.4.GA-redhat-1]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.4.GA-redhat-1.jar:1.0.4.GA-redhat-1]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_72]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_72]
at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_72]
Caused by: [Error: ASMAccessorImpl_16291840971449834749560 cannot be cast to org.mvel2.compiler.Accessor]
[Near : {... @declare{"returnValueMethod"} ....}]
^
[Line: 1, Column: 1]
at org.mvel2.optimizers.impl.asm.ASMAccessorOptimizer.compileAccessor(ASMAccessorOptimizer.java:883)
at org.mvel2.optimizers.impl.asm.ASMAccessorOptimizer.optimizeAccessor(ASMAccessorOptimizer.java:243)
at org.mvel2.optimizers.dynamic.DynamicGetAccessor.optimize(DynamicGetAccessor.java:90)
at org.mvel2.optimizers.dynamic.DynamicGetAccessor.getValue(DynamicGetAccessor.java:64)
at org.mvel2.ast.ASTNode.getReducedValueAccelerated(ASTNode.java:108)
at org.mvel2.compiler.ExecutableAccessor.getValue(ExecutableAccessor.java:42)
at org.mvel2.MVEL.executeExpression(MVEL.java:930)
at org.mvel2.templates.res.CompiledExpressionNode.eval(CompiledExpressionNode.java:45)
at org.mvel2.templates.res.TextNode.eval(TextNode.java:42)
at org.mvel2.templates.res.CompiledExpressionNode.eval(CompiledExpressionNode.java:46)
at org.mvel2.templates.res.TextNode.eval(TextNode.java:42)
at org.mvel2.templates.res.CompiledExpressionNode.eval(CompiledExpressionNode.java:46)
at org.mvel2.templates.res.TextNode.eval(TextNode.java:42)
at org.mvel2.templates.res.CompiledForEachNode.eval(CompiledForEachNode.java:114)
at org.mvel2.templates.res.TextNode.eval(TextNode.java:42)
at org.mvel2.templates.res.TerminalNode.eval(TerminalNode.java:35)
at org.mvel2.templates.res.TextNode.eval(TextNode.java:42)
at org.mvel2.templates.res.CompiledIfNode.eval(CompiledIfNode.java:44)
at org.mvel2.templates.res.TextNode.eval(TextNode.java:42)
at org.mvel2.templates.res.CompiledExpressionNode.eval(CompiledExpressionNode.java:46)
at org.mvel2.templates.res.TextNode.eval(TextNode.java:42)
at org.mvel2.templates.TemplateRuntime.execute(TemplateRuntime.java:285)
at org.mvel2.templates.TemplateRuntime.execute(TemplateRuntime.java:247)
at org.mvel2.templates.TemplateRuntime.execute(TemplateRuntime.java:255)
at org.mvel2.templates.TemplateRuntime.execute(TemplateRuntime.java:207)
at org.drools.compiler.rule.builder.dialect.java.JavaRuleBuilderHelper.generateMethodTemplate(JavaRuleBuilderHelper.java:226)
at org.drools.compiler.rule.builder.dialect.asm.AbstractASMConsequenceBuilder.build(AbstractASMConsequenceBuilder.java:24)
at org.drools.compiler.rule.builder.RuleBuilder.build(RuleBuilder.java:109)
at org.drools.compiler.compiler.PackageBuilder.addRule(PackageBuilder.java:3326)
at org.drools.compiler.compiler.PackageBuilder.compileRules(PackageBuilder.java:1076)
at org.drools.compiler.compiler.PackageBuilder.compileAllRules(PackageBuilder.java:965)
at org.drools.compiler.compiler.CompositeKnowledgeBuilderImpl.buildRules(CompositeKnowledgeBuilderImpl.java:266)
at org.drools.compiler.compiler.CompositeKnowledgeBuilderImpl.buildPackages(CompositeKnowledgeBuilderImpl.java:98)
at org.drools.compiler.compiler.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:87)
at org.drools.compiler.kie.builder.impl.AbstractKieModule.buildKnowledgePackages(AbstractKieModule.java:204)
at org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:39)
at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:309)
at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:187)
at org.switchyard.component.common.knowledge.session.KnowledgeBuilderSessionFactory.newBase(KnowledgeBuilderSessionFactory.java:125)
at org.switchyard.component.common.knowledge.session.KnowledgeBuilderSessionFactory.<init>(KnowledgeBuilderSessionFactory.java:71)
at org.switchyard.component.common.knowledge.session.KnowledgeSessionFactory.newSessionFactory(KnowledgeSessionFactory.java:117)
at org.switchyard.component.common.knowledge.exchange.KnowledgeExchangeHandler.doStart(KnowledgeExchangeHandler.java:204)
at org.switchyard.deploy.BaseServiceHandler.start(BaseServiceHandler.java:60)
at org.switchyard.deploy.internal.Deployment.deployImplementations(Deployment.java:574)
at org.switchyard.deploy.internal.Deployment.start(Deployment.java:144)
at org.switchyard.as7.extension.deployment.SwitchYardDeployment.start(SwitchYardDeployment.java:127)
at org.switchyard.as7.extension.services.SwitchYardService.start(SwitchYardService.java:78)
... 5 more
Caused by: java.lang.ClassCastException: ASMAccessorImpl_16291840971449834749560 cannot be cast to org.mvel2.compiler.Accessor
at org.mvel2.optimizers.impl.asm.ASMAccessorOptimizer._initializeAccessor(ASMAccessorOptimizer.java:745)
at org.mvel2.optimizers.impl.asm.ASMAccessorOptimizer.compileAccessor(ASMAccessorOptimizer.java:859)
... 51 more
As this error occurs only sometimes and for different modules it looks like a race condition on the ASM
optimization of MVEL
expressions. Initial analysis showed that the problem occurs, because the Accessor
is loaded by two different class loaders and especially through two different modules like the following shipped with FSW 6.0.0
installation.
Module Name : Internally Dependent Module Name
-------------------------------------------------------
org.drools : org.mvel
org.overlord.rtgov : org.mvel.mvel2
Users application inherits the first module dependency (i.e. org.drools
) through the usage of the SwitchYard Rules Component
. The second module dependency is introduced, as the EAR
application has a dependency on this module org.overlord.rtgov
.
- What is the root cause behind this issue and how to fix it?
Environment
- Red Hat JBoss Fuse Service Works (FSW)
- 6.0.0
Subscriber exclusive content
A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.