为什么JMS规范的设计方式使得当创建Sessions的Connection对象是线程安全的(由线程共享)时,并发线程不能使用Session对象?
答案 0 :(得分:7)
JMS 2.0 Spec
第25页
限制对会话的并发访问有两个原因。
首先,会话是支持事务的JMS实体。它是 很难实现多线程的事务。
其次,会话支持异步消息消费。它是 重要的是JMS不要求客户端代码用于异步 消息消费能够处理多个并发 消息。
此外,如果会话已设置多个, 异步消费者,重要的是不要强制客户端 处理这些独立消费者同时发生的情况 执行。这些限制使JMS更易于使用 客户端。更复杂的客户端可以获得并发性 通过使用多个会话的愿望。在经典的API和 特定于域的API这意味着使用多个会话对象。在里面 简化的API意味着使用多个JMSContext对象。
答案 1 :(得分:6)
JMS Session对象通常用于Transactions。我们都知道事务是特定于线程的,不能跨越线程。因此,不能跨线程使用事务处理的JMS会话。我相信JMS规范认为会话不是线程安全的。