我正在尝试在两台服务器之间配置jms设置。发件人位于(服务器A)jboss 5上,接收者位于(服务器B)jboss 4(正在使用来自服务器A的远程队列。
当我尝试同时在jboss 5或jboss 4上运行时,它可以工作。但是,当接收者在jboss 4上并且发送者在jboss 5上时,它将抛出Exception以下的异常。
原因:java.lang.ClassNotFoundException:找不到以下对象的ClassLoader:org.jboss.jms.client.JBossConnectionFactory(没有安全管理器:禁用了RMI类加载器)
异常跟踪:
javax.naming.CommunicationException [Root exception is java.lang.ClassNotFoundException: No ClassLoaders found for: org.jboss.jms.client.JBossConnectionFactory (no security manager: RMI class loader disabled)]
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:728)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:587)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at org.jboss.ejb.plugins.jms.DLQHandler.createService(DLQHandler.java:182)
at org.jboss.system.ServiceMBeanSupport.jbossInternalCreate(ServiceMBeanSupport.java:260)
at org.jboss.system.ServiceMBeanSupport.create(ServiceMBeanSupport.java:188)
at org.jboss.ejb.plugins.jms.JMSContainerInvoker.innerStartDelivery(JMSContainerInvoker.java:510)
at org.jboss.ejb.plugins.jms.JMSContainerInvoker$ExceptionListenerImpl$ExceptionListenerRunnable.run(JMSContainerInvoker.java:1419)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.ClassNotFoundException: No ClassLoaders found for: org.jboss.jms.client.JBossConnectionFactory (no security manager: RMI class loader disabled)
at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:375)
at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:165)
at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:620)
at org.jboss.system.JBossRMIClassLoader.loadClass(JBossRMIClassLoader.java:91)
at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:247)
at sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:197)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1575)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at java.rmi.MarshalledObject.get(MarshalledObject.java:142)
at org.jnp.interfaces.MarshalledValuePair.get(MarshalledValuePair.java:72)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:652)
... 8 more
我在下面找到了一个链接,该链接似乎与我所面临的问题相似,但无法准确地将我的客户端库从哪台服务器放到哪台服务器上? https://access.redhat.com/solutions/45133
更多详细信息:-
就我而言,jboss 4.0.4和jboss 5.1.0都托管着不同队列的消息。 -jboss 5托管消息,监听器在QueueA的jboss4上。 -jboss 4托管消息,而监听器在QueueB的jboss 5上。
我们要实现的目标:-服务器A上的Jboss 4应该与在服务器B上的jboss 5上配置的RemoteQueues通信,该队列不起作用并且抛出Exception以上。两台服务器之间未发生通信。
答案 0 :(得分:0)
最重要的是,JBoss 4.x使用JBossMQ作为JMS实现,而JBoss 5.x使用JBoss Messaging作为JMS实现。两者不直接兼容,因此您需要确定哪个服务器将托管消息。
如果您希望JBoss 5服务器托管消息,则所有客户端(包括在JBoss 4上运行的客户端)都需要使用JBoss Messaging客户端库。
如果您希望JBoss 4服务器托管消息,则所有客户端(包括在JBoss 5上运行的客户端)都需要使用JBossMQ客户端库。
如果您同时在JBoss 4和JBoss 5服务器上托管消息,则每个客户端都需要使用与其对应的代理使用相应的客户端库。