<!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;">
    Re: SonicMQ RA in JBoss7 showing lots of IJ000612 warnings
</h3>
<span style="margin-bottom: 10px;">
    created by <a href="http://community.jboss.org/people/snazy">Robert Stupp</a> in <i>IronJacamar</i> - <a href="http://community.jboss.org/message/634631#634631">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><p>There are no hashCode/equals method implementations in any of the Sonic *Connection* classes mentioned in the log messages.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Only com.sonicsw.sonicmq.j2ee.jmsra.impl.XAResourceWrapper implements them (output from JAD):</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre><code>&#160;&#160;&#160; public boolean equals(Object obj)
&#160;&#160;&#160; {
&#160;&#160;&#160;&#160;&#160;&#160;&#160; if(this == obj)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return true;
&#160;&#160;&#160;&#160;&#160;&#160;&#160; if(obj == null)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return false;
&#160;&#160;&#160;&#160;&#160;&#160;&#160; if(obj instanceof XAResourceWrapper)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; {
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; XAResource xaresource = ((XAResourceWrapper)obj).m_res;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return m_res.equals(xaresource);
&#160;&#160;&#160;&#160;&#160;&#160;&#160; }
&#160;&#160;&#160;&#160;&#160;&#160;&#160; if(obj instanceof XAResource)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; {
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; XAResource xaresource1 = (XAResource)obj;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return m_res.equals(xaresource1);
&#160;&#160;&#160;&#160;&#160;&#160;&#160; } else
&#160;&#160;&#160;&#160;&#160;&#160;&#160; {
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return false;
&#160;&#160;&#160;&#160;&#160;&#160;&#160; }
&#160;&#160;&#160; }

&#160;&#160;&#160; public int hashCode()
&#160;&#160;&#160; {
&#160;&#160;&#160;&#160;&#160;&#160;&#160; return m_res.hashCode();
&#160;&#160;&#160; }
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>The matchmanagedConnections from SonicManagedConnectionFactory looks like this (JAD output):</p><pre><code>public ManagedConnection matchManagedConnections(Set set, Subject subject, ConnectionRequestInfo connectionrequestinfo)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; throws ResourceException
&#160;&#160;&#160; {
&#160;&#160;&#160;&#160;&#160;&#160;&#160; for(Iterator iterator = set.iterator(); iterator.hasNext();)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; {
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Object obj = iterator.next();
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if(obj instanceof JMSSessionManagedConnection)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; JMSSessionManagedConnection jmssessionmanagedconnection = (JMSSessionManagedConnection)obj;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if(!jmssessionmanagedconnection.isDestroyed() &amp;&amp; jmssessionmanagedconnection.isCRIEqual((JMSConnectionRequestInfo)connectionrequestinfo))
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; RAUtils.printDebug("FOUND MATCHING SESSION");
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return jmssessionmanagedconnection;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }
&#160;&#160;&#160;&#160;&#160;&#160;&#160; }

&#160;&#160;&#160;&#160;&#160;&#160;&#160; RAUtils.printDebug("DID NOT FIND MATCHING SESSION");
&#160;&#160;&#160;&#160;&#160;&#160;&#160; return null;
&#160;&#160;&#160; }
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>isCRIEqual delegates to the equals method in JMSConnectionRequestInfo (don't know, why they use a StringBuffer for hashCode implementation...):</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre><code>&#160;&#160;&#160; public boolean equals(Object obj)
&#160;&#160;&#160; {
&#160;&#160;&#160;&#160;&#160;&#160;&#160; if(obj instanceof JMSConnectionRequestInfo)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; {
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; JMSConnectionRequestInfo jmsconnectionrequestinfo = (JMSConnectionRequestInfo)obj;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if(jmsconnectionrequestinfo.m_type == m_type &amp;&amp; jmsconnectionrequestinfo.m_isXA == m_isXA &amp;&amp; jmsconnectionrequestinfo.m_isTransacted == m_isTransacted &amp;&amp; jmsconnectionrequestinfo.m_ackMode == m_ackMode &amp;&amp; jmsconnectionrequestinfo.m_connectionID == m_connectionID &amp;&amp; jmsconnectionrequestinfo.m_poolSessions == m_poolSessions &amp;&amp; jmsconnectionrequestinfo.m_preserveSessionsMidTxn == m_preserveSessionsMidTxn)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return true;
&#160;&#160;&#160;&#160;&#160;&#160;&#160; }
&#160;&#160;&#160;&#160;&#160;&#160;&#160; return false;
&#160;&#160;&#160; }

&#160;&#160;&#160; public int hashCode()
&#160;&#160;&#160; {
&#160;&#160;&#160;&#160;&#160;&#160;&#160; StringBuffer stringbuffer = new StringBuffer();
&#160;&#160;&#160;&#160;&#160;&#160;&#160; stringbuffer.append(m_isXA);
&#160;&#160;&#160;&#160;&#160;&#160;&#160; stringbuffer.append(m_isTransacted);
&#160;&#160;&#160;&#160;&#160;&#160;&#160; stringbuffer.append(m_ackMode);
&#160;&#160;&#160;&#160;&#160;&#160;&#160; stringbuffer.append(m_connectionID);
&#160;&#160;&#160;&#160;&#160;&#160;&#160; stringbuffer.append(m_poolSessions);
&#160;&#160;&#160;&#160;&#160;&#160;&#160; stringbuffer.append(m_preserveSessionsMidTxn);
&#160;&#160;&#160;&#160;&#160;&#160;&#160; return stringbuffer.toString().hashCode();
&#160;&#160;&#160; }
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Can you explain, why and where equals and hashCode implementations are mandatory. Maybe it is possible to write wrapper classes for them (I know, that this is sick, but it might work).</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>The same warning messages occur with IronJacamar 1.1.0.Alpha3 with latest AS7 code.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>The validator says:</p><pre><code>Severity: ERROR
Section: 19.4.2
Description: A ResourceAdapter must implement a "public int hashCode()" method.
Code: com.sonicsw.sonicmq.j2ee.jmsra.impl.sonic.SonicResourceAdapter

Severity: ERROR
Section: 19.4.2
Description: A ResourceAdapter must implement a "public boolean equals(Object)" method.
Code: com.sonicsw.sonicmq.j2ee.jmsra.impl.sonic.SonicResourceAdapter
</code></pre></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/634631#634631">going to Community</a></p>
        <p style="margin: 0;">Start a new discussion in IronJacamar at <a href="http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2098">Community</a></p>
</div></td>
                        </tr>
                    </tbody>
                </table>


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

</div>

</body>
</html>