1

我正在使用我的 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。我做错了。请帮我。谢谢。

4

2 回答 2

0

下面配置的数据源jdbc/cuds不是普通的,XADataSource而是普通的。您需要更改 WebSphere 中的数据源配置(我不知道该怎么做)。

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

<tx:jta-transaction-manager>

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

于 2013-03-04T16:03:02.687 回答
0

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

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

于 2013-03-05T19:13:28.350 回答