请问是否有可能编写一个通用的JMS客户端 - 即可以使用不同供应商(如Sonic,IBM SIB,Jboss等)提供的JMS?
每次我编写JMS客户端代码时,都是非常具体实现的,并且依赖于特定的JAR和上下文类。
谢谢。
对我来说,至少一种最佳实践是使用非参数InitialContext
构造函数,并将提供程序特定的内容(例如初始上下文工厂和提供商URL)放入类路径中的jndi.properties
文件中,而不是硬编码这些内容。您还需要将“正确”的JMS提供程序JAR文件放在类路径上。
换句话说,您可以拥有通用代码,但仍然需要配置运行时环境(除非您在像Spring这样的容器中运行客户端代码)。
已经有两个好的答案了,但是我想再添加一点解释。JMS是一个API标准,它并没有定义到服务器的传输协议。因此所有的JMS实现都有不同的传输协议 - 因此你总是需要厂商特定的JAR文件。创建一个与所有JMS提供者兼容的JMS客户端库是不可能的。
在你的源代码中,你应该避免使用厂商特定的功能(例如TIBCO EMS允许你使用非JNDI本地名称访问目标,并且它具有自定义确认模式)。如果你总是使用JNDI查找,那么只有JNDI URL和初始上下文工厂名称会特定于服务器类型。