我的项目使用 hibernate 连接到数据库,从 JBoss 上的连接池获取连接。我想用队列中的发布/消费替换一些对表的读/写。我构建了一个使用 OracleAQ 的工作示例,但是,我使用以下方式连接到数据库:
AQjmsFactory.getQueueConnectionFactory
后跟 createQueueConnection
,
然后使用 createQueueSession
获取 (JMS) QueueSession
,我可以在其上调用 createProducer
和 createConsumer
。
所以我知道如何使用jms.QueueSession
来做我想做的事情。但是使用 hibernate,我得到了一个 hibernate.session
,它没有这些方法。
我不想每次在队列上执行操作时都打开一个新连接 - 这就是我现在在工作示例中所做的事情。有没有办法从 hibernate.session 执行队列操作?仅使用 SQL 查询?
最佳答案
我认为您将 JMS(消息队列) session 与 Hibernate(数据库) session 混淆了。 Hibernate 框架与 JMS 没有任何重叠,因此它不能用于完成这两件事。
您需要 2 个不同的 session 才能实现此目的:
- 用于数据库工作的 Hibernate session (
org.hibernate.Session
) - 用于 JMS/队列工作的 JMS session (
javax.jms.Session
)
根据您的用例,您可能还希望 XA 事务管理器在两个 session 之间执行正确的两阶段提交并维护事务完整性。
关于java - JMS 与 Hibernate session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44373249/