必须有2个JMS提供者保持彼此的上下文类进行通信吗?

时间:2011-11-23 19:27:31

标签: jms weblogic

我们将从一个脚踏实地的例子开始,然后返回连接问题。

我正在使用Weblogic(10.3)作为我的Application Server。我希望我的应用程序具有JMS功能,并决定让它使用Weblogic作为JMS / MOM提供。我在Weblogic中设置了一个Queue,并在我的代码中创建了一个MDB类。

现在我想向Weblgic队列发送消息。我使用openJMS客户端。它要求我在其类路径中包含weblogic jar文件,以便向weblogic发送消息。

同样,当我设置Weblogic将消息发送到openJMS队列时 - 我使用了外部目标 - 在我将openJMS jar放入weblogic类路径之前,它抛出了类未找到的异常。

这是因为我看到所有JMS通信示例都使用JNDI上下文来获取连接工厂。

我的问题是:这有意义吗? JMS不是假设是一些中立的通信协议吗?意思是我无法在运行时决定发送哪个JMS提供程序,因为我的类路径中不会有它的上下文类?

或者我只是错过了设置中的内容?

是否有其他方法可以将连接工厂预备到远程提供程序?

1 个答案:

答案 0 :(得分:1)

  

JMS不是假设是一些中立的通信协议吗?

好问题。答案是:事实并非如此。 JMS只是定义如何连接消息并将消息发送到队列/主题的API。它不是协议,因此JMS提供程序实现可以自由使用它们自己的内部消息格式 - 这就是您需要导入提供程序的jar的原因。此外,您不能指望提供商A能够与提供商B交换消息,除非两个提供商明确提供这种可能性。

开放的跨平台消息传递协议AMQP。还有其他商业解决方案,例如IBM Websphere MQ。