HornetQ can't resolve class of ObjectMessage payload.
kjh21 Apr 10, 2011 10:21 AMFollowing is my environment
JBossAS [6.0.0.Final "Neo"]
HornetQ Server version 2.1.2.Final (Colmeia, 120)
I'm getting the same error described here
http://community.jboss.org/message/517604#517604
and here
http://community.jboss.org/thread/162024
Specifically, HornetQ is unable to resolve the class of an object that serves as the payload of an ObjectMessage.
The exception and stack trace are as follows:
477 SEVERE [toplevel.services.push.ProxyMessageListener] Caught Exception processing incoming message: javax.jms.JMSException: toplevel.services.heartbeat.Heartbeat
01:18:36,477 ERROR [STDERR] javax.jms.JMSException: toplevel.services.heartbeat.Heartbeat
01:18:36,477 ERROR [STDERR] at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
01:18:36,477 ERROR [STDERR] at java.security.AccessController.doPrivileged(Native Method)
01:18:36,477 ERROR [STDERR] at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
01:18:36,477 ERROR [STDERR] at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
01:18:36,493 ERROR [STDERR] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
01:18:36,493 ERROR [STDERR] at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
01:18:36,493 ERROR [STDERR] at java.lang.Class.forName0(Native Method)
01:18:36,493 ERROR [STDERR] at java.lang.Class.forName(Class.java:247)
01:18:36,493 ERROR [STDERR] at org.jboss.classloader.spi.base.BaseClassLoaderDomain.loadClass(BaseClassLoaderDomain.java:284)
01:18:36,493 ERROR [STDERR] at org.jboss.classloader.spi.base.BaseClassLoaderDomain.loadClass(BaseClassLoaderDomain.java:1152)
01:18:36,493 ERROR [STDERR] at org.jboss.classloader.spi.base.BaseClassLoader.loadClassFromDomain(BaseClassLoader.java:886)
01:18:36,493 ERROR [STDERR] at org.jboss.classloader.spi.base.BaseClassLoader.doLoadClass(BaseClassLoader.java:505)
01:18:36,493 ERROR [STDERR] at org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:450)
01:18:36,493 ERROR [STDERR] at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
01:18:36,493 ERROR [STDERR] at java.lang.Class.forName0(Native Method)
01:18:36,493 ERROR [STDERR] at java.lang.Class.forName(Class.java:247)
01:18:36,493 ERROR [STDERR] at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:603)
01:18:36,493 ERROR [STDERR] at org.hornetq.utils.ObjectInputStreamWithClassLoader.resolveClass(ObjectInputStreamWithClassLoader.java:69)
01:18:36,493 ERROR [STDERR] at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1574)
01:18:36,493 ERROR [STDERR] at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1495)
01:18:36,493 ERROR [STDERR] at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1731)
01:18:36,493 ERROR [STDERR] at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
01:18:36,493 ERROR [STDERR] at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
01:18:36,493 ERROR [STDERR] at org.hornetq.jms.client.HornetQObjectMessage.getObject(HornetQObjectMessage.java:158)
01:18:36,493 ERROR [STDERR] at gov.dhs.st.bordernet.services.push.ProxyMessageListener.onMessage(ProxyMessageListener.java:71)
01:18:36,493 ERROR [STDERR] at org.hornetq.jms.client.JMSMessageListenerWrapper.onMessage(JMSMessageListenerWrapper.java:91)
01:18:36,493 ERROR [STDERR] at org.hornetq.core.client.impl.ClientConsumerImpl.callOnMessage(ClientConsumerImpl.java:822)
01:18:36,493 ERROR [STDERR] at org.hornetq.core.client.impl.ClientConsumerImpl.access$100(ClientConsumerImpl.java:46)
01:18:36,493 ERROR [STDERR] at org.hornetq.core.client.impl.ClientConsumerImpl$Runner.run(ClientConsumerImpl.java:940)
01:18:36,493 ERROR [STDERR] at org.hornetq.utils.OrderedExecutorFactory$OrderedExecutor$1.run(OrderedExecutorFactory.java:100)
01:18:36,493 ERROR [STDERR] at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
01:18:36,493 ERROR [STDERR] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
01:18:36,493 ERROR [STDERR] at java.lang.Thread.run(Thread.java:662)
HornetQ is able to resolve the class of an ObjectMessage when my receiving client is an MDB but not when it is a client MessageListener that I have deployed as part of a JBoss system service.
Following is a representative view of the package structure of my deployment
my.ear
|
|
|--------> payload-objects.jar
| |
| |--------> class(es) used as payload of ObjectMessage located here (and below.)
|
|--------> my-ejb.jar
| |
| |--------> my-service.xml
| |
| |--------> toplevel
| | |
| | |--------> mdb
| | | |
| | | |--------> MDB's located here (and below.) HornetQ references to classes in payload-objects.jar resolve fine.
| | |
| | |--------> services
| | |
| | |--------> Other MessageListeners located here (and below.) HornetQ references to classes in payload-objects.jar fail!
|
|--------> my-war.war
|
|--------> WEB-INF
|
|--------> classes
| |
| |--------> no HornetQ MessageListeners here (or below) but other references to classes in payload-objects.jar here (and below) resolve fine.
|
|--------> lib
|
|--------> payload-objects.jar
Please advise.
Kevin H.