我的项目使用hibernate连接到数据库,从JBoss上的连接池获取连接。我想用队列中的发布/消费替换对表的一些读/写。我构建了一个使用OracleAQ的工作示例,但是,我使用:
连接到数据库 AQjmsFactory.getQueueConnectionFactory
后跟createQueueConnection
,
然后使用createQueueSession
获取(JMS)QueueSession
,我可以在其上调用createProducer
和createConsumer
。
所以我知道如何使用jms.QueueSession
做我想做的事。但是使用hibernate,我得到一个hibernate.session
,它没有这些方法。
每次我对队列执行操作时,我都不想打开新连接 - 这就是我现在在我的工作示例中所做的事情。有没有办法从hibernate.session
执行队列操作?只有SQL查询?
答案 0 :(得分:2)
我认为您将JMS(消息队列)会话与Hibernate(数据库)会话混淆。 Hibernate框架与JMS没有任何重叠,因此它不能用于做这两件事。
为此,您需要2个不同的会话:
org.hibernate.Session
)javax.jms.Session
)到JMS /队列工作根据您的使用情况,您可能还希望XA事务管理器在两个会话中执行正确的两阶段提交并保持事务完整性。
答案 1 :(得分:0)
我也在找一些"理智"如何使用JMS连接来操作数据库数据。什么都没有。 Dean是对的,你必须使用两个不同的连接来连接相同的数据并在它们之间分配XA事务。
这个解决方案打开了一个前所未有的各种问题。在现实生活中,分布式事务确实非常重要。令人惊讶的是,在某些情况下,Oracle可以检测到两个连接指向同一个数据库,然后可以绕过两阶段提交 - 即使使用XA也是如此。