JCA JMS 和 Plain JMS 有什么区别

What is the difference between JCA JMS and Plain JMS

我是 JMS 新手。我试图了解 JCA JMS(Java 连接器体系结构)和普通 JMS 之间的区别。我试图通过网络找到它,但没有找到令人满意的东西。我们可以使用 WebLogic 和 JBoss 都支持的 JCA JMS 编写代码吗?

从API的角度来看,"JCA JMS"和"Plain JMS"没有区别。不同之处在于它们 的行为方式 。 JCA-based JMS 连接工厂与普通 JMS 连接工厂相比有两大优势:

  • Pooled - 一般来说,当连接是 "created" 来自 JCA-based JMS 连接工厂时,基础物理连接从池中取出,并且当连接为 "closed" 时,基础物理连接将返回到池中。这消除了实际创建和销毁物理连接的性能损失,它允许客户端以通常被认为是 anti-pattern 的方式编写(例如 "creating" 和 "closing" 每个发送的连接消息)。
  • 自动登记到 JTA 事务中 - 大多数情况下,Java EE 应用程序服务器中的应用程序 运行 通过 MDB 使用 JMS 消息.默认情况下,MDB 中消息的使用(即 onMessage 的执行)发生在 JTA 事务中。如果在 MDB 的处理过程中使用了 JCA-based JMS 连接工厂(例如发送消息),那么 JCA 逻辑将自动将会话登记到 JTA 事务中,以便消息的使用和发送消息是原子操作(假设 JCA-based 连接工厂支持 XA)。

我希望您可以编写在 WebLogic 和 JBoss AS 中表现相同的应用程序代码。