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
EARapplication (at server start-up) that contains multipleSwitchYardjars containing a lot ofDroolsrule 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 of over 48,000 articles and solutions.
Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.
