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