【发布时间】:2013-12-31 21:16:15
【问题描述】:
为什么 JMS 规范的设计方式是,当创建 Session 的 Connection 对象是线程安全的(由线程共享)时,并发线程不能使用 Session 对象?
【问题讨论】:
为什么 JMS 规范的设计方式是,当创建 Session 的 Connection 对象是线程安全的(由线程共享)时,并发线程不能使用 Session 对象?
【问题讨论】:
JMS 会话对象通常用于事务。我们都知道事务是线程特定的,不能跨线程。因此,事务处理的 JMS 会话不能跨线程使用。我相信出于这个原因,JMS 规范说会话不是线程安全的。
【讨论】:
JMS 2.0 规范
第 25 页
限制对会话的并发访问有两个原因。
首先,会话是支持事务的 JMS 实体。它是 实现多线程事务非常困难。
第二,会话支持异步消息消费。它是 重要的是 JMS 不需要客户端代码用于异步 消息消费能够处理多个,并发 消息。
另外,如果一个会话已经设置了多个, 异步消费者,重要的是不强制客户端 处理这些单独的消费者同时存在的情况 执行。这些限制使 JMS 更容易用于典型的 客户。更复杂的客户端可以获得他们的并发性 希望通过使用多个会话。在经典 API 和 特定于域的 API 这意味着使用多个会话对象。在里面 简化 API 这意味着使用多个 JMSContext 对象。
【讨论】: