<!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="http://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;">
    getting "Message to JBossTopic ... not processed"
</h3>
<span style="margin-bottom: 10px;">
    reply from <a href="http://community.jboss.org/people/ranjix">ranjix</a> in <i>JBoss Messaging</i> - <a href="http://community.jboss.org/message/555912#555912">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><p>Ok, after a week of digging, I finally think I understand what's going on and I hacked something to fix the issue.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Short version, IMO is a bug in how JBoss shares JMS messages objects between subscribers on a topic. </p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Long version: </p><p>I have several apps, with MDBs, which subscribe to the same topic. The apps run in the same server (JVM), but obviously each in its own app classloader (the MDBs, when called, have as classloaders the EAR app classloader). This is good. The JMS message object type which I get in the onMessage implementation is <em>org.jboss.jms.message.BytesMessageProxy</em> (the message was supposed to be a BytesMessage). I get different instances of <em>BytesMessageProxy</em> in the different MDBs. This is ok. Here comes the bad part. The <em>MessageProxy</em> (<em>BytesMessageProxy</em> extends this) contains a field <em>message</em> which is a <em>JBossMessage.</em> The bad part is that each of the different instances of proxy class contains same JBossMessage object. So, now, my MDBs start reading from the proxy, which in turn read from the <em>JBossMessage</em>. Since I have a quad core, the reading is pretty fast, and the "second" MDB starts reading before the first finished reading and resetting the message. This makes the second MDB make a read after the end of the <em>payloadByteArray</em> (which is a byte array containing the <em>BytesMessage</em>), which results in a <em>MessageEOFException</em> thrown from line 169 in method <em>readByte</em> in <em>JBossBytesMessage</em> class.</p><p>So, in conclusion, IMO sharing the same JBossMessage object between the subscribers will ALWAYS be a problem. </p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>My hack. In my <em>onMessage</em> method, I can't really put a synchronization block depending on the BytesMessageProxy (since is a new instance for each MDB <em>onMessage</em> call). But I don't have access to the contained shared <em>JBossMessage</em> object, so I put a synchronization block depending on <em>BytesMessageProxy.getJMSMessageID</em> object, which is the string representing the message's id. Since the <em>JBossMessage</em> shared has only one ID, then my readings will wait for the lock on the ID. This, at least, fixed my issues. Not happy at all with the implementation, if someone on JBoss JMS team reads this, please consider it for a possible bug. </p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>thanks/ranjix</p></div>

<div style="background-color: #f4f4f4; padding: 10px; margin-top: 20px;">
    <p style="margin: 0;">Reply to this message by <a href="http://community.jboss.org/message/555912#555912">going to Community</a></p>
        <p style="margin: 0;">Start a new discussion in JBoss Messaging at <a href="http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2042">Community</a></p>
</div></td>
                        </tr>
                    </tbody>
                </table>


                </td>
            </tr>
        </tbody>
    </table>

</div>

</body>
</html>