Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Invalid
-
4.7.0
-
None
-
None
Description
A Geronimo user ran into a problem receiving ObjectMessages. It looks like OpenEJB is not properly setting the ContextClassLoader when a message is delivered to an MDB.
In the user's case, the JMS connector is being deployed separately from the MDB. So, the connector classloader does not include jars included in the EAR deployment. When an ObjectMessage is delivered to the MDB, the connector classloader is the ContextClassLoader. It should be the MDB ClassLoader.
Here's the exception:
[java] 13:20:00,099 WARN [AppBrokerImpl] javax.jms.JMSException: Failed to build body from bytes. Reason: java.io.IOException: app.entity.QuartzJobIssued
[java] 13:20:00,099 ERROR [TokenBrokerImpl] JMSException processing JMS message.
[java] javax.jms.JMSException: Failed to build body from bytes. Reason: java.io.IOException: app.entity.QuartzJobIssued
[java] at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:33)
[java] at org.apache.activemq.command.ActiveMQObjectMessage.getObject(ActiveMQObjectMessage.java:172)
[java] at app.messaging.TokenBrokerImpl.onMessage(TokenBrokerImpl.java:105)
[java] at app.jms.AppThreadListener.onMessage(AppThreadListener.java:35)
[java] at org.apache.activemq.ActiveMQMessageConsumer.dispatch(ActiveMQMessageConsumer.java:854)
[java] at org.apache.activemq.ActiveMQSessionExecutor.dispatch(ActiveMQSessionExecutor.java:104)
[java] at org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:171)
[java] at org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:120)
[java] at org.apache.activemq.thread.PooledTaskRunner.access$100(PooledTaskRunner.java:26)
[java] at org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:47)
[java] at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
[java] at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
[java] at java.lang.Thread.run(Thread.java:619)
[java] Caused by: java.io.IOException: app.entity.QuartzJobIssued
[java] at org.apache.activemq.command.ActiveMQObjectMessage.getObject(ActiveMQObjectMessage.java:168)
[java] ... 11 more