The TransactionManager implements UserTransaction, so try something like:
   UserTransasction utx = (UserTransasction)
getContext().getTransactionManager();

On Tue, Mar 3, 2009 at 15:14, Andrea Zoppello <[email protected]> wrote:

> Hi Guillaume,
>
> I've done and the transaction manager is correctly retrieved from jndi, the
> problem arise when
> i try to get the transaction ( not the transaction manager ).
>
> I've also made a simple smx-bean with the following code:
>
>           System.out.println(" **************************
> FIRST***********************************");
>           UserTransaction utx = null;
>           try{
>               utx = (UserTransaction) new
> InitialContext().lookup("java:comp/UserTransaction");
>           }catch (Throwable tx) {
>               tx.printStackTrace();
>           }
>                     TransactionManager tm =
> (TransactionManager)getContext().getTransactionManager();
>           tm.begin();
>                     System.out.println(" ************************** AFTER
> ***********************************");
>                     try{
>               utx = (UserTransaction) new
> InitialContext().lookup("java:comp/UserTransaction");
>           }catch (Throwable tx) {
>               tx.printStackTrace();
>           }
>
> but in both point i get the user transaction not bound to jndi tree.
>
> BTW i i still get the above code working is not enough for me beacuse i
> need ( for example ) two different session factory each one
> pointing to a xa datasource to participate in a distributed transaction.-
> Show quoted text -
>
>
> Andrea
> Guillaume Nodet ha scritto:
>
>> Looking at the default values in conf/jndi.xml, the transaction manager is
>> bound to the following values:
>>     <entry key="javax.transaction.TransactionManager"
>> value-ref="transactionManager" />
>>    <entry key="java:comp/env/smx/TransactionManager"
>> value-ref="transactionManager" />
>>
>> So you need to configure hibernate to look at one of those values.
>>
>> On Tue, Mar 3, 2009 at 14:40, Andrea Zoppello <[email protected]>
>> wrote:
>>
>>
>>
>>> Hi Guillaume,
>>>
>>> I think the user transaction object shoud be bound automatically to the
>>> jndi tree
>>> by the transaction manager.
>>>
>>> Do we miss something in configuration file??
>>>
>>> Andrea
>>> Guillaume Nodet ha scritto:- Show quoted text -
>>>
>>>  Is the UserTransaction object bound in your spring JNDI configuration
>>> file
>>>
>>>
>>>> ?
>>>>
>>>> On Mon, Mar 2, 2009 at 10:35, Andrea Zoppello <[email protected]>
>>>> wrote:
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>> Hi,
>>>>>
>>>>> I've developed a custom servicemix-bean component that initialize a
>>>>> jbpm
>>>>> engine.
>>>>>
>>>>> The engine use hibernate and i want to configure the hibernate.cf.xml
>>>>> file
>>>>> to be able to use JTA Transactions.
>>>>>
>>>>> The hibernate.cfg.xml file looks like:
>>>>>
>>>>> <hibernate-configuration>
>>>>> <session-factory>
>>>>>
>>>>>  <!-- hibernate dialect -->
>>>>>  <property
>>>>>
>>>>>
>>>>> name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
>>>>>  <property
>>>>>
>>>>> name="hibernate.connection.datasource">java:comp/env/jdbc/jbpm</property>
>>>>>  <property
>>>>>
>>>>>
>>>>> name="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.GeronimoTransactionManagerLookup</property>
>>>>>
>>>>>  <property
>>>>>
>>>>>
>>>>> name="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</property>
>>>>>  <property name="hibernate.query.substitutions">true 1, false
>>>>> 0</property>
>>>>>  <property
>>>>> name="jta.UserTransaction">java:comp/UserTransaction</property>
>>>>> .....
>>>>>
>>>>> And i've declared te jbpm datasource as:
>>>>>
>>>>> <entry key="java:comp/env/jdbc/jbpm">
>>>>>     <bean id="jbpm-ds"
>>>>>
>>>>> class="org.apache.commons.dbcp.managed.BasicManagedDataSource"
>>>>>           destroy-method="close">
>>>>>           <property name="driverClassName"
>>>>> value="com.mysql.jdbc.Driver"/>
>>>>>           <property name="url"
>>>>> value="jdbc:mysql://localhost:3306/jbpm"/>
>>>>>                     <property name="username" value="jbpm"/>
>>>>>           <property name="password" value="jbpm"/>
>>>>>           <property name="defaultCatalog" value="jbpm"/>
>>>>>           <property name="transactionManager"
>>>>> ref="transactionManager"/>
>>>>>           <property name="XADataSource"
>>>>> value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"/>
>>>>>
>>>>>     </bean>
>>>>>   </entry>
>>>>>
>>>>> Within this configuration the XADatsource to mysql database seems to be
>>>>> configured directly but i've a fault gettin the user transaction. The
>>>>> exception is:
>>>>>
>>>>> ERROR - JTATransaction                 - Could not find UserTransaction
>>>>> in
>>>>> JNDI
>>>>> javax.naming.NamingException: scheme java not recognized
>>>>>     at
>>>>>
>>>>>
>>>>> org.apache.xbean.spring.jndi.DefaultContext.lookup(DefaultContext.java:131)
>>>>>     at javax.naming.InitialContext.lookup(InitialContext.java:351)
>>>>>     at
>>>>> org.hibernate.transaction.JTATransaction.<init>(JTATransaction.java:60)
>>>>>     at
>>>>>
>>>>>
>>>>> org.hibernate.transaction.JTATransactionFactory.createTransaction(JTATransactionFactory.j
>>>>> ava:57)
>>>>>     at
>>>>> org.hibernate.jdbc.JDBCContext.getTransaction(JDBCContext.java:193)
>>>>>     at
>>>>> org.hibernate.impl.SessionImpl.getTransaction(SessionImpl.java:1315)
>>>>>     at
>>>>> org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1325)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.persistence.db.DbPersistenceService.beginTransaction(DbPersistenceService.java:1
>>>>> 32)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.persistence.db.DbPersistenceService.getSession(DbPersistenceService.java:124)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.persistence.db.DbPersistenceService.getJobSession(DbPersistenceService.java:369)
>>>>>
>>>>>     at org.jbpm.JbpmContext.getJobSession(JbpmContext.java:630)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.job.executor.JobExecutorThread.acquireJobs(JobExecutorThread.java:106)
>>>>>     at
>>>>> org.jbpm.job.executor.JobExecutorThread.run(JobExecutorThread.java:54)
>>>>> ERROR - JobExecutorThread              - exception in job executor
>>>>> thread.
>>>>> waiting 5000 milliseconds
>>>>>
>>>>> org.hibernate.TransactionException: Could not find UserTransaction in
>>>>> JNDI:
>>>>>     at
>>>>> org.hibernate.transaction.JTATransaction.<init>(JTATransaction.java:64)
>>>>>     at
>>>>>
>>>>>
>>>>> org.hibernate.transaction.JTATransactionFactory.createTransaction(JTATransactionFactory.j
>>>>> ava:57)
>>>>>     at
>>>>> org.hibernate.jdbc.JDBCContext.getTransaction(JDBCContext.java:193)
>>>>>     at
>>>>> org.hibernate.impl.SessionImpl.getTransaction(SessionImpl.java:1315)
>>>>>     at
>>>>> org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1325)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.persistence.db.DbPersistenceService.beginTransaction(DbPersistenceService.java:1
>>>>> 32)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.persistence.db.DbPersistenceService.getSession(DbPersistenceService.java:124)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.persistence.db.DbPersistenceService.getJobSession(DbPersistenceService.java:369)
>>>>>
>>>>>     at org.jbpm.JbpmContext.getJobSession(JbpmContext.java:630)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.job.executor.JobExecutorThread.acquireJobs(JobExecutorThread.java:106)
>>>>>     at
>>>>> org.jbpm.job.executor.JobExecutorThread.run(JobExecutorThread.java:54)
>>>>> Caused by: javax.naming.NamingException: scheme java not recognized
>>>>>     at
>>>>>
>>>>>
>>>>> org.apache.xbean.spring.jndi.DefaultContext.lookup(DefaultContext.java:131)
>>>>>     at javax.naming.InitialContext.lookup(InitialContext.java:351)
>>>>>     at
>>>>> org.hibernate.transaction.JTATransaction.<init>(JTATransaction.java:60)
>>>>>     ... 10 more
>>>>> ERROR - JTATransaction                 - Could not find UserTransaction
>>>>> in
>>>>> JNDI
>>>>> javax.naming.NamingException: scheme java not recognized
>>>>>     at
>>>>>
>>>>>
>>>>> org.apache.xbean.spring.jndi.DefaultContext.lookup(DefaultContext.java:131)
>>>>>     at javax.naming.InitialContext.lookup(InitialContext.java:351)
>>>>>     at
>>>>> org.hibernate.transaction.JTATransaction.<init>(JTATransaction.java:60)
>>>>>     at
>>>>>
>>>>>
>>>>> org.hibernate.transaction.JTATransactionFactory.createTransaction(JTATransactionFactory.j
>>>>> ava:57)
>>>>>     at
>>>>> org.hibernate.jdbc.JDBCContext.getTransaction(JDBCContext.java:193)
>>>>>     at
>>>>> org.hibernate.impl.SessionImpl.getTransaction(SessionImpl.java:1315)
>>>>>     at
>>>>> org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1325)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.persistence.db.DbPersistenceService.beginTransaction(DbPersistenceService.java:1
>>>>> 32)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.persistence.db.DbPersistenceService.getSession(DbPersistenceService.java:124)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.persistence.db.DbPersistenceService.getJobSession(DbPersistenceService.java:369)
>>>>>
>>>>>     at org.jbpm.JbpmContext.getJobSession(JbpmContext.java:630)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.job.executor.JobExecutorThread.acquireJobs(JobExecutorThread.java:106)
>>>>>     at
>>>>> org.jbpm.job.executor.JobExecutorThread.run(JobExecutorThread.java:54)
>>>>> ERROR - JobExecutorThread              - exception in job executor
>>>>> thread.
>>>>> waiting 10000 millisecond
>>>>> s
>>>>> org.hibernate.TransactionException: Could not find UserTransaction in
>>>>> JNDI:
>>>>>     at
>>>>> org.hibernate.transaction.JTATransaction.<init>(JTATransaction.java:64)
>>>>>     at
>>>>>
>>>>>
>>>>> org.hibernate.transaction.JTATransactionFactory.createTransaction(JTATransactionFactory.j
>>>>> ava:57)
>>>>>     at
>>>>> org.hibernate.jdbc.JDBCContext.getTransaction(JDBCContext.java:193)
>>>>>     at
>>>>> org.hibernate.impl.SessionImpl.getTransaction(SessionImpl.java:1315)
>>>>>     at
>>>>> org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1325)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.persistence.db.DbPersistenceService.beginTransaction(DbPersistenceService.java:1
>>>>> 32)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.persistence.db.DbPersistenceService.getSession(DbPersistenceService.java:124)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.persistence.db.DbPersistenceService.getJobSession(DbPersistenceService.java:369)
>>>>>
>>>>>     at org.jbpm.JbpmContext.getJobSession(JbpmContext.java:630)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.job.executor.JobExecutorThread.acquireJobs(JobExecutorThread.java:106)
>>>>>     at
>>>>> org.jbpm.job.executor.JobExecutorThread.run(JobExecutorThread.java:54)
>>>>> Caused by: javax.naming.NamingException: scheme java not recognized
>>>>>     at
>>>>>
>>>>>
>>>>> org.apache.xbean.spring.jndi.DefaultContext.lookup(DefaultContext.java:131)
>>>>>     at javax.naming.InitialContext.lookup(InitialContext.java:351)
>>>>>     at
>>>>> org.hibernate.transaction.JTATransaction.<init>(JTATransaction.java:60)
>>>>>     ... 10 more
>>>>> ERROR - JTATransaction                 - Could not find UserTransaction
>>>>> in
>>>>> JNDI
>>>>> javax.naming.NamingException: scheme java not recognized
>>>>>     at
>>>>>
>>>>>
>>>>> org.apache.xbean.spring.jndi.DefaultContext.lookup(DefaultContext.java:131)
>>>>>     at javax.naming.InitialContext.lookup(InitialContext.java:351)
>>>>>     at
>>>>> org.hibernate.transaction.JTATransaction.<init>(JTATransaction.java:60)
>>>>>     at
>>>>>
>>>>>
>>>>> org.hibernate.transaction.JTATransactionFactory.createTransaction(JTATransactionFactory.j
>>>>> ava:57)
>>>>>     at
>>>>> org.hibernate.jdbc.JDBCContext.getTransaction(JDBCContext.java:193)
>>>>>     at
>>>>> org.hibernate.impl.SessionImpl.getTransaction(SessionImpl.java:1315)
>>>>>     at
>>>>> org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1325)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.persistence.db.DbPersistenceService.beginTransaction(DbPersistenceService.java:1
>>>>> 32)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.persistence.db.DbPersistenceService.getSession(DbPersistenceService.java:124)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.persistence.db.DbPersistenceService.getJobSession(DbPersistenceService.java:369)
>>>>>
>>>>>     at org.jbpm.JbpmContext.getJobSession(JbpmContext.java:630)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.job.executor.JobExecutorThread.acquireJobs(JobExecutorThread.java:106)
>>>>>     at
>>>>> org.jbpm.job.executor.JobExecutorThread.run(JobExecutorThread.java:54)
>>>>> ERROR - JobExecutorThread              - exception in job executor
>>>>> thread.
>>>>> waiting 20000 millisecond
>>>>> s
>>>>> org.hibernate.TransactionException: Could not find UserTransaction in
>>>>> JNDI:
>>>>>     at
>>>>> org.hibernate.transaction.JTATransaction.<init>(JTATransaction.java:64)
>>>>>     at
>>>>>
>>>>>
>>>>> org.hibernate.transaction.JTATransactionFactory.createTransaction(JTATransactionFactory.j
>>>>> ava:57)
>>>>>     at
>>>>> org.hibernate.jdbc.JDBCContext.getTransaction(JDBCContext.java:193)
>>>>>     at
>>>>> org.hibernate.impl.SessionImpl.getTransaction(SessionImpl.java:1315)
>>>>>     at
>>>>> org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1325)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.persistence.db.DbPersistenceService.beginTransaction(DbPersistenceService.java:1
>>>>> 32)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.persistence.db.DbPersistenceService.getSession(DbPersistenceService.java:124)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.persistence.db.DbPersistenceService.getJobSession(DbPersistenceService.java:369)
>>>>>
>>>>>     at org.jbpm.JbpmContext.getJobSession(JbpmContext.java:630)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.job.executor.JobExecutorThread.acquireJobs(JobExecutorThread.java:106)
>>>>>     at
>>>>> org.jbpm.job.executor.JobExecutorThread.run(JobExecutorThread.java:54)
>>>>> Caused by: javax.naming.NamingException: scheme java not recognized
>>>>>     at
>>>>>
>>>>>
>>>>> org.apache.xbean.spring.jndi.DefaultContext.lookup(DefaultContext.java:131)
>>>>>     at javax.naming.InitialContext.lookup(InitialContext.java:351)
>>>>>     at
>>>>> org.hibernate.transaction.JTATransaction.<init>(JTATransaction.java:60)
>>>>>     ... 10 more
>>>>> ERROR - JTATransaction                 - Could not find UserTransaction
>>>>> in
>>>>> JNDI
>>>>> javax.naming.NamingException: scheme java not recognized
>>>>>     at
>>>>>
>>>>>
>>>>> org.apache.xbean.spring.jndi.DefaultContext.lookup(DefaultContext.java:131)
>>>>>     at javax.naming.InitialContext.lookup(InitialContext.java:351)
>>>>>     at
>>>>> org.hibernate.transaction.JTATransaction.<init>(JTATransaction.java:60)
>>>>>     at
>>>>>
>>>>>
>>>>> org.hibernate.transaction.JTATransactionFactory.createTransaction(JTATransactionFactory.j
>>>>> ava:57)
>>>>>     at
>>>>> org.hibernate.jdbc.JDBCContext.getTransaction(JDBCContext.java:193)
>>>>>     at
>>>>> org.hibernate.impl.SessionImpl.getTransaction(SessionImpl.java:1315)
>>>>>     at
>>>>> org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1325)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.persistence.db.DbPersistenceService.beginTransaction(DbPersistenceService.java:1
>>>>> 32)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.persistence.db.DbPersistenceService.getSession(DbPersistenceService.java:124)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.persistence.db.DbPersistenceService.getJobSession(DbPersistenceService.java:369)
>>>>>
>>>>>     at org.jbpm.JbpmContext.getJobSession(JbpmContext.java:630)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.job.executor.JobExecutorThread.acquireJobs(JobExecutorThread.java:106)
>>>>>     at
>>>>> org.jbpm.job.executor.JobExecutorThread.run(JobExecutorThread.java:54)
>>>>> ERROR - JobExecutorThread              - exception in job executor
>>>>> thread.
>>>>> waiting 40000 millisecond
>>>>> s
>>>>> org.hibernate.TransactionException: Could not find UserTransaction in
>>>>> JNDI:
>>>>>     at
>>>>> org.hibernate.transaction.JTATransaction.<init>(JTATransaction.java:64)
>>>>>     at
>>>>>
>>>>>
>>>>> org.hibernate.transaction.JTATransactionFactory.createTransaction(JTATransactionFactory.j
>>>>> ava:57)
>>>>>     at
>>>>> org.hibernate.jdbc.JDBCContext.getTransaction(JDBCContext.java:193)
>>>>>     at
>>>>> org.hibernate.impl.SessionImpl.getTransaction(SessionImpl.java:1315)
>>>>>     at
>>>>> org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1325)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.persistence.db.DbPersistenceService.beginTransaction(DbPersistenceService.java:1
>>>>> 32)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.persistence.db.DbPersistenceService.getSession(DbPersistenceService.java:124)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.persistence.db.DbPersistenceService.getJobSession(DbPersistenceService.java:369)
>>>>>
>>>>>     at org.jbpm.JbpmContext.getJobSession(JbpmContext.java:630)
>>>>>     at
>>>>>
>>>>>
>>>>> org.jbpm.job.executor.JobExecutorThread.acquireJobs(JobExecutorThread.java:106)
>>>>>     at
>>>>> org.jbpm.job.executor.JobExecutorThread.run(JobExecutorThread.java:54)
>>>>> Caused by: javax.naming.NamingException: scheme java not recognized
>>>>>     at
>>>>>
>>>>>
>>>>> org.apache.xbean.spring.jndi.DefaultContext.lookup(DefaultContext.java:131)
>>>>>     at javax.naming.InitialContext.lookup(InitialContext.java:351)
>>>>>     at
>>>>> org.hibernate.transaction.JTATransaction.<init>(JTATransaction.java:60)
>>>>>     ... 10 more
>>>>>
>>>>> Any idea???
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>>
>>
>
>


-- 
Cheers,
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/
------------------------
Open Source SOA
http://fusesource.com

Reply via email to