1 2 Previous Next 19 Replies Latest reply on Oct 19, 2011 6:46 AM by kwutzke Go to original post
      • 15. Re: TransactionManager lookup fails on AS7
        kwutzke

        @Scott: the settings you were talking about really removes the original NPE, however, now the following stack trace is generated:

         

        {code}

        01:02:39,217 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/bbstats]] (MSC service thread 1-2) Exception sending context initialized event to listener instance of class org.jboss.seam.servlet.SeamListener: org.jboss.seam.InstantiationException: Could not instantiate Seam component: emf

            at org.jboss.seam.Component.newInstance(Component.java:2170) [jboss-seam.jar:]

            at org.jboss.seam.contexts.Contexts.startup(Contexts.java:304) [jboss-seam.jar:]

        ...

        Caused by: java.lang.InstantiationException: org.hibernate.service.jta.platform.spi.JtaPlatform

            at java.lang.Class.newInstance0(Unknown Source) [:1.7.0]

            at java.lang.Class.newInstance(Unknown Source) [:1.7.0]

            at org.hibernate.service.jta.platform.internal.JtaPlatformInitiator.initiateService(JtaPlatformInitiator.java:86) [hibernate-core-4.0.0.Beta1.jar:4.0.0.Beta1]

            ... 39 more

        {code}

         

        It makes sense, since org.hibernate.service.jta.platform.spi.JtaPlatform is an interface.

         

        I then discovered the two concrete JBoss classes

        org.hibernate.service.jta.platform.internal.JBossStandAloneJtaPlatform and org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform.

         

        Questions:

         

        1. What's the difference between the two concrete implementations?

        2. Which one to choose in which situation, here in JBoss AS 7 standalone server mode?

        3. Why is the one class called JBossStandAloneJtaPlatform instead of JBossStandaloneJtaPlatform???

         

        I tried both class names, both at least allow deployment without exceptions.

         

        However, when requesting a page the JBossStandAloneJtaPlatform class results in an exception:

        {code}

        Caused by: org.hibernate.service.classloading.spi.ClassLoadingException: Unable to load class [com.arjuna.ats.jta.TransactionManager]

            at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:132) [hibernate-core-4.0.0.Beta1.jar:4.0.0.Beta1]

            at org.hibernate.service.jta.platform.internal.JBossStandAloneJtaPlatform.locateTransactionManager(JBossStandAloneJtaPlatform.java:46) [hibernate-core-4.0.0.Beta1.jar:4.0.0.Beta1]

            ... 141 more

        {code}

         

        Note the [com.arjuna.ats.jta.TransactionManager] class. I can only guess, it might belong to an older JBoss AS version implementation (which would also imply that the class name JBoss AS 7 users are looking for is JBossAppServerJtaPlatform)?

         

        Changing to JBossAppServerJtaPlatform class results in:

         

        {code}

        javax.naming.NameNotFoundException: Name 'TransactionManager' not found in context ''

        org.jboss.as.naming.util.NamingUtils.nameNotFoundException(NamingUtils.java:109)

        org.jboss.as.naming.InMemoryNamingStore$NodeTraversingVisitor.visit(InMemoryNamingStore.java:368)

        org.jboss.as.naming.InMemoryNamingStore$ContextNode.accept(InMemoryNamingStore.java:307)

        org.jboss.as.naming.InMemoryNamingStore.lookup(InMemoryNamingStore.java:162)

        org.jboss.as.naming.NamingContext.lookup(NamingContext.java:173)

        javax.naming.InitialContext.lookup(Unknown Source)

        org.hibernate.service.jndi.internal.JndiServiceImpl.locate(JndiServiceImpl.java:65)

        org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform.locateTransactionManager(JBossAppServerJtaPlatform.java:40)

        org.hibernate.service.jta.platform.internal.AbstractJtaPlatform.retrieveTransactionManager(AbstractJtaPlatform.java:88)

        org.hibernate.service.jta.platform.internal.AbstractJtaPlatform.getTransactionManager(AbstractJtaPlatform.java:99)

        org.hibernate.service.jta.platform.internal.TransactionManagerBasedSynchronizationStrategy.canRegisterSynchronization(TransactionManagerBasedSynchronizationStrategy.java:56)

        org.hibernate.service.jta.platform.internal.AbstractJtaPlatform.canRegisterSynchronization(AbstractJtaPlatform.java:132)

        org.hibernate.engine.transaction.internal.TransactionCoordinatorImpl.attemptToRegisterJtaSync(TransactionCoordinatorImpl.java:241)

        org.hibernate.engine.transaction.internal.TransactionCoordinatorImpl.pulse(TransactionCoordinatorImpl.java:278)

        org.hibernate.ejb.AbstractEntityManagerImpl.joinTransaction(AbstractEntityManagerImpl.java:1179)

        org.hibernate.ejb.AbstractEntityManagerImpl.postInit(AbstractEntityManagerImpl.java:170)

        org.hibernate.ejb.EntityManagerImpl.<init>(EntityManagerImpl.java:90)

        org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:112)

        org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:107)

        org.jboss.seam.persistence.ManagedPersistenceContext.initEntityManager(ManagedPersistenceContext.java:79)

        org.jboss.seam.persistence.ManagedPersistenceContext.getEntityManager(ManagedPersistenceContext.java:108)

        sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

        .

        .

        .

        rather long

        {code}

         

        Not sure if we are back to a similar issue like this again: http://community.jboss.org/message/615112#615112

         

        Karsten

        • 16. Re: TransactionManager lookup fails on AS7
          smarlow

          org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform is used by the AS7 JPA container/subsystem code to pass the TM/TSR to Hibernate (look at AS7 JBossAppServerJtaPlatform that extends the Hibernate JBossAppServerJtaPlatform). 

           

          org.hibernate.service.jta.platform.internal.JBossStandAloneJtaPlatform is for the JBossTS (without an application server, just a TM).

           

          I think you could try creating your own implementation that extends org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform and include the following method:

           

          {code}

             @Override

             protected TransactionManager locateTransactionManager() {

                return (TransactionManager) jndiService().locate( "java:jboss/TransactionManager" );

             }

          {code}

          • 17. Re: TransactionManager lookup fails on AS7
            kwutzke

            I was just trying that, but I didn't discover the jndiService() method until you mentioned it.

             

            This seems to be working, I also tried Stuart's implementation, it seems to be doing the same, but I'll keep this one as it doesn't throw a checked NamingException.

             

            Two questions remain:

             

            1. Shouldn't JBossStandAloneJtaPlatform be renamed to JBossStandaloneJtaPlatform before it goes into the final version?

            2. Can you give a very short wrap-up what needs to be fixed to hook in the "default" class JBossAppServerJtaPlatform in AS 7 in the "next" version? (is it Hibernate 4 not looking for the AS 7 TM JNDI names?)

             

            Karsten

            • 18. Re: TransactionManager lookup fails on AS7
              smarlow

              Your right, Stuart did suggest the same workaround. 

               

              1.  I don't have an opinion on JBossStandAloneJtaPlatform versus JBossStandaloneJtaPlatform.

               

              2.  Hibernate Jira HHH-6543 is for  correcting the jndi name in org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform.  That should be fixed in the next Hibernate 4.0.0.Next build (Beta6 perhaps).  If your using AS7 container managed JPA support, nothing should be changed.  With regard to Seam Persistence, I'll let someone else answer that.

              • 19. Re: TransactionManager lookup fails on AS7
                kwutzke

                Great to see it's already fixed.

                 

                As a matter of fact "standalone" is a valid English word, whereas "stand alone" isn't a valid construct. It really should be changed. After all, the JBoss AS standalone config file is called standalone.xml and a few other files and dirs as well... call it nit-picking.

                 

                Karsten

                1 2 Previous Next