You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@unomi.apache.org by "Serge Huber (Jira)" <ji...@apache.org> on 2020/11/21 10:08:00 UTC

[jira] [Resolved] (UNOMI-401) Wrong classloader used in MvelScriptExecutor

     [ https://issues.apache.org/jira/browse/UNOMI-401?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Serge Huber resolved UNOMI-401.
-------------------------------
    Resolution: Fixed

> Wrong classloader used in MvelScriptExecutor
> --------------------------------------------
>
>                 Key: UNOMI-401
>                 URL: https://issues.apache.org/jira/browse/UNOMI-401
>             Project: Apache Unomi
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.5.2, 1.5.3, 1.5.4
>            Reporter: Serge Huber
>            Priority: Major
>             Fix For: 1.5.4
>
>          Time Spent: 40m
>  Remaining Estimate: 0h
>
> In the new MvelScriptExecutor class, the ContextClassLoader is only set to the local one when compiling the scripts instead of also when executing them. Because of this we sometimes get the following error:
> {code}
> 2020-11-16 18:06:40,269 | WARN  | tp1986789591-143 | ServletHandler                   | 232 - org.eclipse.jetty.util - 9.3.24.v20180605 | Error for /context.js
> java.lang.NoClassDefFoundError: org/mvel2/compiler/Accessor
> 	at java.lang.ClassLoader.defineClass1(Native Method) ~[?:?]
> 	at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[?:?]
> 	at java.lang.ClassLoader.defineClass(ClassLoader.java:642) ~[?:?]
> 	at org.mvel2.optimizers.impl.asm.ASMAccessorOptimizer$ContextClassLoader.defineClass(ASMAccessorOptimizer.java:2243) ~[?:?]
> 	at org.mvel2.optimizers.impl.asm.ASMAccessorOptimizer.loadClass(ASMAccessorOptimizer.java:2252) ~[?:?]
> 	at org.mvel2.optimizers.impl.asm.ASMAccessorOptimizer._initializeAccessor(ASMAccessorOptimizer.java:748) ~[?:?]
> 	at org.mvel2.optimizers.impl.asm.ASMAccessorOptimizer.compileAccessor(ASMAccessorOptimizer.java:891) ~[?:?]
> 	at org.mvel2.optimizers.impl.asm.ASMAccessorOptimizer.optimizeAccessor(ASMAccessorOptimizer.java:279) ~[?:?]
> 	at org.mvel2.optimizers.dynamic.DynamicGetAccessor.optimize(DynamicGetAccessor.java:95) ~[?:?]
> 	at org.mvel2.optimizers.dynamic.DynamicGetAccessor.getValue(DynamicGetAccessor.java:65) ~[?:?]
> 	at org.mvel2.ast.ASTNode.getReducedValueAccelerated(ASTNode.java:108) ~[?:?]
> 	at org.mvel2.compiler.ExecutableAccessor.getValue(ExecutableAccessor.java:38) ~[?:?]
> 	at org.mvel2.optimizers.impl.refl.nodes.MapAccessorNest.setValue(MapAccessorNest.java:67) ~[?:?]
> 	at org.mvel2.optimizers.impl.refl.nodes.VariableAccessor.setValue(VariableAccessor.java:46) ~[?:?]
> 	at org.mvel2.optimizers.dynamic.DynamicSetAccessor.setValue(DynamicSetAccessor.java:69) ~[?:?]
> 	at org.mvel2.compiler.CompiledAccExpression.setValue(CompiledAccExpression.java:59) ~[?:?]
> 	at org.mvel2.ast.AssignmentNode.getReducedValueAccelerated(AssignmentNode.java:111) ~[?:?]
> 	at org.mvel2.compiler.ExecutableAccessor.getValue(ExecutableAccessor.java:38) ~[?:?]
> 	at org.mvel2.ast.IfNode.getReducedValueAccelerated(IfNode.java:74) ~[?:?]
> 	at org.mvel2.compiler.ExecutableAccessor.getValue(ExecutableAccessor.java:38) ~[?:?]
> 	at org.mvel2.ast.IfNode.getReducedValueAccelerated(IfNode.java:80) ~[?:?]
> 	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.MVEL.executeExpression(MVEL.java:968) ~[?:?]
> 	at org.apache.unomi.scripting.MvelScriptExecutor.execute(MvelScriptExecutor.java:72) ~[?:?]
> 	at Proxy910238ca_b1fb_4d7b_89bb_c895be9aa46e.execute(Unknown Source) ~[?:?]
> 	at org.apache.unomi.services.actions.ActionExecutorDispatcher.executeScript(ActionExecutorDispatcher.java:204) ~[?:?]
> 	at org.apache.unomi.services.actions.ActionExecutorDispatcher$7.extract(ActionExecutorDispatcher.java:100) ~[?:?]
> 	at org.apache.unomi.services.actions.ActionExecutorDispatcher.parseMap(ActionExecutorDispatcher.java:139) ~[?:?]
> 	at org.apache.unomi.services.actions.ActionExecutorDispatcher.getContextualAction(ActionExecutorDispatcher.java:119) ~[?:?]
> 	at org.apache.unomi.services.actions.ActionExecutorDispatcher$8.execute(ActionExecutorDispatcher.java:185) ~[?:?]
> 	at org.apache.unomi.services.actions.ActionExecutorDispatcher$8.execute(ActionExecutorDispatcher.java:182) ~[?:?]
> 	at org.apache.unomi.metrics.MetricAdapter.runWithTimer(MetricAdapter.java:38) ~[?:?]
> 	at org.apache.unomi.services.actions.ActionExecutorDispatcher.execute(ActionExecutorDispatcher.java:187) ~[?:?]
> 	at org.apache.unomi.services.services.RulesServiceImpl.onEvent(RulesServiceImpl.java:276) ~[?:?]
> 	at org.apache.unomi.services.services.EventServiceImpl.send(EventServiceImpl.java:164) ~[?:?]
> 	at org.apache.unomi.services.services.EventServiceImpl.send(EventServiceImpl.java:141) ~[?:?]
> 	at Proxy820fa59c_c682_46e9_baa0_f4229d183053.send(Unknown Source) ~[?:?]
> 	at org.apache.unomi.web.ServletCommon.handleEvents(ServletCommon.java:89) ~[188:org.apache.unomi.wab:1.4.4.jahia-SNAPSHOT]
> 	at org.apache.unomi.web.ContextServlet.handleRequest(ContextServlet.java:324) ~[188:org.apache.unomi.wab:1.4.4.jahia-SNAPSHOT]
> 	at org.apache.unomi.web.ContextServlet.service(ContextServlet.java:261) ~[188:org.apache.unomi.wab:1.4.4.jahia-SNAPSHOT]
> 	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:840) ~[228:org.eclipse.jetty.servlet:9.3.24.v20180605]
> 	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:584) [228:org.eclipse.jetty.servlet:9.3.24.v20180605]
> 	at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:71) [262:org.ops4j.pax.web.pax-web-jetty:6.0.11]
> 	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) [226:org.eclipse.jetty.server:9.3.24.v20180605]
> 	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548) [222:org.eclipse.jetty.security:9.3.24.v20180605]
> 	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226) [226:org.eclipse.jetty.server:9.3.24.v20180605]
> 	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180) [226:org.eclipse.jetty.server:9.3.24.v20180605]
> 	at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:296) [262:org.ops4j.pax.web.pax-web-jetty:6.0.11]
> 	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:512) [228:org.eclipse.jetty.servlet:9.3.24.v20180605]
> 	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) [226:org.eclipse.jetty.server:9.3.24.v20180605]
> 	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112) [226:org.eclipse.jetty.server:9.3.24.v20180605]
> 	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) [226:org.eclipse.jetty.server:9.3.24.v20180605]
> 	at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:80) [262:org.ops4j.pax.web.pax-web-jetty:6.0.11]
> 	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134) [226:org.eclipse.jetty.server:9.3.24.v20180605]
> 	at org.eclipse.jetty.server.Server.handle(Server.java:539) [226:org.eclipse.jetty.server:9.3.24.v20180605]
> 	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:333) [226:org.eclipse.jetty.server:9.3.24.v20180605]
> 	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251) [226:org.eclipse.jetty.server:9.3.24.v20180605]
> 	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:283) [210:org.eclipse.jetty.io:9.3.24.v20180605]
> 	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:108) [210:org.eclipse.jetty.io:9.3.24.v20180605]
> 	at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:251) [210:org.eclipse.jetty.io:9.3.24.v20180605]
> 	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:283) [210:org.eclipse.jetty.io:9.3.24.v20180605]
> 	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:108) [210:org.eclipse.jetty.io:9.3.24.v20180605]
> 	at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93) [210:org.eclipse.jetty.io:9.3.24.v20180605]
> 	at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303) [232:org.eclipse.jetty.util:9.3.24.v20180605]
> 	at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148) [232:org.eclipse.jetty.util:9.3.24.v20180605]
> 	at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136) [232:org.eclipse.jetty.util:9.3.24.v20180605]
> 	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671) [232:org.eclipse.jetty.util:9.3.24.v20180605]
> 	at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589) [232:org.eclipse.jetty.util:9.3.24.v20180605]
> 	at java.lang.Thread.run(Thread.java:748) [?:?]
> Caused by: java.lang.ClassNotFoundException: org.mvel2.compiler.Accessor
> 	at java.lang.ClassLoader.findClass(ClassLoader.java:530) ~[?:?]
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:?]
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:?]
> 	... 71 more
> {code}
> We need to fix this to always set the local bundle classloader.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)