JMS与Hibernate会话

时间:2017-06-05 16:17:38

标签: java hibernate oracle11g oracle-aq

我的项目使用hibernate连接到数据库,从JBoss上的连接池获取连接。我想用队列中的发布/消费替换对表的一些读/写。我构建了一个使用OracleAQ的工作示例,但是,我使用:

连接到数据库

AQjmsFactory.getQueueConnectionFactory后跟createQueueConnection, 然后使用createQueueSession获取(JMS)QueueSession,我可以在其上调用createProducercreateConsumer

所以我知道如何使用jms.QueueSession做我想做的事。但是使用hibernate,我得到一个hibernate.session,它没有这些方法。

每次我对队列执行操作时,我都不想打开新连接 - 这就是我现在在我的工作示例中所做的事情。有没有办法从hibernate.session执行队列操作?只有SQL查询?

2 个答案:

答案 0 :(得分:2)

我认为您将JMS(消息队列)会话与Hibernate(数据库)会话混淆。 Hibernate框架与JMS没有任何重叠,因此它不能用于做这两件事。

为此,您需要2个不同的会话:

  1. 用于数据库工作的Hibernate会话(org.hibernate.Session
  2. JMS会话(javax.jms.Session)到JMS /队列工作
  3. 根据您的使用情况,您可能还希望XA事务管理器在两个会话中执行正确的两阶段提交并保持事务完整性。

答案 1 :(得分:0)

我也在找一些"理智"如何使用JMS连接来操作数据库数据。什么都没有。 Dean是对的,你必须使用两个不同的连接来连接相同的数据并在它们之间分配XA事务。

这个解决方案打开了一个前所未有的各种问题。在现实生活中,分布式事务确实非常重要。令人惊讶的是,在某些情况下,Oracle可以检测到两个连接指向同一个数据库,然后可以绕过两阶段提交 - 即使使用XA也是如此。