两个JMS提供程序必须持有彼此的上下文类才能通信吗?

两个JMS提供程序必须持有彼此的上下文类才能通信吗?,jms,weblogic,Jms,Weblogic,我们将从一个实际的例子开始,然后返回概念问题 我使用Weblogic(10.3)作为我的应用服务器。我希望我的应用程序具有JMS功能,并决定让它使用JMS/MOM提供的Weblogic。我在Weblogic中设置了一个队列,并在代码中创建了一个MDB类 现在我想向Weblgic队列发送一条消息。我使用了openJMS客户端。它要求我在其类路径中包含weblogic jar文件,以便向weblogic发送消息 同样,当我设置Weblogic向openJMS队列发送消息时——我使用了外部目的地——它

我们将从一个实际的例子开始,然后返回概念问题

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

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

同样,当我设置Weblogic向openJMS队列发送消息时——我使用了外部目的地——它抛出了类not found exception,直到我将openJMS JAR放入Weblogic类路径

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

我的问题是:这有意义吗?JMS不应该是某种中立的通信协议吗?这意味着我无法决定在运行时发送给哪个JMS提供程序,因为我的类路径中没有它的上下文类

还是我只是错过了一些设置

是否有其他方法将连接工厂预处理到远程提供程序

JMS不应该是某种中立的通信协议吗

好问题。答案是:事实并非如此。JMS只是定义如何连接和向队列/主题发送消息的API。它不是一个协议,所以JMS提供程序实现可以自由使用自己的内部消息格式——这就是为什么需要导入提供程序的JAR。此外,您也不能期望提供者A能够与提供者B交换消息,除非两个提供者都明确给出这种可能性

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

JMS不应该是某种中立的通信协议吗

好问题。答案是:事实并非如此。JMS只是定义如何连接和向队列/主题发送消息的API。它不是一个协议,所以JMS提供程序实现可以自由使用自己的内部消息格式——这就是为什么需要导入提供程序的JAR。此外,您也不能期望提供者A能够与提供者B交换消息,除非两个提供者都明确给出这种可能性


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

最后是一个连贯的答案。谢谢需要澄清的是,MQ跨平台是因为其他JMS提供商不需要导入其自由库,还是因为它对所有平台都有自由库?很抱歉延迟。我在寻找这方面的支持例子。现在我投票了。你能澄清一下(或者指出正确的方向)-MQ是跨平台的,是因为其他JMS提供商不需要导入其自由库,还是因为它为所有平台提供自由库?@OmegaZiv没问题,我有时会向新用户指出,我没有时间紧迫:)所谓“跨平台”,我的意思是不限于JMS,但也不限于Java。WebSphere MQ和Apache QPID都有不同的OSE和语言库,例如java、C++、Python、Ruby甚至COBOL。因为它们遵循一个协议,所以来自不同体系结构的应用程序可以相互理解。最后给出一个一致的答案。谢谢需要澄清的是,MQ跨平台是因为其他JMS提供商不需要导入其自由库,还是因为它对所有平台都有自由库?很抱歉延迟。我在寻找这方面的支持例子。现在我投票了。你能澄清一下(或者指出正确的方向)-MQ是跨平台的,是因为其他JMS提供商不需要导入其自由库,还是因为它为所有平台提供自由库?@OmegaZiv没问题,我有时会向新用户指出,我没有时间紧迫:)所谓“跨平台”,我的意思是不限于JMS,但也不限于Java。WebSphere MQ和Apache QPID都有不同的OSE和语言库,例如java、C++、Python、Ruby甚至COBOL。因为它们遵循一个协议,所以来自不同体系结构的应用程序相互理解。