tomcat 7 embedded doesn't shutdown correctly ClassNotFoundException ContainerBase$StopChild
Asked Answered
O

1

9

I'm trying to make work integration test with Tomcat7 embedded plugin with this config:

            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>29360</port>
                    <systemProperties>
                        <logback.configurationFile>${project.build.testOutputDirectory}/logback-test.xml</logback.configurationFile>
                        <psw.config>${project.build.testOutputDirectory}</psw.config>
                        <spring.profiles.active>test-e2e</spring.profiles.active>
                    </systemProperties>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-api</artifactId>
                        <version>${slf4j.version}</version>
                    </dependency>
                    <dependency>
                        <groupId>ch.qos.logback</groupId>
                        <artifactId>logback-classic</artifactId>
                        <version>${logback.version}</version>
                    </dependency>
                </dependencies>
                <executions>
                    <execution>
                        <id>run-tomcat</id>
                        <phase>pre-integration-test</phase>
                        <goals>
                            <goal>run-war-only</goal>
                        </goals>
                        <configuration>
                            <fork>true</fork>
                        </configuration>
                    </execution>
                    <execution>
                        <id>stop-tomcat</id>
                        <phase>post-integration-test</phase>
                        <goals>
                            <goal>shutdown</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

However when the shutdown happens, I kept having this error: Caused by: java.lang.ClassNotFoundException: org.apache.catalina.core.ContainerBase$StopChild

[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2:49.618s
[INFO] Finished at: Sun Dec 22 07:58:06 CET 2013
[INFO] Final Memory: 163M/259M
[INFO] ------------------------------------------------------------------------

ERROR: IllegalAccessException for stop method in class org.apache.tomcat.maven.plugin.tomcat7.run.ExtendedTomcat
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.apache.tomcat.maven.common.run.EmbeddedRegistry.shutdownAll(EmbeddedRegistry.java:110)
    at org.apache.tomcat.maven.common.run.EmbeddedRegistry$1.run(EmbeddedRegistry.java:69)
Caused by: org.apache.catalina.LifecycleException: Failed to stop component [StandardServer[-1]]
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:236)
    at org.apache.catalina.startup.Tomcat.stop(Tomcat.java:351)
    ... 6 more
Caused by: org.apache.catalina.LifecycleException: Failed to stop component [StandardService[Tomcat]]
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:236)
    at org.apache.catalina.core.StandardServer.stopInternal(StandardServer.java:753)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
    ... 7 more
Caused by: org.apache.catalina.LifecycleException: Failed to stop component [StandardEngine[Tomcat]]
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:236)
    at org.apache.catalina.core.StandardService.stopInternal(StandardService.java:502)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
    ... 9 more
Caused by: java.lang.NoClassDefFoundError: org/apache/catalina/core/ContainerBase$StopChild
    at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:1173)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
    ... 11 more
Caused by: java.lang.ClassNotFoundException: org.apache.catalina.core.ContainerBase$StopChild
    at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:259)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:235)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:227)
    ... 13 more

Process finished with exit code 0

Any tips to correct this ?

Oden answered 22/12, 2013 at 9:58 Comment(1)
I'm having the same issue. The server fails to stop after running the integrations tests with 'mvn verify' but the strange thing is that this only happens when the integration tests are failing. If they run correctly, the server tries to shutdown properly and I get this warning 'The executor associated with thread pool [http-bio-8087] has not fully shutdown. Some application threads may still be running.'.Carpentry
B
14

If you run mvn integration-test, it won't run the post-integration-test phase, which can lead to this error. Use mvn verify instead.

Bougie answered 21/3, 2014 at 0:39 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.