【问题标题】:how to get XADatasource using JNDI look up for Atomikos Transaction Management如何使用 JNDI 获取 XADatasource 查找 Atomikos 事务管理
【发布时间】:2013-03-04 14:39:48
【问题描述】:

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

【问题讨论】:

    标签: spring websphere-7 jta xa


    【解决方案1】:

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

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

    <tx:jta-transaction-manager>
    

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

    【讨论】:

    • 感谢 Philippe 的提示...我已经更改了 WAS 中的数据源设置,它对我来说效果很好...
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-03-13
      • 1970-01-01
      • 2017-08-11
      • 1970-01-01
      • 1970-01-01
      • 2013-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多