我正在使用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。我做错了。请帮我。感谢。
答案 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的事务管理器相同的健壮性。