5 Replies Latest reply on Aug 23, 2007 11:23 AM by jhalliday

    Unable to locate current JTA transaction

    reinhard.graf

      hi,

      in my application I'm using Hibernate 3.2,JBossTS 4.2.3 and stateless session beans. When I want to get a hibernate-session with getCurrentSession(), I get the error message - Unable to locate current JTA transaction -
      If I use the default TransactionManager from JBoss - everything works fine.

      Can someone help me.

      regards

        • 1. Re: Unable to locate current JTA transaction
          jhalliday

          Which version of JBossAS are you running in and do you have a test case to reproduce this issue?

          • 2. Re: Unable to locate current JTA transaction
            reinhard.graf

            I'm using JBossAS 4.0.5 GA.
            Because my project is very large, I can't give you any testcase.

            • 3. Re: Unable to locate current JTA transaction
              jhalliday

              > Because my project is very large, I can't give you any testcase.

              So throw away everything that is not necessary to reproduce this error. No test case, no free help. Sorry.

              • 4. Re: Unable to locate current JTA transaction
                reinhard.graf

                So, I've written a short testcase:

                Remote Interface:

                package jbosststest.ejb.interfaces;

                import javax.ejb.Remote;

                @Remote
                public interface JBossTSTestEJBRemote {

                public void testFoo();
                }

                Stateless Session Bean:

                package jbosststest.ejb.beans;

                import javax.ejb.Stateless;
                import javax.ejb.TransactionAttribute;
                import javax.ejb.TransactionAttributeType;
                import javax.ejb.TransactionManagement;
                import javax.ejb.TransactionManagementType;
                import javax.persistence.PersistenceUnit;

                import org.hibernate.Session;
                import org.hibernate.SessionFactory;

                import jbosststest.ejb.interfaces.JBossTSTestEJBRemote;
                import jbosststest.objects.Foo;

                @Stateless
                @TransactionManagement(value=TransactionManagementType.CONTAINER)
                public class JBossTSTestEJB implements JBossTSTestEJBRemote {

                @PersistenceUnit(unitName="testManager") SessionFactory sessionFactory;

                @TransactionAttribute(value=TransactionAttributeType.REQUIRED)
                public void testFoo() {
                Session session = sessionFactory.getCurrentSession();
                Foo foo = (Foo) session.load(Foo.class, Long.valueOf(1));
                if (null == foo) {
                System.err.println("foo found: " + foo.getName());
                } else {
                System.err.println("foo not found! ");
                }
                }
                }

                Entity:

                package jbosststest.objects;

                import javax.persistence.Entity;
                import javax.persistence.GeneratedValue;
                import javax.persistence.Id;
                import javax.persistence.Table;

                @Entity
                @Table(name="foo")
                public class Foo {

                private Long id = null;
                private String name = null;

                @Id
                @GeneratedValue
                public Long getId() {
                return id;
                }
                public void setId(Long id) {
                this.id = id;
                }
                public String getName() {
                return name;
                }
                public void setName(String name) {
                this.name = name;
                }


                }

                persistence.xml

                <persistence xmlns="http://java.sun.com/xml/ns/persistence"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
                version="1.0">
                <persistence-unit name="testManager" transaction-type="JTA">
                org.hibernate.ejb.HibernatePersistence
                <jta-data-source>java:/DefaultDS</jta-data-source>
                jbosststest.objects.Foo









                <!--


                -->

                </persistence-unit>




                Client:

                package jbosststest.client;

                import java.util.Properties;

                import javax.naming.Context;
                import javax.naming.InitialContext;
                import javax.rmi.PortableRemoteObject;

                import jbosststest.ejb.interfaces.JBossTSTestEJBRemote;

                public class TestClient {

                public TestClient() {
                try {
                Properties env = new Properties();
                env.setProperty(Context.SECURITY_PRINCIPAL, "admin");
                env.setProperty(Context.SECURITY_CREDENTIALS, "admin");
                env.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.security.jndi.JndiLoginInitialContextFactory");

                Context ctx = new InitialContext();
                Object obj = ctx.lookup("JBossTSTestEJB/remote");
                JBossTSTestEJBRemote remote = (JBossTSTestEJBRemote) PortableRemoteObject.narrow(obj, JBossTSTestEJBRemote.class);
                remote.testFoo();
                } catch(Exception ex) {
                ex.printStackTrace(System.err);
                }
                }

                /**
                * @param args
                */
                public static void main(String[] args) {
                new TestClient();
                }

                }


                Stacktrace:

                log4j:WARN No appenders could be found for logger (org.jboss.security.SecurityAssociation).
                log4j:WARN Please initialize the log4j system properly.
                javax.ejb.EJBException: org.hibernate.HibernateException: Unable to locate current JTA transaction
                at org.jboss.ejb3.tx.Ejb3TxPolicy.handleExceptionInOurTx(Ejb3TxPolicy.java:69)
                at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:83)
                at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:197)
                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
                at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
                at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
                at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77)
                at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:131)
                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
                at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:47)
                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
                at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
                at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:263)
                at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:106)
                at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82)
                at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:828)
                at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:681)
                at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:358)
                at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:398)
                at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:239)
                Caused by: org.hibernate.HibernateException: Unable to locate current JTA transaction
                at org.hibernate.context.JTASessionContext.currentSession(JTASessionContext.java:61)
                at org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:542)
                at jbosststest.ejb.beans.JBossTSTestEJB.testFoo(JBossTSTestEJB.java:24)
                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:585)
                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112)
                at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166)
                at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
                at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
                at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
                at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79)
                at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:197)
                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
                at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
                at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
                at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77)
                at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:131)
                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
                at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:47)
                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
                at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
                at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:263)
                at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:106)
                at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82)
                at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:828)
                at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:681)
                at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:358)
                at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:398)
                at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:239)
                at org.jboss.remoting.RemoteClientInvoker.invoke(RemoteClientInvoker.java:190)
                at org.jboss.remoting.Client.invoke(Client.java:525)
                at org.jboss.remoting.Client.invoke(Client.java:488)
                at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:61)
                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
                at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:61)
                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
                at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:55)
                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
                at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:77)
                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
                at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:102)
                at $Proxy0.testFoo(Unknown Source)
                at jbosststest.client.TestClient.(TestClient.java:23)
                at jbosststest.client.TestClient.main(TestClient.java:33)
                at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:73)
                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
                at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:61)
                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
                at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:55)
                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
                at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:77)
                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
                at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:102)
                at $Proxy0.testFoo(Unknown Source)
                at jbosststest.client.TestClient.(TestClient.java:23)
                at jbosststest.client.TestClient.main(TestClient.java:33)

                • 5. Re: Unable to locate current JTA transaction
                  jhalliday

                  Why are you linking against hibernate directly rather than using the EJB3 entitymanager?