我们将从一个脚踏实地的例子开始,然后返回概念问题。
我使用Weblogic (10.3)作为我的应用服务器。我希望我的应用程序具有JMS功能,并决定让它使用Weblogic作为JMS / MOM提供的工具。我在Weblogic中设置了一个队列,并在代码中创建了一个MDB类。
现在我想向Weblgic队列发送一条消息。我使用了openJMS客户端。它要求我将weblogic文件包含在其类路径中,以便向weblogic发送消息。
同样,当我设置Weblogic将消息发送到openJMS队列时--我使用了Foreign -它在将openJMS jars放入weblogic之前抛出类而不是找到异常。
这是因为我看到的所有JMS通信示例都使用JNDI上下文来获取连接工厂。
我的问题是:说得通吗?JMS不应该是某种中立的通信协议吗?这意味着我无法决定在运行时向哪个JMS提供程序发送,因为我的类路径中不会包含它的上下文类。
还是我只是错过了什么?
是否有另一种方法来预置连接工厂到远程提供程序?
发布于 2011-11-24 13:45:40
JMS不应该是某种中立的通信协议吗?
问得好。答案是:不是。JMS只是定义了如何将消息连接和发送到队列/主题的API。它不是一个协议,所以JMS提供程序实现可以自由地使用它们自己的内部消息格式--这就是为什么您需要导入提供者的jars。而且,您也不能期望提供者A能够与提供者B交换消息,除非两个提供程序都明确地提供了这种可能性。
一个开放的、跨平台的消息通信协议是AMQP。还有其他商业解决方案,例如IBM。
https://stackoverflow.com/questions/8247956
复制相似问题