<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body link="#355491" alink="#4262a1" vlink="#355491" style="background: #e2e2e2; margin: 0; padding: 20px;">
<div>
        <table cellpadding="0" bgcolor="#FFFFFF" border="0" cellspacing="0" style="border: 1px solid #dadada; margin-bottom: 30px; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                <tbody>
                        <tr>
                                <td>
                                        <table border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" style="border: solid 2px #ccc; background: #dadada; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                                                <tbody>
                                                        <tr>
                                                                <td bgcolor="#000000" valign="middle" height="58px" style="border-bottom: 1px solid #ccc; padding: 20px; -moz-border-radius-topleft: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 5px; -webkit-border-top-left-radius: 5px;">
                                                                        <h1 style="color: #333333; font: bold 22px Arial, Helvetica, sans-serif; margin: 0; display: block !important;">
                                                                        <!-- To have a header image/logo replace the name below with your img tag -->
                                                                        <!-- Email clients will render the images when the message is read so any image -->
                                                                        <!-- must be made available on a public server, so that all recipients can load the image. -->
                                                                        <a href="https://community.jboss.org/index.jspa" style="text-decoration: none; color: #E1E1E1">JBoss Community</a></h1>
                                                                </td>
                                                        </tr>
                                                        <tr>
                                                                <td bgcolor="#FFFFFF" style="font: normal 12px Arial, Helvetica, sans-serif; color:#333333; padding: 20px; -moz-border-radius-bottomleft: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 5px; -webkit-border-bottom-left-radius: 5px;"><h3 style="margin: 10px 0 5px; font-size: 17px; font-weight: normal;">
HornetQMessage ClassCastException during MDB onMessage method (AS 7.1.1 / Remote HornetQ 2.2.14)
</h3>
<span style="margin-bottom: 10px;">
created by <a href="https://community.jboss.org/people/deltafoxtrot">deltafoxtrot</a> in <i>JBoss AS 7 Development</i> - <a href="https://community.jboss.org/message/760147#760147">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">
<div class="jive-rendered-content"><p><span style="text-decoration: underline;"><strong>Synopsis</strong></span></p><p>Casting Message object passed to MDB onMessage method to HornetQMessage throws a ClassCastException (java.lang.ClassCastException: org.hornetq.jms.client.HornetQMessage cannot be cast to org.hornetq.jms.client.HornetQMessage - full stack below).  Web application pom references hornetq-core-client and hornetq-jms-client dependencies with version 2.2.13.Final (have tried all variations up to 2.2.21.Final).  Successfully send and receive message but apparently different versions of the underlying HornetQMessage implementation.  Any thoughts or suggestions would be much appreciated.<span style="text-decoration: underline;"><strong><br/></strong></span></p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p><span style="text-decoration: underline;"><strong>Environment</strong></span></p><ul><li>JBoss AS 7.1.1 (Brontes)</li><li>Remote HornetQ 2.2.14</li></ul><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p><span style="text-decoration: underline;"><strong>JBoss Configuration (<em>modified standalone.xml</em>)</strong></span></p><ul><li>Added org.jboss.as.messaging extension</li><li>Added mdb configuration in EJB subsystem to point to a resource adapter named "remote-hornetq-ra" (configured in messaging subsystem)</li><li>Added messaging subsystem based on standalone-full.xml (see below for snippet)</li></ul><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p><span style="text-decoration: underline;"><strong>Messaging Subsystem Configuration</strong></span></p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><pre class="jive-pre"><code class="jive-code"><subsystem xmlns="urn:jboss:domain:messaging:1.1">
          <hornetq-server>
                    <persistence-enabled>true</persistence-enabled>
                    <journal-file-size>102400</journal-file-size>
                    <journal-min-files>2</journal-min-files>
                    <connectors>
                              <connector name="remote-jmsxa">
                                        <factory-class>org.hornetq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
                                        <param key="host" value="localhost"/>
                                        <param key="port" value="5445"/>
                              </connector>
                              <netty-connector name="netty" socket-binding="messaging"/>
                              <netty-connector name="netty-throughput" socket-binding="messaging-throughput">
                                        <param key="batch-delay" value="50"/>
                              </netty-connector>
                              <in-vm-connector name="in-vm" server-id="0"/>
                    </connectors>
                    <acceptors>
                              <netty-acceptor name="netty" socket-binding="messaging"/>
                              <netty-acceptor name="netty-throughput" socket-binding="messaging-throughput">
                                        <param key="batch-delay" value="50"/>
                                        <param key="direct-deliver" value="false"/>
                              </netty-acceptor>
                              <in-vm-acceptor name="in-vm" server-id="0"/>
                    </acceptors>
                    <security-settings>
                              <security-setting match="#">
                                        <permission type="send" roles="guest"/>
                                        <permission type="consume" roles="guest"/>
                                        <permission type="createNonDurableQueue" roles="guest"/>
                                        <permission type="deleteNonDurableQueue" roles="guest"/>
                              </security-setting>
                    </security-settings>
                    <address-settings>
                              <address-setting match="#">
                                        <dead-letter-address>jms.queue.DLQ</dead-letter-address>
                                        <expiry-address>jms.queue.ExpiryQueue</expiry-address>
                                        <redelivery-delay>0</redelivery-delay>
                                        <max-size-bytes>10485760</max-size-bytes>
                                        <address-full-policy>BLOCK</address-full-policy>
                                        <message-counter-history-day-limit>10</message-counter-history-day-limit>
                              </address-setting>
                    </address-settings>
                    <jms-connection-factories>
                              <connection-factory name="InVmConnectionFactory">
                                        <connectors>
                                                  <connector-ref connector-name="in-vm"/>
                                        </connectors>
                                        <entries>
                                                  <entry name="java:/ConnectionFactory"/>
                                        </entries>
                              </connection-factory>
                              <connection-factory name="RemoteConnectionFactory">
                                        <connectors>
                                                  <connector-ref connector-name="netty"/>
                                        </connectors>
                                        <entries>
                                                  <entry name="RemoteConnectionFactory"/>
                                                  <entry name="java:jboss/exported/jms/RemoteConnectionFactory"/>
                                        </entries>
                              </connection-factory>
                              <pooled-connection-factory name="hornetq-ra">
                                        <transaction mode="xa"/>
                                        <connectors>
                                                  <connector-ref connector-name="in-vm"/>
                                        </connectors>
                                        <entries>
                                                  <entry name="java:/JmsXA"/>
                                        </entries>
                              </pooled-connection-factory>
                              <pooled-connection-factory name="remote-hornetq-ra">
                                        <transaction mode="xa"/>
                                        <connectors>
                                                  <connector-ref connector-name="remote-jmsxa"/>
                                        </connectors>
                                        <entries>
                                                  <entry name="java:/RemoteJmsXA"/>
                                        </entries>
                              </pooled-connection-factory>
                    </jms-connection-factories>
                    <jms-destinations>
                              <jms-queue name="testQueue">
                                        <entry name="queue/test"/>
                                        <entry name="java:jboss/exported/jms/queue/test"/>
                              </jms-queue>
                              <jms-topic name="testTopic">
                                        <entry name="topic/test"/>
                                        <entry name="java:jboss/exported/jms/topic/test"/>
                              </jms-topic>
                    </jms-destinations>
          </hornetq-server>
</subsystem>
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p><span style="text-decoration: underline;"><strong>MDB</strong></span> </p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><pre class="jive-pre"><code class="jive-code jive-java">@MessageDriven(name = <font color="red">"LiveMessageMDB"</font>, activationConfig = <font color="navy">{</font> @ActivationConfigProperty(propertyName = <font color="red">"destinationType"</font>, propertyValue = <font color="red">"javax.jms.Queue"</font>),
@ActivationConfigProperty(propertyName = <font color="red">"destination"</font>, propertyValue = <font color="red">"queue/appserver.data"</font>),
@ActivationConfigProperty(propertyName = <font color="red">"acknowledgeMode"</font>, propertyValue = <font color="red">"Auto-acknowledge"</font>) <font color="navy">}</font>)
@TransactionManagement(value = TransactionManagementType.CONTAINER)
@TransactionAttribute(value = TransactionAttributeType.REQUIRED)
<font color="navy"><b>public</b></font> <font color="navy"><b>class</b></font> LiveMessageMDB <font color="navy"><b>implements</b></font> MessageListener <font color="navy">{</font>
 
          @Override
          <font color="navy"><b>public</b></font> <font color="navy"><b>void</b></font> onMessage(Message message) <font color="navy">{</font>
                 <font color="navy"><b>try</b></font> <font color="navy">{</font>
                      HornetQMessage hornetQMessage = (HornetQMessage) message;
                     System.out.println(<font color="red">"successfully cast"</font>);
                 <font color="navy">}</font> <font color="navy"><b>catch</b></font> (Throwable t) <font color="navy">{</font>
                      t.printStackTrace();
                      <font color="navy"><b>return</b></font>;
                <font color="navy">}</font>
          <font color="navy">}</font>
<font color="navy">}</font>
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p><span style="text-decoration: underline;"><strong>Stacktrace</strong></span></p><p><span style="text-decoration: underline;"><strong><br/></strong></span></p><pre class="jive-pre"><code class="jive-code">13:16:26,699 ERROR [stderr] (Thread-32 (HornetQ-client-global-threads-1369568615))
java.lang.ClassCastException: org.hornetq.jms.client.HornetQMessage cannot be cast to org.hornetq.jms.client.HornetQMessage
at com.xyz.messaging.LiveMessageMDB.onMessage(LiveMessageMDB.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.jboss.as.ee.component.ManagedReferenceMethodInterceptorFactory$ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptorFactory.java:72)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:374)
at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.doMethodInterception(Jsr299BindingsInterceptor.java:127)
at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:135)
at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:36)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53)
at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:36)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
at org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:101)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
at org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:21)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
at org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:53)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
at org.jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:51)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInCallerTx(CMTTxInterceptor.java:202)
at org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:306)
at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:190)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
at org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:59)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
at org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:43)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
at org.jboss.as.ejb3.component.messagedriven.MessageDrivenComponentDescription$5$1.processInvocation(MessageDrivenComponentDescription.java:184)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
at org.jboss.as.ee.component.TCCLInterceptor.processInvocation(TCCLInterceptor.java:45)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
at org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:165)
at org.jboss.as.ee.component.ViewDescription$1.processInvocation(ViewDescription.java:173)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
at org.jboss.as.ee.component.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:72)
at javax.jms.MessageListener$$$view9.onMessage(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.jboss.as.ejb3.inflow.MessageEndpointInvocationHandler.doInvoke(MessageEndpointInvocationHandler.java:140)
at org.jboss.as.ejb3.inflow.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:73)
at $Proxy51.onMessage(Unknown Source)
at org.hornetq.ra.inflow.HornetQMessageHandler.onMessage(HornetQMessageHandler.java:278)
at org.hornetq.core.client.impl.ClientConsumerImpl.callOnMessage(ClientConsumerImpl.java:983)
at org.hornetq.core.client.impl.ClientConsumerImpl.access$400(ClientConsumerImpl.java:48)
at org.hornetq.core.client.impl.ClientConsumerImpl$Runner.run(ClientConsumerImpl.java:1113)
at org.hornetq.utils.OrderedExecutorFactory$OrderedExecutor$1.run(OrderedExecutorFactory.java:100)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
</code></pre></div>
<div style="background-color: #f4f4f4; padding: 10px; margin-top: 20px;">
<p style="margin: 0;">Reply to this message by <a href="https://community.jboss.org/message/760147#760147">going to Community</a></p>
        <p style="margin: 0;">Start a new discussion in JBoss AS 7 Development at <a href="https://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2225">Community</a></p>
</div></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>