问 什么是 Java 消息服务?
答: Java 消息服务(Java Message ServiceJMS) API 是一个用于访问企业消息传递系统的 API是 Java Platform Enterprise(JEE)的一部分
Java 消息服务使得编写那些需要异步发送及接收重要业务数据和事件的业务应用变得容易Java 消息服务定义了一个公共的企业消息传递 API该 API 设计来被大范围的企业消息传递产品容易而有效地支持Java 消息服务不仅支持消息队列还支持消息传递的发布/订阅模式
问 Java 消息服务是另一种邮件 API 吗?
答: 不是术语消息传递在计算机领域的定义很广它被用来描述不同的操作系统概念用于描述电子邮件和传真系统如果使用了 JMS API它被用来描述企业应用之间的异步通信
JMS 消息是指由企业应用(而不是人)消费的异步请求报告或事件它们包含了协同这些系统所需的重要信息包含了描述特定业务活动的精确格式化的数据通过这些消息的交换每个应用可以跟蹤企业的进展
问 Java 消息服务是一种产品吗?
答: 不是Java 消息服务是一个用于企业消息传递的公共 API 的规范使用它需要一个由企业消息传递供应商提供的 JMS 提供者
问 可从哪里获得 Java 消息服务规范?
答: Java 消息服务 规范可从 处获得在线的 JMS API 文档也可在这个链接地址中找到
问 Java 消息服务有何引人注目的?
答: Java 消息服务引人注目的原因是它是第一个得到广泛行业支持的企业消息传递 API通过提供适应广泛企业消息传递系统的标准消息传递概念和约定它简化了企业应用的开发它利用现有的经过企业验证的消息传递系统
问 开发人员为何应该使用 Java 消息服务?
答: 因为 Java 消息服务能使下面的工作变得简单编写可移植的基于消息的业务应用通过加入新的能够与现有非 JMS 客户端完全协作的 JMS 客户端以扩展现有的基于消息的应用
问 为了学习使用 Java 消息服务程序员需要具备什么?
答: 基于消息的应用和基于远程过程调用的应用是根本不同的一旦开发人员理解了如何最好地使用这两个技术 JMS API 就使得编写基于消息的应用跟学习几个附加接口一样容易
问 Java 消息服务和企业 JavaBeans 组件有何关系?
答: 自从 JEE 版本发布以来企业 JavaBeans 组件已经能够使用 JMS API 来同步地发送和接收企业消息JEE 版本现在已可获得它提供了一种新的允许企业应用异步地接收消息的企业 Bean即消息驱动 Bean
问 Java 消息服务 API 与 Java 命名和目录接口(JNDI) API 之间有何关系?
答: 跟其他 Java 企业 API 一样JMS API 使用 JNDI API 来进行管理JMS API 将 ConnectionFactories 和 Destinations 定义为被管理对象它们被配置并放入到 JNDI 命名的上下文中然后 JMS 客户端查找和使用这些预先配置好的对象这样保证了 JMS 应用易于部署和管理
问 Java 消息服务 API 与 Java 数据库连接(JDBC)API 之间有何关系?
答: JMS 客户端或许也使用 JDBC API在同一个事务中它们可能既使用 JMS API 也使用 JDBC API大多数情况下通过把这些客户端实现为企业 BeanJMS 客户端可自动完成JMS 客户端可能也使用 Java 事务 API
问 Java 消息服务与 Java 事务 API 及 Java 事务服务之间有何关系?
答: Java 事务 API (Java Transaction APIJTA) 提供了一个用于划分分布式事务的客户端 API以及一个用于访问资源以能够参与分布式事务的 APIJMS 客户端可能使用 JTA 来划分分布式事务JMS 提供者通过 JTA 可以自如地支持分布式事务
Java 事务服务 (Java Transaction ServiceJTS) 能和JMS API一道用来形成分布式的事务该事务结合了消息收发与数据库更新以及其他 JTS 能识别的服务当 JMS 客户端在应用服务器(比如 JEE 服务器)中运行时这些服务应该被自动处理可是 也有可能需要 JMS 客户端去明确编写它们
问 在哪里可以找到 JMS API 讨论组?
在 处可找到一个 JMS API 论坛要加入这个论坛您必须是 Java Developer Connection 的成员
问 为什么 JMS API 发展成为一种在企业内部组件间提供通信的技术而不是用于在企业间通过 Internet 进行企业-企业(BB)的通信?
答: 提供基于 Internet 的 JMS API 消息传递的主要问题是JMS API 供应商们必须使用一种共同的通信格式并且 JMS 规范必须指定一个路由器-路由器 API
BB 消息传递是一个重要的领域有它自己独特的要求该领域正被一些不断涌现的标准所占据比如电子商务 XML计划即 ebXML (参见 )SUN 公司在这一方面起到了积极的作用现在ebXML 计划定义了一个消息传递服务它支持通过Internet 的 XML 消息传递
当前的 ebXML 规范着重于通过使用多种传输协议比如 HTTPmail 和 FTP通过 Internet 提供终端间的点到点异步通信ebXML 还计划提供发布/订阅式的 XML 消息传递Sun 公司和它的合作伙伴正在定义一个新的 Java API for Messaging即 JAXM (参见 JSR # Java APIs for XML Messaging ) 它支持 ebXML 消息服务规范早先版本的 JAXM 可以从 Java Developer Connection 的 The M Project Early Access 处得到
总之 JMS API 是特意设计为在企业内部使用的而独立企业之间通过 Internet 进行的 XML 消息传递将得到 ebXML 计划和新的支持不同 ebXML 规范的 Java API(包括 JAXM)的支持
技术问题
问 JMS API 需要哪一种 JDK 版本?
答: JMS API 需要 JDK/JRE x 或者更高的版本
问 JMS API 是否提供了一个分布式 Java 事件模型的版本?
答: 一般来讲JMS API 可以被用作通知服务但是它没有定义 Java 事件的分布式版本一个实现分布式 Java 事件的可选方案是作为 JavaBeans 组件该组件通过 JMS API 透明地向事件产生 Bean 和事件监听 Bean 分布事件
问 为什么有两个各自分开的 JMS API 域即点到点和发布/订阅而不合为一个域呢?
答: 即使有许多类似之处提供独立的域仍然很重要这意味着厂商不必被强迫支持不属于他们的域内的设备客户端代码也更加轻便灵活因为产品更充分地支持一个域(相对于支持一个合并域中较少定义的子集而言)
问 为什么 JMS API 不指定一套 JavaBeans 组件?
答: JMS API 是一个低级的 API 就像其他低级的 Java API 一样 它无助于直接表现为 JavaBeans 组件
问 JMS API 如何与 CORBA 通知服务相结合?
答: 通知服务为 CORBA 事件服务增加了过滤功能传输保证语义持久性连接和事件网络的集结它从 CORBA 消息服务(该服务定义了异步 CORBA 方法调用)获得传输保证语义
Java 技术与 CORBA 很好的结合在一起它提供了 Java IDL 和 COS Naming 技术另外OMG 最近定义了 RMI over IIOP
预计大多数 Java 对 IIOP 的使用将通过 RMI预计大多数 Java 对 COS Naming 的使用将通过 JNDI API(Java 命名和目录服务)JMS API 是 Java 特定的 API它设计位于大范围现有和未来的面向消息中间件(Message Oriented MiddlewareMOM)系统的上层(正如 JNDI API位于现有命名和目录服务的上层一样)
问 为什么 JMS API 不提供端到端的同步消息传输和传输通知?
答: 作为一个实现可靠应用的机制一些消息传递系统提供到目的地的同步传输一些系统为客户端提供了不同形式的传输通知这样客户端就能检测出被删除或忽略的消息这不是由 JMS API 定义的模型
JMS API 消息传递通过一次并且只有一次的 PERSISTENT 消息传输语义来提供有保障的传输另外消息消费者可以通过使用 CLIENT_ACKNOWLEDGE 模式或事务会话来确保可靠的消息处理这样使用最小的同步实现了可靠的传输这是大多数厂商和开发者都喜欢的企业消息传递模型
JMS API 没有定义系统消息(如传输通知)的模式如果应用需要消息收到的确认回复可以定义一个应用级的确认消息
这些问题放到发布/订阅应用的上下文中考察将能更清楚地理解在这个上下文中同步传输和/或系统接收确认对于实现可靠的应用并不是一个有效的机制(因为按照定义生产者不会也不想负责端到端的消息传输)
问 为什么 JMS API 不提供群体发送(sendtolist)机制?
答: 当前JMS API 提供大量的消息传送选择但是消息在同一时刻只能发送到一个目的地
群体发送的好处是程序员只需做很少的工作并且还有 JMS 提供者对发送同样的消息到多个目的地的情况进行优化的潜力
群体发送机制不利的方面是目的列表在效果上是由客户端实现并维护的集合这将增加 JMS 客户端管理的复杂度
不使用提供群体发送机制的 JMS API而推荐提供者支持配置代表一个群体的目的这允许客户端通过一次发送便可以到达所有的消费者同时保证群体被正确地管理
问 为什么 JMS API 不提供订阅通知?如果发布者