10 Replies Latest reply on Jan 28, 2011 3:28 AM by craiggreenhalgh

    Seam Solder Beta1 and Arquillian Alpha4

    oranheim

      Hi,

       

      I've upgraded to Seam Solder 3 / JBoss 6 CR1, which works fine.

       

      When I run my JUnit test cases with Arquillian 1.0.0.Alpha4, I get "ClassNotFoundException: org.jboss.weld.exceptions.UnsatisfiedResolutionException":

       

       

      {code}
      shouldAddUserRoles(eris.services.test.model.UserDomainTest)  Time elapsed: 0.067 sec  <<< ERROR! org.jboss.arquillian.impl.event.FiredEventException: java.lang.IllegalStateException: Error launching test eris.services.test.model.UserDomainTest public void eris.services.test.model.UserDomainTest.shouldAddUserRoles() throws java.lang.Exception      at org.jboss.arquillian.impl.event.MapEventManager.fire(MapEventManager.java:68)      at org.jboss.arquillian.impl.context.AbstractEventContext.fire(AbstractEventContext.java:115)      at org.jboss.arquillian.impl.EventTestRunnerAdaptor.test(EventTestRunnerAdaptor.java:157)      at org.jboss.arquillian.junit.Arquillian$6.evaluate(Arquillian.java:244)      at org.jboss.arquillian.junit.Arquillian$4.evaluate(Arquillian.java:207)      at org.jboss.arquillian.junit.Arquillian$5$1.evaluate(Arquillian.java:225)      at org.jboss.arquillian.junit.Arquillian$MultiStatementExecutor.execute(Arquillian.java:297)      at org.jboss.arquillian.junit.Arquillian$5.evaluate(Arquillian.java:221)      at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)      at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)      at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)      at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)      at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)      at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)      at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)      at org.jboss.arquillian.junit.Arquillian$2.evaluate(Arquillian.java:163)      at org.jboss.arquillian.junit.Arquillian$3$1.evaluate(Arquillian.java:186)      at org.jboss.arquillian.junit.Arquillian$MultiStatementExecutor.execute(Arquillian.java:297)      at org.jboss.arquillian.junit.Arquillian$3.evaluate(Arquillian.java:182)      at org.junit.runners.ParentRunner.run(ParentRunner.java:236)      at org.jboss.arquillian.junit.Arquillian.run(Arquillian.java:127)      at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:59)      at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:120)      at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:103)      at org.apache.maven.surefire.Surefire.run(Surefire.java:169)      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.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:350)      at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1021) Caused by: java.lang.IllegalStateException: Error launching test eris.services.test.model.UserDomainTest public void eris.services.test.model.UserDomainTest.shouldAddUserRoles() throws java.lang.Exception      at org.jboss.arquillian.protocol.servlet_3.ServletMethodExecutor.invoke(ServletMethodExecutor.java:61)      at org.jboss.arquillian.impl.handler.ContainerTestExecuter.callback(ContainerTestExecuter.java:50)      at org.jboss.arquillian.impl.handler.ContainerTestExecuter.callback(ContainerTestExecuter.java:40)      at org.jboss.arquillian.impl.event.MapEventManager.fire(MapEventManager.java:63)      ... 30 more Caused by: java.lang.ClassNotFoundException: org.jboss.weld.exceptions.UnsatisfiedResolutionException      at java.net.URLClassLoader$1.run(URLClassLoader.java:202)      at java.security.AccessController.doPrivileged(Native Method)      at java.net.URLClassLoader.findClass(URLClassLoader.java:190)      at java.lang.ClassLoader.loadClass(ClassLoader.java:307)      at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)      at java.lang.ClassLoader.loadClass(ClassLoader.java:248)      at java.lang.Class.forName0(Native Method)      at java.lang.Class.forName(Class.java:247)      at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:603)      at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1574)      at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1495)      at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1731)      at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)      at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946)      at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1870)      at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)      at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)      at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)      at org.jboss.arquillian.protocol.servlet_3.ServletMethodExecutor.execute(ServletMethodExecutor.java:88)      at org.jboss.arquillian.protocol.servlet_3.ServletMethodExecutor.invoke(ServletMethodExecutor.java:57)      ... 33 more
      {code}

       

      Are Aqruillian-JUnit and JSFUnit in sync with Solder?

       

      Ove

        • 2. Re: Seam Solder Beta1 and Arquillian Alpha4
          oranheim

          Awesome Aslak!

           

          That fixed the issue for my jboss-remote-6 profile (weld-core 1.1.0.Beta1), so my tests are running again :-)

           

          I've also configured an embedded profile, so I can perform integration testing on my Bamboo server. After upgrading to JBoss 6 CR1 (from M4), the logmanager fails (using jboss logger 3.0.0.Beta4).

           

           

          {code}
          Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.326 sec <<< FAILURE! initializationError(eris.services.test.model.GenreDomainTest)  Time elapsed: 0.002 sec  <<< ERROR! java.lang.NoSuchMethodError: org.jboss.logmanager.LogContext.getAttachment(Ljava/lang/String;Lorg/jboss/logmanager/Logger$AttachmentKey;)Ljava/lang/Object;         at org.jboss.logging.JBossLogManagerProvider.doGetLogger(JBossLogManagerProvider.java:52)         at org.jboss.logging.JBossLogManagerProvider.getLogger(JBossLogManagerProvider.java:47)         at org.jboss.logging.Logger.getLogger(Logger.java:2164)         at org.jboss.logging.Logger.getLogger(Logger.java:2189)         at org.jboss.jbossas.servermanager.Server.(Server.java:65)         at org.jboss.arquillian.container.jbossas.managed_6.JBossASLocalContainer.createAndConfigureServer(JBossASLocalContainer.java:236)         at org.jboss.arquillian.container.jbossas.managed_6.JBossASLocalContainer.createAndConfigureServerManager(JBossASLocalContainer.java:230)         at org.jboss.arquillian.container.jbossas.managed_6.JBossASLocalContainer.setup(JBossASLocalContainer.java:64)         at org.jboss.arquillian.impl.handler.ContainerCreator.callback(ContainerCreator.java:56)         at org.jboss.arquillian.impl.handler.ContainerCreator.callback(ContainerCreator.java:46)         at org.jboss.arquillian.impl.event.MapEventManager.fire(MapEventManager.java:63)         at org.jboss.arquillian.impl.context.AbstractEventContext.fire(AbstractEventContext.java:115)         at org.jboss.arquillian.impl.EventTestRunnerAdaptor.beforeSuite(EventTestRunnerAdaptor.java:68)         at org.jboss.arquillian.junit.Arquillian.(Arquillian.java:89)         at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)         at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
          {code}

           

           

          The embedded test maven-surefire-plugin is configured with argLine:

           

           

          {code}
          -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Djava.endorsed.dirs=${project.build.directory}/jboss-${version.jboss_60}/lib/endorsed -Djboss.home=${project.build.directory}/jboss-${version.jboss_60} -Djboss.boot.server.log.dir=${project.build.directory}/jboss-${version.jboss_60} -Dorg.jboss.reflect.spi.TypeInfoFactory=org.jboss.reflect.plugins.introspection.IntrospectionTypeInfoFactory
          {code}

           

          Any idea why I get NoSuchMethodException for LogContext.getAttachment? Is there a new LogManager between M4 and CR1?

           

          If I remove the java.util.logging.manager stmt, the test suite succeedes.

           

          Ha en riktig God Jul!

           

          Ove

          • 3. Re: Seam Solder Beta1 and Arquillian Alpha4
            aslak

            hmm, looks like you are mixing a Managed and a Embedded configuration.. Can you paste the whole profile xml snippet?

             

            God jul

             

            -aslak-

            • 4. Re: Seam Solder Beta1 and Arquillian Alpha4
              oranheim

              Here's the xml snippet: http://pastebin.com/mwsaw3Kt

               

              Cheers,

              Ove

              • 5. Re: Seam Solder Beta1 and Arquillian Alpha4
                aslak

                Look at the JBoss 6 Managed docs for how to setup a managed container, a jboss server started in a different vm, but start/stop controilled.

                 

                http://docs.jboss.org/arquillian/reference/latest/en-US/html_single/#container.jbossas-managed-6.configuration

                • 6. Re: Seam Solder Beta1 and Arquillian Alpha4
                  dan.j.allen

                  While on this topic, keep in mind that if you want to use Weld Embedded container with Weld 1.1 and Seam Solder, I recommend using the Weld Embedded container from the Weld distribution:

                   

                  <dependency>
                     <groupId>org.jboss.weld.arquillian.container</groupId>
                     <artifactId>arquillian-weld-ee-embedded-1.1</artifactId>
                     <version>1.0.0.CR1</version>
                     <scope>test</scope>
                  </dependency>
                  

                   

                  Pay close attention to the groupId. Granted, this is a temporary recommendation until Arquillian enters beta. Eventually the idea is that Weld will use a standard version of Arquillian. But for now, it will get you by in a pinch.

                  • 7. Re: Seam Solder Beta1 and Arquillian Alpha4
                    oranheim

                    Hi Dan,

                     

                    My jbossas-managed-6 profile works almost fine, but fails when configuring the LogManager. I followed the docs as pointed out by Aslak.

                     

                    The weld-ee-embedded profile is intriguing and definately speeds up my testing. Again, I'm getting a failure on Logger injection. See exception log below.

                     

                    Profile configuration is as follows:

                     

                    • Weld Core is on the classpath
                    • Seam Solder, Faces, International, REST and Remoting (all latest version)
                    • Weld embedded with version 1.1.0.Beta1 (same as weld-core version and for Seam Solder Beta1)
                    • org.slf4j:slf-simple:1.5.10
                    • org.jboss.logging:jboss-logging:3.0.0.Beta4

                     

                    My test case:

                     

                     

                    {code}
                    @RunWith(Arquillian.class) public class MessengerTest extends WarTestProfile {      @Deployment      public static Archive createTestArchive() {           return resolveEntityServerArtifacts(ShrinkWrap                     .create(WebArchive.class, "test.war")                     .addClasses(PartsDatabase.class, PartsRepositoryProducer.class)                     .addWebResource("test-persistence.xml", "classes/META-INF/persistence.xml")                     .addWebResource(EmptyAsset.INSTANCE, ArchivePaths.create("beans.xml")));      }            @Inject      Logger log;            @Inject      @PartsDatabase      EntityManager em;            @Test      public void testMe() throws Exception {           Assert.assertNotNull(em);      }       }
                    {code}

                     

                    Causing failure on Logger injection:

                     

                    {code}
                    ------------------------------------------------------------------------------- Test set: eris.services.test.model.MessengerTest ------------------------------------------------------------------------------- Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 3.628 sec <<< FAILURE! testMe(eris.services.test.model.MessengerTest)  Time elapsed: 0.04 sec  <<< ERROR! org.jboss.arquillian.impl.event.FiredEventException: java.lang.RuntimeException: Could not inject members      at org.jboss.arquillian.impl.event.MapEventManager.fire(MapEventManager.java:68)      at org.jboss.arquillian.impl.context.AbstractEventContext.fire(AbstractEventContext.java:115)      at org.jboss.arquillian.impl.EventTestRunnerAdaptor.before(EventTestRunnerAdaptor.java:127)      at org.jboss.arquillian.junit.Arquillian$4.evaluate(Arquillian.java:206)      at org.jboss.arquillian.junit.Arquillian$5$1.evaluate(Arquillian.java:225)      at org.jboss.arquillian.junit.Arquillian$MultiStatementExecutor.execute(Arquillian.java:297)      at org.jboss.arquillian.junit.Arquillian$5.evaluate(Arquillian.java:221)      at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)      at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)      at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)      at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)      at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)      at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)      at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)      at org.jboss.arquillian.junit.Arquillian$2.evaluate(Arquillian.java:163)      at org.jboss.arquillian.junit.Arquillian$3$1.evaluate(Arquillian.java:186)      at org.jboss.arquillian.junit.Arquillian$MultiStatementExecutor.execute(Arquillian.java:297)      at org.jboss.arquillian.junit.Arquillian$3.evaluate(Arquillian.java:182)      at org.junit.runners.ParentRunner.run(ParentRunner.java:236)      at org.jboss.arquillian.junit.Arquillian.run(Arquillian.java:127)      at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:59)      at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:120)      at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:103)      at org.apache.maven.surefire.Surefire.run(Surefire.java:169)      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.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:350)      at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1021) Caused by: java.lang.RuntimeException: Could not inject members      at org.jboss.arquillian.testenricher.cdi.CDIInjectionEnricher.injectClass(CDIInjectionEnricher.java:103)      at org.jboss.arquillian.testenricher.cdi.CDIInjectionEnricher.enrich(CDIInjectionEnricher.java:52)      at org.jboss.arquillian.impl.handler.TestCaseEnricher.callback(TestCaseEnricher.java:42)      at org.jboss.arquillian.impl.handler.TestCaseEnricher.callback(TestCaseEnricher.java:32)      at org.jboss.arquillian.impl.event.MapEventManager.fire(MapEventManager.java:63)      ... 29 more Caused by: java.lang.NullPointerException      at org.jboss.seam.solder.log.LoggerProducers.produceLog(LoggerProducers.java:75)      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.weld.util.reflection.SecureReflections$13.work(SecureReflections.java:305)      at org.jboss.weld.util.reflection.SecureReflectionAccess.run(SecureReflectionAccess.java:54)      at org.jboss.weld.util.reflection.SecureReflectionAccess.runAsInvocation(SecureReflectionAccess.java:163)      at org.jboss.weld.util.reflection.SecureReflections.invoke(SecureReflections.java:299)      at org.jboss.weld.introspector.jlr.WeldMethodImpl.invokeOnInstance(WeldMethodImpl.java:198)      at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstance(MethodInjectionPoint.java:170)      at org.jboss.weld.bean.ProducerMethod$1.produce(ProducerMethod.java:144)      at org.jboss.weld.bean.AbstractProducerBean.create(AbstractProducerBean.java:360)      at org.jboss.weld.context.DependentContext.get(DependentContext.java:62)      at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:660)      at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:734)      at org.jboss.weld.manager.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:757)      at org.jboss.weld.injection.FieldInjectionPoint.inject(FieldInjectionPoint.java:118)      at org.jboss.weld.util.Beans.injectBoundFields(Beans.java:840)      at org.jboss.weld.util.Beans.injectFieldsAndInitializers(Beans.java:852)      at org.jboss.weld.manager.SimpleInjectionTarget$1.proceed(SimpleInjectionTarget.java:122)      at org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:54)      at org.jboss.weld.manager.SimpleInjectionTarget.inject(SimpleInjectionTarget.java:116)      at org.jboss.arquillian.testenricher.cdi.CDIInjectionEnricher.injectNonContextualInstance(CDIInjectionEnricher.java:113)      at org.jboss.arquillian.testenricher.cdi.CDIInjectionEnricher.injectClass(CDIInjectionEnricher.java:93)      ... 33 more
                    {code}

                     

                     

                    Ove

                    • 8. Re: Seam Solder Beta1 and Arquillian Alpha4
                      dan.j.allen

                      You (and Arquillian) discovered a bug in Solder. See SOLDER-63. This is now fixed in Solder HEAD. Thanks!

                       

                      As a workaround, you have to put the logger injection on a CDI bean. You can either add it to the bean you are testing, or use a helper bean that logs messages for the test.

                      • 9. Re: Seam Solder Beta1 and Arquillian Alpha4
                        oranheim

                        Hi Dan,

                         

                        Thanks for clarifying this and the workaround should work fine for the time being.

                         

                        It's good to see how each module of the Seam 3 stack being pulled together. I really appreciate the quaility and all the hard work from the JBoss Team, in particular making XML Config, Faces, International, Remoting, REST, Catch, Security and Arquillian/JSFUnit; compliant with Seam Solder.

                         

                        Kudos to you guys!

                         

                        Happy new year!

                         

                        Ove

                        • 10. Re: Seam Solder Beta1 and Arquillian Alpha4
                          craiggreenhalgh

                          Hi when i deploy to a remote instance of jbossas 6 M4 I get the same error;

                           

                          WeldBootstrapBean state=Create: java.lang.NoSuchMethodError: org.jboss.logmanager.LogContext.getAttachment(Ljava/lang/String;Lorg/jboss/logmanager/Logger$AttachmentKey;)Ljava/lang/Object;

                           

                          Do you know what dependcies I'm missing?

                           

                          It is currently using jboss logoing 3.0.0 Beta4

                           

                          Thanks for your help

                           

                          Craig