通用JMS客户端

Dam*_*amo 5 java jms

有谁知道编写通用JMS客户端是否可行- 即.与不同提供商的JMS合作的一个(例如Sonic,IBM SIB,Jboss等)?

每次我编写JMS客户端代码时,它总是非常特定于实现,具有依赖的JAR和Context类.

谢谢.

Pas*_*ent 9

好吧,一个最佳实践(至少对我而言)是使用非arg InitialContext构造函数并将提供者特定的东西(如初始上下文工厂和提供者url)jndi.properties放在类路径上的文件中,而不是硬编码这些东西.您还需要将"正确的"JMS提供程序JAR放在类路径上.换句话说,您可以拥有通用代码,但仍需要配置运行时环境(除非您在像Spring这样的容器中运行客户端代码).


Mik*_*uka 6

已经有2个好的答案,但我想补充一点解释.JMS是API标准,它没有为服务器定义有线协议.因此,所有JMS实现都有不同的有线协议 - 因此您始终需要特定于供应商的JAR.创建与所有JMS提供程序兼容的JMS客户端库是不可能的.
在源代码中,您应该避免特定于供应商的功能(例如,TIBCO EMS允许您使用非JNDI,本机名称访问目标,并且它具有自定义确认模式).如果始终使用JNDI查找,则只有JNDI URL和初始上下文工厂名称将特定于服务器类型.