Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通用JMS客户端_Java_Jms - Fatal编程技术网

Java 通用JMS客户端

Java 通用JMS客户端,java,jms,Java,Jms,是否有人知道编写一个通用JMS客户机——即与来自不同提供商(如Sonic、IBM SIB、Jboss等)的JMS一起工作的客户机是否可行 每次我编写JMS客户机代码时,它总是非常特定于依赖JAR和上下文类的实现 谢谢。这就是我们的目的。您将有特定于供应商的实现,但代码应相同。请参阅和。好的,一个最佳实践(至少对我来说)是使用非参数,并将特定于提供程序的内容(如初始上下文工厂和提供程序url)放入类路径上的jndi.properties文件中,而不是硬编码这些内容。您还需要在类路径上放置“正确”的

是否有人知道编写一个通用JMS客户机——即与来自不同提供商(如Sonic、IBM SIB、Jboss等)的JMS一起工作的客户机是否可行

每次我编写JMS客户机代码时,它总是非常特定于依赖JAR和上下文类的实现

谢谢。

这就是我们的目的。您将有特定于供应商的实现,但代码应相同。请参阅和。

好的,一个最佳实践(至少对我来说)是使用非参数,并将特定于提供程序的内容(如初始上下文工厂和提供程序url)放入类路径上的
jndi.properties
文件中,而不是硬编码这些内容。您还需要在类路径上放置“正确”的JMS提供程序JAR。
换句话说,您可以使用泛型代码,但仍然需要配置运行时环境(除非您在Spring之类的容器中运行客户端代码)。

2个好答案,但我想补充一点说明。JMS是一种API标准,它不定义服务器的有线协议。因此,所有JMS实现都有不同的有线协议——因此您总是需要特定于供应商的JAR。不可能创建与所有JMS提供程序兼容的JMS客户端库。

在源代码中,您应该避免使用特定于供应商的功能(例如,TIBCO EMS允许您使用非JNDI、本机名称访问目的地,并且它具有自定义确认模式)。如果始终使用JNDI查找,则只有JNDI URL和初始上下文工厂名称特定于服务器类型。

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