繁体   English   中英

使用Oracle Streams AQ在Spring MDB中共享JMS和Hibernate事务?

[英]Sharing JMS and Hibernate transactions in a Spring MDB using Oracle Streams AQ?

我正在使用Oracle 11g作为我的数据库,并将其Oracle Streams AQ功能用作JMS实现。

据我所知,应该可以实现一个基于Spring的消息驱动的POJO(MDP),它使用相同的数据源进行事务数据访问和JMS事务 - 所有这些都没有XA-Transactions(IIRC,它作为一个市场销售) SpringSource Advanced Pack for Oracle的特性)。

这也可以使用Hibernate吗? 理想情况下,我的MDP将启动JMS事务并从队列中读取消息,然后通过Hibernate重新使用该事务进行数据访问。 如果出现任何问题,JMS和数据库事务都将回退,而不使用两阶段提交(2PC)。

我不是一个交易大师,所以在我开始深入挖掘之前,任何人都可以确认这是可能的并且也有意义吗?

更新:
我想要的是共享事务资源模式的实现 示例代码演示了ActiveMQ和JDBC,但我需要使用Oracle Streams AQ和Hibernate。

Update2: SpringSource Advanced Pack for Oracle作为Spring Data JDBC的一部分开源 ,它“提供了使用单个本地事务管理器进行数据库和消息访问的选项,而无需采用昂贵的分布式两阶段提交事务管理”。

正如你所说,2PC不应该是必要的,因为appserver应该处理它。 但是,您几乎必须使用JTA(即JavaEE容器)事务,而不是vanilla DataSource事务,因为JMS仅适用于JTA。

这不是什么大问题,只是更加繁琐:

  1. 你的Spring配置应该使用<jee:jndi-lookup/>来获取对容器的DataSource的引用,并将该数据源注入到spring管理的hibernate SessionFactory中。
  2. 然后,您需要在上下文中引入事务管理器( <tx:jta-transaction-manager/>应该适用于大多数应用服务器)。
  3. 在Spring JMS MessageListenerContainer ,将上面的事务管理器引用插入其中。

这一切都有意义吗,还是我应该详细说明? 此设置确保容器管理的事务跨JMS和Hibernate交互保持。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM