独立于提供者的独立 JMS 应用程序

Stand-alone JMS application that is provider-independent

在 J2EE 容器中 运行 的应用程序可以使用 JMS 而无需了解底层 JMS 实现(例如,如果它使用的是 Solace,则可以改用 MQ,只需更改配置)。但是独立的应用程序,即不 运行 在 J2EE 容器中的应用程序呢?如何使其独立于 JMS 提供者?如果那是不可能的,你能做到多近?

您可以获得 100% 可移植的独立 JMS 应用程序,而您基本上不需要额外的工作如果您要切换的 JMS 提供程序也提供 JNDI 实现。 JMS 规范不需要 JNDI,但它建立了 JNDI 用于定位管理对象(如连接工厂和目的地)的约定,因此 JMS 提供者也提供 JNDI 实现是很常见的。

简而言之,您的应用程序可以简单地使用 JMS 和 JNDI APIs。 JMS 和 JNDI 实现细节可以隔离到放置在应用程序类路径中的 jndi.properties 文件中。在提供程序之间切换就像更改此属性文件和更改类路径上的 jars 一样简单。

如果您要在 之间切换的 JMS 提供程序 不提供 JNDI 实现,那么您将必须使用特定于实现的代码来创建连接工厂和目标。当然,这会损害可移植性,但您应该能够创建自己的 API 以将这些详细信息隔离到 类,您可以自己切换。