将远程 JMS 客户端连接到 GlassFish 3

Posted

技术标签:

【中文标题】将远程 JMS 客户端连接到 GlassFish 3【英文标题】:Connecting a remote JMS client to GlassFish 3 【发布时间】:2011-07-26 06:51:27 【问题描述】:

我正在尝试从独立的远程客户端连接到 GlassFish 3 的 JMS 服务。但是我得到一个 java.lang.ClassNotFoundException:com.sun.messaging.jms.ra.ResourceAdapter。有关如何解决此问题的任何想法?

这是我目前的设置:

本地模式下的 Glassfish 3 JMS 服务(我假设 EMBEDED 模式在这种情况下不起作用,因为它绕过了网络堆栈)

JNDI 属性指定如下:

java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory java.naming.factory.url.pkgs=com.sun.enterprise.naming java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl

gf-client-module.jar(在 GLASSFISH_HOME/modules 中)添加到独立应用程序的类路径中。还尝试添加模块目录中存在的其他 jar(例如 jms-core.jar),但仍然得到相同的 ClassNotFoundException。

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

好的。我找到了解决方案。有关详细信息,请参阅here,但简短的回答是我需要在类路径中添加两个 jar:imqjmsra.jar 和 imqbroker.jar。这些可以在名为 imqjmsra.rar 的 rar 中找到,可以在 glassfish 的 mq 目录下找到。我不得不从这个 rar 中提取两个罐子!

【讨论】:

此答案的链接断开。【参考方案2】:

这是 glassfish 3 客户端 jar 的完整列表:

auto-depends.jar
deployment-common.jar
glassfish-corba-internal-api.jar    
internal-api.jar
management-api.jar
bean-validator.jar
dol.jar
glassfish-corba-newtimer.jar        
javax.ejb.jar
orb-connector.jar
common-util.jar
ejb-container.jar
glassfish-corba-omgapi.jar      
javax.jms.jar
orb-iiop.jar
config-api.jar
ejb.security.jar
glassfish-corba-orb.jar
javax.resource.jar
security.jar
config-types.jar
glassfish-api.jar
glassfish-corba-orbgeneric.jar      
javax.servlet.jar
ssl-impl.jar
config.jar
glassfish-corba-asm.jar
glassfish-naming.jar
javax.transaction.jar
transaction-internal-api.jar
connectors-internal-api.jar     
glassfish-corba-codegen.jar     
gmbal.jar
jta.jar
container-common.jar
glassfish-corba-csiv2-idl.jar       
hk2-core.jar
kernel.jar

【讨论】:

【参考方案3】:

不要使用您可能需要的所有单个 Glassfish jar 文件(例如 gf-client-module.jar、imqjmsra.jar 和 imqbroker.jar),首选方法是使用 gf-client.jar文件。它可以在 $GLASSFISH_HOME/lib 中找到。

http://glassfish.java.net/javaee5/ejb/EJB_FAQ.html#StandaloneRemoteEJB 有更多信息。该文档涉及在独立客户端中使用 EJB,但使用 JMS 的解决方案是相同的。

【讨论】:

【参考方案4】:

正如 Ivan A Krizsan 的 EJB 认证说明中所述,根据 Glassfish 版本,这应该足够了:

GlassFish 3(还有 GlassFish 4,我刚刚测试过):$GLASSFISH_HOME/lib/gf-client.jar GlassFish 2:$GLASSFISH_HOME/lib/appserv-rt.jar 和 $APS_HOME/lib/javaee.jar

【讨论】:

以上是关于将远程 JMS 客户端连接到 GlassFish 3的主要内容,如果未能解决你的问题,请参考以下文章

从远程客户端使用 Glassfish JMS

将 JMS 客户端连接到 Apache Kafka

将 Java 客户端 (JMS) 连接到 IBM MQ 时出现问题

使用glassfish服务器的JMS客户端

Glassfish V3.x 和远程独立客户端

尝试远程连接到 Websphere 上的 JMS 队列时出现 sun/io/MalformedInputException