3 Replies Latest reply on Nov 3, 2011 7:49 AM by spinner

    Alpha4 to CR5 tomcat6 embedded migration problem

    brettcave

      I have set up a project to test migration from Alpha4 to CR5.

       

      Dependencies for Alpha4 + tomcat embedded are as follows:

      integrationTestAlpha4Embed "org.jboss.weld.servlet:weld-servlet:1.1.1.Final",
          "org.jboss.arquillian:arquillian-spi:1.0.0.Alpha4.SP1",
          "org.jboss.arquillian:arquillian-junit:1.0.0.Alpha4.SP1",
          "org.jboss.arquillian.protocol:arquillian-protocol-servlet-3:1.0.0.Alpha4.SP1",
          "org.jboss.arquillian.container:arquillian-tomcat-embedded-6:1.0.0.Alpha4"
          "org.jboss.shrinkwrap:shrinkwrap-extension-tomcat-6:1.0.0-alpha-11"

       

      arquillian.xml:

       

      <arquillian xmlns="http://jboss.com/arquillian"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xmlns:tomcat6="urn:arq:org.jboss.arquillian.container.tomcat.embedded_6">
      
          <tomcat6:container>
              <tomcat6:tomcatHome>target/tomcat-embedded-6</tomcat6:tomcatHome>
              <tomcat6:workDir>work</tomcat6:workDir>
              <tomcat6:appBase>webapps</tomcat6:appBase>
              <tomcat6:bindHttpPort>8889</tomcat6:bindHttpPort>
              <tomcat6:unpackArchive>true</tomcat6:unpackArchive>
          </tomcat6:container>
      </arquillian>
      

       

      And the test case (referencing a request scoped bean):

       

      @RunWith(Arquillian.class)
      @Run(RunModeType.IN_CONTAINER)
      public class UtilInContainerTestCase {
      
          @Inject
          Util util;
      
          @Deployment
          public static WebArchive createTestArchive() {
              return ShrinkWrap.create(WebArchive.class, "test.war")
                      .addLibrary(MavenArtifactResolver.resolve("org.jboss.weld.servlet:weld-servlet:1.1.1.Final"))
                      .addWebResource("in-container-beans.xml", "META-INF/beans.xml")
                      .addResource("in-container-context.xml", "META-INF/context.xml")
                      .setWebXML("in-container-web.xml");
          }
      

       

      beans.xml is empty. context.xml contains 1 resource definition for weld's BeanManager from the ManagerObjectFactory, which is the referenced by the web.xml, as well as servlet mappings (web.xml below):

       

      <web-app version="2.5"
               xmlns="http://java.sun.com/xml/ns/javaee"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="
            http://java.sun.com/xml/ns/javaee
            http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
      
          <env-entry>
              <env-entry-name>name</env-entry-name>
              <env-entry-type>java.lang.String</env-entry-type>
              <env-entry-value>Tomcat</env-entry-value>
          </env-entry>
      
          <listener>
              <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
          </listener>
      
          <servlet>
              <servlet-name>TestServlet</servlet-name>
              <servlet-class>org.jboss.arquillian.container.tomcat.embedded_6.TestServlet</servlet-class>
          </servlet>
          <servlet-mapping>
              <servlet-name>TestServlet</servlet-name>
              <url-pattern>/Test</url-pattern>
          </servlet-mapping>
      
          <servlet>
              <servlet-name>ServletTestRunner</servlet-name>
              <servlet-class>org.jboss.arquillian.protocol.servlet.ServletTestRunner</servlet-class>
          </servlet>
          <servlet-mapping>
              <servlet-name>ServletTestRunner</servlet-name>
              <url-pattern>/ArquillianServletRunner</url-pattern>
          </servlet-mapping>
      
          <resource-env-ref>
              <resource-env-ref-name>BeanManager</resource-env-ref-name>
              <resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type>
          </resource-env-ref>
      

       

      The test case runs fine.

       

       

      The migration has the following changes:

      Dependencies:

      integrationTestCR5Embed "org.jboss.weld.servlet:weld-servlet:1.1.1.Final",
          "org.jboss.arquillian.junit:arquillian-junit-container:1.0.0.CR5",
          "org.jboss.arquillian.container:arquillian-tomcat-embedded-6:1.0.0.CR1"

       

      arquillian.xml changes to https://github.com/arquillian/arquillian-container-tomcat/blob/master/tomcat-embedded-6/src/test/resources/arquillian.xml, web.xml has not been modified. The @Deployment changes as per Alpha5 migration guide:

       


      @Deployment(testable = true)

      public static WebArchive createTestArchive() {
          return ShrinkWrap.create(WebArchive.class, "test.war")
                  .addAsLibrary(MavenArtifactResolver.resolve("org.jboss.weld.servlet:weld-servlet:1.1.2.Final"))
                  .addAsWebInfResource("in-container-beans.xml", "beans.xml")
                  .addAsManifestResource("in-container-context.xml", "context.xml")
                  .setWebXML("in-container-web.xml");

      }

       

      The test case fails almost immediately, with the following:

       

       

      java.lang.RuntimeException: Could not create a new instance of class org.jboss.arquillian.test.impl.EventTestRunnerAdaptor see cause.
          at org.jboss.arquillian.test.spi.SecurityActions.newInstance(SecurityActions.java:170)
          at org.jboss.arquillian.test.spi.TestRunnerAdaptorBuilder.build(TestRunnerAdaptorBuilder.java:52)
          at org.jboss.arquillian.junit.Arquillian.run(Arquillian.java:72)
      .....
      Caused by: java.lang.reflect.InvocationTargetException
          at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
          at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
          at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
          at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
          at org.jboss.arquillian.test.spi.SecurityActions.newInstance(SecurityActions.java:166)
          ... 11 more
      Caused by: java.lang.NoSuchMethodError: org.jboss.shrinkwrap.descriptor.spi.DescriptorImporterBase.from(Ljava/io/InputStream;Z)Lorg/jboss/shrinkwrap/descriptor/api/Descriptor;
          at org.jboss.shrinkwrap.descriptor.spi.DescriptorImporterBase.from(DescriptorImporterBase.java:142)
          at org.jboss.arquillian.config.impl.extension.ConfigurationRegistrar.loadConfiguration(ConfigurationRegistrar.java:50)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          at java.lang.reflect.Method.invoke(Method.java:597)
          at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:90)
          at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99)
          at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81)
          at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:134)
          at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:114)
          at org.jboss.arquillian.core.impl.ManagerImpl.start(ManagerImpl.java:260)
          at org.jboss.arquillian.test.impl.EventTestRunnerAdaptor.<init>(EventTestRunnerAdaptor.java:56)
          ... 16 more
      
      

       

      The dependancy tree shows shrinkwrap-descriptors-spi:1..1.0-beta-1 is included, which contains the classes and methods from the stack trace.

        • 1. Re: Alpha4 to CR5 tomcat6 embedded migration problem
          brettcave

          Had a suggestion in #jbosstesting to upgrade to the latest shrinkwrap version, so have tried adding:

          org.jboss.shrinkwrap.container:shrinkwrap-container-tomcat-60:1.0.0-beta-1

           

          which pulls in shrinkwrap-api. shrinkwrap-spi-1.0.0-beta-5 is pulled in by arquillian-junit-container and shrinkwrap-descriptors-api-1.0.0-beta-1 is pulled in by arquillian-tomcat-embedded-6-1.0.0.CR1

           

          Issue remains the same after adding this though.

          • 2. Re: Alpha4 to CR5 tomcat6 embedded migration problem
            brettcave

            Shrinkwrap upgrade did in fact resolve the issue (thanks Jose).

             

            Final dependency list for working embedded tomcat 6 with CDI:

             

            integrationTestCR5Embed "org.jboss.weld.servlet:weld-servlet:1.1.1.Final",

                "org.jboss.arquillian.junit:arquillian-junit-container:1.0.0.CR5",

                "org.jboss.arquillian.container:arquillian-tomcat-embedded-6:1.0.0.CR1",

                "org.jboss.shrinkwrap.container:shrinkwrap-container-tomcat-60:1.0.0-beta-1",

                "org.jboss.shrinkwrap.descriptors:shrinkwrap-descriptors-api:1.1.0-beta-1",

                "org.jboss.shrinkwrap.descriptors:shrinkwrap-descriptors-impl:1.1.0-beta-1",

                "org.jboss.shrinkwrap:shrinkwrap-api:1.0.0-cr-1",

                "org.jboss.shrinkwrap:shrinkwrap-spi:1.0.0-cr-1"

            • 3. Re: Alpha4 to CR5 tomcat6 embedded migration problem
              spinner

              I'm glad it worked.