如何使用JNDI获取XADatasource查找Atomikos事务管理

时间:2013-03-04 14:39:48

标签: spring websphere-7 jta xa

我正在使用Spring应用程序配置Atomikios TM API以实现全局事务。由于Atomikios需要XADatasource才能工作,所以我已经完成了JNDI的查找。但是,不幸的是,我在查找时遇到了错误。

JNDI位置[jdbc / cuds]上可用的[class com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource]类型的对象不能分配给[javax.sql.XADataSource]

<jee:jndi-lookup id="dataSourceCu" jndi-name="jdbc/cuds" cache="true" resource-ref="true" lookup-on-startup="true" expected-type="javax.sql.XADataSource" />
<jee:jndi-lookup id="dataSourceGodb" jndi-name="jdbc/pushpullds" cache="true" resource-ref="true" lookup-on-startup="true" expected-type="javax.sql.XADataSource" />

我在WebSphere 7.0中使用Spring 3.0 / hibernate。我做错了。请帮我。感谢。

2 个答案:

答案 0 :(得分:0)

jdbc/cuds下配置的数据源不是XADataSource,而是普通数据源。您需要在WebSphere中更改数据源配置(我不知道如何执行此操作)。

但是,由于您在WebSphere上拥有自己的事务管理器,因此实际上不需要配置Atomikios。你可以使用

<tx:jta-transaction-manager>

org.springframework.transaction.jta.JtaTransactionManager / org.springframework.transaction.jta.WebSphereUowTransactionManager但数据源仍需要为XA。

答案 1 :(得分:0)

XADataSource定义JDBC提供程序和应用程序服务器之间的契约,并且只能在该上下文中使用。在应用程序中通过JNDI查找数据源时获得的DataSource对象永远不会实现XADataSource接口,即使基础数据源配置为支持XA。

如果您想使用自己的事务管理器,那么您还必须自己管理数据源。请注意,我个人不会这样做,并强烈建议使用WebSphere的事务管理器。原因是分布式事务涉及许多细微​​之处(例如恢复和不确定事务),并且在应用程序内部设置事务管理器不太可能达到与WebSphere的事务管理器相同的健壮性。