java.lang.ClassNotFoundException:找不到ClassLoaders:> org.jboss.jms.client.JBossConnectionFactory

问题描述 投票:0回答:1

我正在尝试在两台服务器之间配置jms设置。发送者在(服务器A)jboss 5上,接收者在(服务器B)jboss 4上(使用来自服务器A的远程队列)。

当我尝试在jboss 5或jboss 4上运行时,它都有效。但是当接收器在jboss 4上并且发送器在jboss 5上时,它会抛出异常。

引发者:java.lang.ClassNotFoundException:找不到ClassLoaders: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

我发现下面的链接看起来类似于我面临的问题,但无法准确地从哪个服务器到哪个服务器我需要在war文件下拥有客户端库? https://access.redhat.com/solutions/45133

更多细节:-

在我的案例中,jboss 4.0.4和jboss 5.1.0都托管不同队列的消息。 - jboss 5正在托管该消息,而侦听器在jboss4上用于QueueA。 - jboss 4正在托管该消息,并且侦听器在jboss 5上用于QueueB。

我们想要实现的目标: - 服务器A上的Jboss 4应该与在服务器B上的jboss 5上配置的RemoteQueues进行通信,这不能正常工作并抛出异常。两台服务器之间没有进行通信。

rmi jboss5.x jboss-4.0.x jboss-messaging jbossmq
1个回答
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服务器上托管消息,那么每个服务器的客户端都需要使用相应的客户端库来处理他们使用的任何代理。

© www.soinside.com 2019 - 2024. All rights reserved.