通用JMS客户端

时间:2010-03-21 23:22:30

标签: java jms

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

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

感谢。

4 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:7)

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

答案 2 :(得分:4)

这是Spring的用途。您将具有特定于供应商的实现,但代码应该相同。请参阅19.6 JMS21. JMS (Java Message Service)Spring 3.0 Reference

答案 3 :(得分:4)

对于将来寻找通用客户端的任何人,请尝试为主要JMS提供程序(ActiveMQ,WebSphere MQ等)插件附带的HermesJMS

相关问题