Skip to content

Spring Auto Reconfiguration is not operational when deploying EAR #23

@violetagg

Description

@violetagg

When Spring Auto Reconfiguration is enabled and there is spring-core*.jar artifacts [1]
in the application binaries, a modification of web.xml provided by web module will be made
and Spring Auto Reconfiguration jar file will be added to the additional libraries [2].

When the deployment artifact is WAR file the collection of the additional libraries will be added
to WEB-INF/lib [3]. Thus Spring Auto Reconfiguration will be able to load classes provided by spring-core*.jar.

In case of EAR the additional libraries will be added to <TomEE-Home>/lib [3]. Thus
Spring Auto Reconfiguration will not be able to load the classes provided by spring-core*.jar
because they are provided by the application binaries and not by TomEE installation.

The exception below will appear:

   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT Caused by: java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContextInitializer
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at java.lang.ClassLoader.defineClass1(Native Method)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at java.security.AccessController.doPrivileged(Native Method)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at java.lang.ClassLoader.loadClass(ClassLoader.java:411)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at java.lang.ClassLoader.loadClass(ClassLoader.java:411)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at org.apache.openejb.core.TempClassLoader.loadClass(TempClassLoader.java:225)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at org.apache.openejb.core.TempClassLoader.loadClass(TempClassLoader.java:83)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at org.cloudfoundry.reconfiguration.spring.AutoReconfigurationServletContainerInitializer.<clinit>(AutoReconfigurationServletContainerInitializer.java:33)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at java.lang.Class.forName0(Native Method)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at java.lang.Class.forName(Class.java:348)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at org.apache.catalina.startup.WebappServiceLoader.loadServices(WebappServiceLoader.java:188)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at org.apache.catalina.startup.WebappServiceLoader.load(WebappServiceLoader.java:159)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at org.apache.catalina.startup.ContextConfig.processServletContainerInitializers(ContextConfig.java:1622)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at org.apache.catalina.startup.OpenEJBContextConfig.processServletContainerInitializers(OpenEJBContextConfig.java:479)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1135)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at org.apache.catalina.startup.OpenEJBContextConfig.webConfig(OpenEJBContextConfig.java:402)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:775)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at org.apache.catalina.startup.OpenEJBContextConfig.configureStart(OpenEJBContextConfig.java:123)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:299)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5087)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	... 23 more
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT Caused by: java.lang.ClassNotFoundException: org.springframework.context.ApplicationContextInitializer
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
   2017-08-10T14:37:48.66-0400 [APP/PROC/WEB/0] OUT 	... 52 more

[1] https://github.com/cloudfoundry-community/tomee-buildpack/blob/master/lib/java_buildpack/framework/spring_auto_reconfiguration.rb#L53
[2] https://github.com/cloudfoundry-community/tomee-buildpack/blob/master/lib/java_buildpack/framework/spring_auto_reconfiguration.rb#L39
[3] https://github.com/cloudfoundry-community/tomee-buildpack/blob/master/lib/java_buildpack/container/tomee/tomee_instance.rb#L62

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions