<!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: Remote Client.addCallbackListener hang
</h3>
<span style="margin-bottom: 10px;">
created by <a href="http://community.jboss.org/people/ron_sigal">Ron Sigal</a> in <i>JBoss Remoting</i> - <a href="http://community.jboss.org/message/601555#601555">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">
<div class="jive-rendered-content"><p>Hi David,</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>I think you're on the right track.  BisocketClientInvoker.handleConnect() is waiting for a socket to use for the "control" connection.  In fact, it should already be there in the sockets Set.  When JBossMessaging sets up a connection, it calls org.jboss.remoting.Client.addListener(), which results in a call to BisocketClientInvoker.transport():</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>   protected Object transport(String sessionId, Object invocation, Map metadata,</p><p>                              Marshaller marshaller, UnMarshaller unmarshaller)</p><p>   throws IOException, ConnectionFailedException, ClassNotFoundException</p><p>   {</p><p>      String listenerId = null;</p><p>      if (invocation instanceof InvocationRequest)</p><p>      {</p><p>         InvocationRequest ir = (InvocationRequest) invocation;</p><p>         Object o = ir.getParameter();</p><p>         if (o instanceof InternalInvocation)</p><p>         {</p><p>            InternalInvocation ii = (InternalInvocation) o;</p><p>            if (InternalInvocation.ADDLISTENER.equals(ii.getMethodName())</p><p>                && ir.getLocator() != null) // getLocator() == null for pull callbacks</p><p>            {</p><p>               Map requestPayload = ir.getRequestPayload();</p><p>               listenerId = (String) requestPayload.get(Client.LISTENER_ID_KEY);</p><p>               listenerIdToClientInvokerMap.put(listenerId, this);</p><p>               BisocketServerInvoker callbackServerInvoker;</p><p>               callbackServerInvoker = BisocketServerInvoker.getBisocketServerInvoker(listenerId);</p><p>               callbackServerInvoker.createControlConnection(listenerId, true);</p><p>            }</p><p>            </p><p>            // Rather than handle the REMOVELISTENER case symmetrically, it is</p><p>            // handled when a REMOVECLIENTLISTENER message is received by</p><p>            // BisocketServerInvoker.handleInternalInvocation().  The reason is that</p><p>            // if the Client executes removeListener() with disconnectTimeout == 0, </p><p>            // no REMOVELISTENER message will be sent.</p><p>         }</p><p>      }</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>      return super.transport(sessionId, invocation, metadata, marshaller, unmarshaller);</p><p>   }</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>In particular, the call to callbackServerInvoker.createControlConnection() creates the socket on the client side whose counterpart on the server side should land in the sockets Set.  For some reason, that isn't happening.  If you can nail that down, then you've got it.  </p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>Thank you for letting me know about this issue.  Please let me know how your detective work goes, and let me know if you have any questions.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>-Ron</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/601555#601555">going to Community</a></p>
        <p style="margin: 0;">Start a new discussion in JBoss Remoting at <a href="http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2050">Community</a></p>
</div></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>