JMS2.0规范中文版

简化API的关键特性

简化API的核心对象是javax.jms.JMSContext。它合并了传统API中的Connection和Session对象。

尽管在应用中JMSContext不暴露内部的Connection和Session对象,但Connection和Session概念依然非常重要。一个Connection代表一个客户端到JMS服务器的物理连接,一个Session代表发送和接收消息的单线程上下文会话。JMSContext则同时代表这两个概念。

应用发送消息时将使用JMSContext中的createProducer方法创建一个javax.jms. JMSProducer对象。此对象提供了发送消息的API。虽然它也提供了一个类似的功能创建一个匿名的MessageProducer对象(没有具体指定Destination),但是使用JMSProducer对象配置投递选项、消息属性和消息头更方便。

应用消费消息时可以使用JMSContext的多个方法创建一个javax.jms. JMSConsumer对象。它提供了与MessageConsumer类似的API来从一个具体的对象或主题消费消息。消息可以被同步或异步地消费,但在Java EE web或EJB容器环境中消息只能被同步地消费。

运行在Java EE web和EJB容器环境的应用不允许在一个连接上创建多于一个活动会话(参见章节12.2“”)。因此包含单个连接和单个会话的JMSContext非常适用于这些应用。

运行在Java SE或Java EE应用客户端容器中的应用允许在一个连接中创建多个活动会话。这就允许同一个物理连接被多个线程并发使用。这些需要在同一个连接创建多个会话的应用,应该先使用ConnectionFactory接口的工厂方法创建第一个JMSContext对象,然后使用JMSContext对象的createContext方法创建额外的、共用同一个连接的多个JMSContext对象。

为了简化应用代码,JMSContext对象的方法都抛出不受检查的异常(unchecked exceptions)代替受检查的异常(checked exceptions)。