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



我正在使用我的Spring应用程序配置Atomikios TM API以实现全局事务。由于Atomikios需要XADatasource才能工作,所以我进行了JNDI查找以获得相同的结果。但是,不幸的是,我在查找时出现了以下错误。

JNDI位置[jdbc/cuds]处可用的[class com.ibm.ws.rsadapter.jdb.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" />

我正在将Spring3.0/hhibernate与WebSphere7.0一起使用。这里我做得不对。请帮帮我。谢谢。

jdbc/cuds下配置的数据源不是XADataSource,而是正常的数据源。您需要更改WebSphere中的数据源配置(我不知道如何做到这一点(。

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

<tx:jta-transaction-manager>

或者org.springframework.transaction.jta.JtaTransactionManager/org.springframework.transaction.jta.WebSphereUowTransactionManager,但是数据源仍然需要是XA。

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

如果您想使用自己的事务管理器,那么您还必须自己管理数据源。请注意,就我个人而言,我不会这么做,强烈建议使用WebSphere的事务管理器。原因是分布式事务涉及许多微妙之处(例如恢复和可疑事务(,并且在应用程序中设置事务管理器不太可能实现与WebSphere的事务管理器相同级别的健壮性。

最新更新