首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Oracle流AQ在Spring中共享JMS和Hibernate事务?

问使用Oracle流AQ在Spring中共享JMS和Hibernate事务?
EN

Stack Overflow用户
提问于 2009-08-03 18:31:14
回答 1查看 5.9K关注 0票数 6

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

据我所知,应该可以实现一个基于Spring的消息驱动的POJO (MDP),它对事务数据访问和JMS事务都使用相同的数据源--所有这些事务都没有XA--事务,这是Oracle的一个特性。

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

我并不是一个事务专家,所以在我开始深入挖掘之前,有人能确认这是可能的,也是有意义的吗?

更新:

我想要的是共享事务资源模式的实现。样本代码为ActiveMQ和JDBC演示了它,但我需要使用Oracle、AQ和Hibernate。

Update2: SpringSource Advanced for Oracle一直是SpringSource的一部分,它“为数据库和消息访问提供了使用单个本地事务管理器的选项,而无需求助于昂贵的分布式2阶段提交事务管理”。

EN

回答 1

Stack Overflow用户

发布于 2009-08-03 20:58:38

正如您所说,2PC不应该是必需的,因为appserver应该负责它。但是,您几乎必须使用JTA (即JavaEE容器)事务,而不是普通的DataSource事务,因为JMS只适用于JTA。

这没什么大不了的,只是有点微妙:

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

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1223899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档