PDA

View Full Version : XA Transactions with Atomikos and JPA



rmcalderero
Mar 5th, 2008, 10:29 AM
Hi,

Anyone has got a working configuration with atomikos transactions, JMS (activemq), JPA(Hibernate) ??

I have spent some days trying to configure my application. Finally jms operations are done correctly (rollback) but i cant solve the hibernate problem listed below. I reduced the jpa operation to persisting a simple entity but still the same problem. The same persist works correctly within a test.

Exception:


17:00:35 - INFO - could not bind value 'test description' to parameter: 1; null
17:00:35 - WARN - Invocation of method 'leerMensajes' on target class [class $Proxy29] failed
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ e Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknow n Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Un known Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.util.MethodInvoker.invoke(Meth odInvoker.java:275)
at org.springframework.scheduling.support.MethodInvok ingRunnable.run(MethodInvokingRunnable.java:76)
at org.springframework.scheduling.timer.DelegatingTim erTask.run(DelegatingTimerTask.java:66)
at java.util.TimerThread.mainLoop(Unknown Source)
at java.util.TimerThread.run(Unknown Source)
Caused by: java.lang.NullPointerException
at org.hibernate.jdbc.AbstractBatcher.closePreparedSt atement(AbstractBatcher.java:534)
at org.hibernate.jdbc.AbstractBatcher.closeStatement( AbstractBatcher.java:269)
at org.hibernate.id.insert.AbstractReturningDelegate. releaseStatement(AbstractReturningDelegate.java:58 )
at org.hibernate.id.insert.AbstractReturningDelegate. performInsert(AbstractReturningDelegate.java:36)
at org.hibernate.persister.entity.AbstractEntityPersi ster.insert(AbstractEntityPersister.java:2158)
at org.hibernate.persister.entity.AbstractEntityPersi ster.insert(AbstractEntityPersister.java:2638)
at org.hibernate.action.EntityIdentityInsertAction.ex ecute(EntityIdentityInsertAction.java:48)
at org.hibernate.engine.ActionQueue.execute(ActionQue ue.java:250)
...............
at org.fundacionctic.tawmonitor.motor.service.GestorA nalisisServiceImpl.leerMensajes(GestorAnalisisServ iceImpl.java:91)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ e Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknow n Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Un known Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoi npointUsingReflection(AopUtils.java:301)
at org.springframework.aop.framework.ReflectiveMethod Invocation.invokeJoinpoint(ReflectiveMethodInvocat ion.java:182)
at org.springframework.aop.framework.ReflectiveMethod Invocation.proceed(ReflectiveMethodInvocation.java :149)
at org.springframework.transaction.interceptor.Transa ctionInterceptor.invoke(TransactionInterceptor.jav a:106)
at org.springframework.aop.framework.ReflectiveMethod Invocation.proceed(ReflectiveMethodInvocation.java :171)
at org.springframework.aop.interceptor.ExposeInvocati onInterceptor.invoke(ExposeInvocationInterceptor.j ava:89)
at org.springframework.aop.framework.ReflectiveMethod Invocation.proceed(ReflectiveMethodInvocation.java :171)
at org.springframework.aop.framework.JdkDynamicAopPro xy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy29.leerMensajes(Unknown Source)
... 9 more

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="tawmonitorDatabase" transaction-type="JTA"> <!-- RESOURCE_LOCAL JTA -->
......
</properties>
</persistence-unit>
</persistence>
applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
....................>

<bean id="motorDataSource" class="com.atomikos.jdbc.SimpleDataSourceBean" init-method="init" destroy-method="close">
<property name="uniqueResourceName"><value>XADBMS</value></property>
<property name="xaDataSourceClassName"><value>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</value></property>
<property name="xaDataSourceProperties">
<value>user=tawmonitor;password=ctic2005;url=jdbc:mysql://proteo/tawmonitor_motor;portNumber=3306</value>
</property>
<property name="exclusiveConnectionMode"><value>true</value></property>
<property name="connectionPoolSize" value="3"/>
</bean>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityMa nagerFactoryBean">

<property name="dataSource" ref="motorDataSource" />
<property name="persistenceUnitName" value="tawmonitorDatabase" />

<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVen dorAdapter">
<property name="showSql" value="true"/>
<property name="database" value="MYSQL"/>
<!-- <property name="databasePlatform" value="org.hibernate.dialect.MySQL5InnoDBDialect"/> -->
<property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect"/>
</bean>
</property>

<!--
<property name="jpaProperties">
<props>
<prop key="hibernate.transaction.manager_lookup_class">com.atomikos.icatch.jta.hibernate3.TransactionMana gerLookup</prop>
</props>
</property>
-->
<property name="jpaPropertyMap">
<map>
<entry key="hibernate.transaction.manager_lookup_class" value="com.atomikos.icatch.jta.hibernate3.TransactionMana gerLookup"/>
<entry key="hibernate.transaction.flush_before_completion" value="true"/>
<!-- <entry key="hibernate.transaction.auto_close_session" value="true"/> -->
<!-- <entry key="hibernate.current_session_context_class" value="jta"/> -->
<entry key="hibernate.current_session_context_class" value="org.hibernate.context.JTASessionContext"/>
<entry key="hibernate.connection.release_mode" value="auto"/>
</map>
</property>


<property name="jpaDialect">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaDia lect"/>
</property>


</bean>

<!-- bean post-processor for JPA annotations -->
<bean class="org.springframework.orm.jpa.support.PersistenceAnn otationBeanPostProcessor"/>


.......................


<bean id="userTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close">
<property name="forceShutdown" value="true" />
<property name="startupTransactionService" value="true" />
<property name="transactionTimeout" value="60" />
</bean>

<bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp"/>

<bean id="jtaTransactionManager" class="org.springframework.transaction.jta.JtaTransaction Manager">
<property name="transactionManager"><ref bean="userTransactionManager" /></property>
<property name="userTransaction"><ref bean="atomikosUserTransaction" /></property>
<property name="transactionSynchronizationName" value="SYNCHRONIZATION_ON_ACTUAL_TRANSACTION" />
</bean>

<tx:advice id="txAdvice" transaction-manager="jtaTransactionManager">
<tx:attributes>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>

<aop:config>
<aop:pointcut id="OATransactionsServiceOperations"
expression="execution(* org.fundacionctic.tawmonitor.motor.service.GestorA nalisisService.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="OATransactionsServiceOperations"/>
</aop:config>

<aop:config>
<aop:pointcut id="MessageListenerOperations" expression="execution(* javax.jms.MessageListener.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="MessageListenerOperations"/>
</aop:config>

In posts of different forums i have read people is changing from jpa to plain hibernate LocalSessionFactoryBean abstraction.
Anyone have succeeded with a similar configuration? Or maybe with others xa trans managers such as jtom, jbosstm,....?

Any help will be appreciated. Thanks.

GuyPardon
Mar 5th, 2008, 03:11 PM
Hi,

Please pay close attention to the hibernate properties; see http://wiki.atomikos.org/Documentation/HibernateIntegration

Otherwise, if that doesn't help, please post a tm.out file in DEBUG mode at www.atomikos.org/forums

Thanks
Guy