Spring2+hibernate3(jbpm3.1)+JTA跨库事务--求助

sky_sa 2012-04-25 10:35:30
需求:当前项目中,JBPM与 业务数据事务不统一,故想依托Jboss来统一管理。

上配置代码
1.Oracle-AX-DS.XML jboss数据源配置

<xa-datasource>
<jndi-name>claimDS</jndi-name>
<track-connection-by-tx/>
<isSameRM-override-value>false</isSameRM-override-value>
<xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
<xa-datasource-property name="URL">jdbc:oracle:thin:@10.2.100.11:1521:clmdev</xa-datasource-property>
<xa-datasource-property name="User">claim</xa-datasource-property>
<xa-datasource-property name="Password">claim</xa-datasource-property>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
<no-tx-separate-pools/>
<!--pooling parameters-->
<min-pool-size>1</min-pool-size>
<max-pool-size>5</max-pool-size>
<blocking-timeout-millis>90000</blocking-timeout-millis>
<idle-timeout-minutes>15</idle-timeout-minutes>
<metadata>
<type-mapping>Oracle10g</type-mapping>
</metadata>
</xa-datasource>


2. Spring 配置

<bean id="claimDS" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:/claimDS</value>
</property>
<property name="jndiTemplate">
<ref local="jndiTemplate" />
</property>
</bean>


	
<bean id="transactionManager"
class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManagerName" value="java:/TransactionManager"/>
<property name="userTransactionName" value="UserTransaction"/>
</bean>


<bean id="autoproxy"
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
...
</list>
</property>
<property name="interceptorNames">
<list>
...
</list>
</property>
</bean>


疑问配置点

	<bean id="hibernateSessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="claimDS" />
<property name="mappingLocations">
<list>
<value>classpath:/org/jbpm/**/*.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.connection.datasource">java:/claimDS</prop>
<prop key="hibernate.dialect">
org.hibernate.dialect.OracleDialect
</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</prop>
<prop key="hibernate.transaction.factory_class">
org.hibernate.transaction.JTATransactionFactory
</prop>
<prop key="transaction.manager_lookup_class">
org.hibernate.transaction.JBossTransactionManagerLookup
</prop>
<prop key="jta.UserTransaction">UserTransaction</prop>
<prop key="hibernate.transaction.auto_close_session">false</prop>
<prop key="hibernate.transaction.flush_before_completion">false</prop>
<prop key="hibernate.current_session_context_class">
org.hibernate.context.JTASessionContext
</prop>
</props>
</property>
</bean>




启动过程中,出现如下错误信息:


2012-04-25 09:58:09,178 DEBUG [net.sf.ehcache.store.MemoryStore] org.jbpm.graph.def.SuperState.nodes is persistent. Spooling 0 elements to the disk store.
2012-04-25 09:58:09,178 DEBUG [net.sf.ehcache.store.DiskStore] Deleting file org.jbpm.graph.def.SuperState.nodes.data
2012-04-25 09:58:09,178 DEBUG [net.sf.ehcache.store.DiskStore] org.jbpm.graph.def.SuperState.nodesCache: Expiry thread interrupted on Disk Store.
2012-04-25 09:58:09,193 WARN [org.jboss.tm.TransactionImpl] XAException:
tx=TransactionImpl:XidImpl[FormatId=257, GlobalId=Sinosoft-PC/14, BranchQual=, localId=14]
errorCode=XAER_NOTA
oracle.jdbc.xa.OracleXAException
at oracle.jdbc.xa.OracleXAResource.checkError(OracleXAResource.java:1270)
at oracle.jdbc.xa.client.OracleXAResource.end(OracleXAResource.java:480)
at org.jboss.resource.adapter.jdbc.xa.XAManagedConnection.end(XAManagedConnection.java:127)
at org.jboss.tm.TransactionImpl$Resource.endResource(TransactionImpl.java:2143)
at org.jboss.tm.TransactionImpl$Resource.endResource(TransactionImpl.java:2118)
at org.jboss.tm.TransactionImpl.endResources(TransactionImpl.java:1462)
at org.jboss.tm.TransactionImpl.rollback(TransactionImpl.java:411)
at org.jboss.ejb.plugins.TxInterceptorCMT.endTransaction(TxInterceptorCMT.java:493)
at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:361)
at org.jboss.ejb.plugins.TxInterceptorCMT.invokeHome(TxInterceptorCMT.java:161)
...
...
...
2012-04-25 09:58:09,240 WARN [org.jboss.tm.TransactionImpl] xa error: -4 (The XID is not valid.);
oracle error: 24756; oracle sql error: 0;
oracle.jdbc.xa.OracleXAException
at oracle.jdbc.xa.OracleXAResource.checkError(OracleXAResource.java:1270)
at oracle.jdbc.xa.client.OracleXAResource.end(OracleXAResource.java:480)
at org.jboss.resource.adapter.jdbc.xa.XAManagedConnection.end(XAManagedConnection.java:127)
at org.jboss.tm.TransactionImpl$Resource.endResource(TransactionImpl.java:2143)
at org.jboss.tm.TransactionImpl$Resource.endResource(TransactionImpl.java:2118)
at org.jboss.tm.TransactionImpl.endResources(TransactionImpl.java:1462)
at org.jboss.tm.TransactionImpl.rollback(TransactionImpl.java:411)
at org.jboss.ejb.plugins.TxInterceptorCMT.endTransaction(TxInterceptorCMT.java:493)
at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:361)
at org.jboss.ejb.plugins.TxInterceptorCMT.invokeHome(TxInterceptorCMT.java:161)
at org.jboss.ejb.plugins.SecurityInterceptor.invokeHome(SecurityInterceptor.java:145)
at org.jboss.ejb.plugins.LogInterceptor.invokeHome(LogInterceptor.java:132)
at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invokeHome(ProxyFactoryFinderInterceptor.java:107)
at org.jboss.ejb.SessionContainer.internalInvokeHome(SessionContainer.java:637)
at org.jboss.ejb.Container.invoke(Container.java:975)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)





有哪位大师知道是哪里的问题吗?

不胜感激
...全文
161 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ashitawillbefine 2012-05-04
  • 打赏
  • 举报
回复
我帮你找了一些solution

https://community.jboss.org/thread/24534
https://forums.oracle.com/forums/thread.jspa?messageID=10088218#10088218


Thanks for the links!!! This solved my problem, too. Long-running BPEL process instances where completing successfully but showing faults, presumably because the associated XA transaction had timed out while the process was making a call to a slow external web service. Making the suggested configuration changes to the datasource in WebLogic seems to have fixed the errors:
1. Set "Set XA TransactionTimeout" to true.
2. Set "XA Transaction Timeout" to 0

6,787

社区成员

发帖
与我相关
我的任务
社区描述
JBoss技术交流
社区管理员
  • JBoss技术交流社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧