jboss 事务 多个数据源

今天部署一个应用时,老是报错:

2010-07-30 15:23:00,464 WARN  [com.arjuna.ats.jta.logging.loggerI18N] (main) [com.arjuna.ats.internal.jta.transaction.arjunacore.lastResource.disallow] [com.arjuna.ats.internal.jta.transaction.arjunacore.lastResource.disallow] Adding multiple last resources is disallowed. Current resource is org.jboss.resource.connectionmanager.TxConnectionManager$LocalXAResource@f29c65
2010-07-30 15:23:00,471 WARN  [org.hibernate.util.JDBCExceptionReporter] (main) SQL Error: 0, SQLState: null
2010-07-30 15:23:00,471 ERROR [org.hibernate.util.JDBCExceptionReporter] (main) Could not enlist in transaction on entering meta-aware object!; - nested throwable: (javax.transaction.SystemException: java.lang.Throwable: Unabled to enlist resource, see the previous warnings. tx=TransactionImple < ac, BasicAction: 7f000001:a11f:4c527dc4:76 status: ActionStatus.ABORT_ONLY >); - nested throwable: (org.jboss.resource.JBossResourceException: Could not enlist in transaction on entering meta-aware object!; - nested throwable: (javax.transaction.SystemException: java.lang.Throwable: Unabled to enlist resource, see the previous warnings. tx=TransactionImple < ac, BasicAction: 7f000001:a11f:4c527dc4:76 status: ActionStatus.ABORT_ONLY >))
2010-07-30 15:23:00,473 ERROR [ejbModule.persistence.smsmmsplatform.sms.SmsIsagMSP2LinkConfigDaoImpl] (main) find failed:

 

上网查了一下,报错的原因是因为一个事务里面要操作两个数据源的数据。但是我查了一下应用,应用里的配置文件只指向了一个数据源。

跟相关同事沟通后,才发现,原来这个应用有用到EJB3的定时服务。EJB3的定时服务的实现貌似跟jboss的TimerService有联系,而JBoss的TimerService实现采用数据库来保存timer信息,默认采用hypersonic的数据库,非xa的datasource,同时我们的数据源也是非xa的datasource,这样ts是没有办法把两个非xa的datasource纳入一个事务管理中的。

 

解决方法:

/server/default/conf文件夹中jbossjta-properties.xml文件里    <properties depends="arjuna" name="jta">下面增加子节点<property name="com.arjuna.ats.jta.allowMultipleLastResources" value="true"/>

你可能感兴趣的:(jboss 事务 多个数据源)