Hello,

 

We are migrating our stack from TomEE+ 1.5.2 to TomEE+
1.7.1, and are seeing the following regression: most of our javascripts (based
on Rhino ScriptEngine, but tried & got same issue with Nashorn) which load
classes from our webapp do not work anymore.

 

Simple javascript test (CloudUtils.jar containing CloudUtils
class is deployed in /mywebapp):

com.mycompany.infra.cloud.cloudutils.CloudUtils.nowStr()

 

TomEE+ 1.5.2 and JDK 1.7.0_72 (Rhino):

2014/11/24
15:06:37.976 +0100    
     (expected result)

 

TomEE+ 1.7.1 and JDK 1.7.0_72 (Rhino):

sun.org.mozilla.javascript.internal.EcmaError:
TypeError: Cannot call property nowStr in object [JavaPackage com.
mycompany.infra.cloud.cloudutils.CloudUtils]. It is not a function, it is
"object".

 

TomEE+ 1.7.1 and JDK 1.8.0_25 (Nashorn):

java.lang.ClassNotFoundException:
com.mycompany.infra.cloud.cloudutils.CloudUtils.nowStr()

 

In JDK we know that the ScriptEngineManager is initialized
as follows:

   
public ScriptEngineManager() {

       
ClassLoader ctxtLoader = Thread.currentThread().getContextClassLoader();

       
init(ctxtLoader);

    }

 

After debugging, we found out that until TomEE+ 1.5.2 the 
Thread.currentThread().getContextClassLoader(),
as expected, was:

LazyStopWebappClassLoader

 
context: /mywebapp

 
delegate: false

 
repositories:

   
/WEB-INF/classes/

---------->
Parent Classloader:

org.apache.catalina.loader.StandardClassLoader@70f4d063

 

But in TomEE+ 1.7.1, it is now replaced by:

org.apache.openejb.server.cxf.transport.util.CxfContainerClassLoader@1d56ce6a

 

Actually, it seems this new CxfContainerClassLoader class
was introduced back in 1.6 and is found in openejb-cxf-transport JAR: 

http://grepcode.com/file/repo1.maven.org/maven2/org.apache.openejb/openejb-cxf-transport/4.6.0/org/apache/openejb/server/cxf/transport/util/CxfUtil.java?av=f

 

I guess this classloader does not have the intelligence to
find the JARs in “/mywebapp” like catalina’s does.

Why is catalina’s classloader replaced by
CxfContainerClassLoader? Is it expected? Is there any way to avoid this?

 

Your help is much appreciated!
Alexandre


 

                                          

Reply via email to