java - JMS 与 Hibernate session

标签 java hibernate oracle11g oracle-aq

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

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

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

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

最佳答案

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

您需要 2 个不同的 session 才能实现此目的:

  1. 用于数据库工作的 Hibernate session (org.hibernate.Session)
  2. 用于 JMS/队列工作的 JMS session (javax.jms.Session)

根据您的用例,您可能还希望 XA 事务管理器在两个 session 之间执行正确的两阶段提交并维护事务完整性。

关于java - JMS 与 Hibernate session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44373249/

相关文章:

java - 名称包含来自循环的值的变量声明

java - 使用 java Date 和 SimpleDateFormat 验证范围

java - 如何使用实体监听器和回调方法访问 oldObject 和 newObject

sql - PL/SQL varchar(10)到varchar(9)

java - 是否需要构造函数来初始化静态变量?

java - JIBX绑定(bind)松散的xml结构

java - 带有 Hibernate 的 PostgreSQL 没有持久化我的实体

java - 在java中维护线程中变量的值

java - 在 Hibernate 4.2.21 中删除表的所有行

database - 限制用户只能访问 Oracle SQL Developer 中自己的表