[jboss-cvs] JBossRemoting/src/main/org/jboss/remoting ...
Ron Sigal
ron_sigal at yahoo.com
Wed Nov 15 23:03:49 EST 2006
User: rsigal
Date: 06/11/15 23:03:49
Modified: src/main/org/jboss/remoting Client.java
Log:
JBREM-605: Callback acknowledgements can now return a response.
Revision Changes Path
1.55 +69 -9 JBossRemoting/src/main/org/jboss/remoting/Client.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: Client.java
===================================================================
RCS file: /cvsroot/jboss/JBossRemoting/src/main/org/jboss/remoting/Client.java,v
retrieving revision 1.54
retrieving revision 1.55
diff -u -b -r1.54 -r1.55
--- Client.java 9 Nov 2006 21:35:23 -0000 1.54
+++ Client.java 16 Nov 2006 04:03:49 -0000 1.55
@@ -63,7 +63,7 @@
*
* @author <a href="mailto:jhaynie at vocalocity.net">Jeff Haynie</a>
* @author <a href="mailto:telrod at e2technologies.net">Tom Elrod</a>
- * @version $Revision: 1.54 $
+ * @version $Revision: 1.55 $
*/
public class Client implements Externalizable
{
@@ -1203,14 +1203,45 @@
}
}
+ public int acknowledgeCallback(InvokerCallbackHandler callbackHandler, Callback callback)
+ throws Throwable
+ {
+ return acknowledgeCallback(callbackHandler, callback, null);
+ }
+
+ public int acknowledgeCallback(InvokerCallbackHandler callbackHandler, Callback callback, Object response)
+ throws Throwable
+ {
+ ArrayList callbacks = new ArrayList(1);
+ callbacks.add(callback);
+
+ ArrayList responses = null;
+ if (response != null)
+ {
+ responses = new ArrayList(1);
+ responses.add(response);
+ }
+
+ return acknowledgeCallbacks(callbackHandler, callbacks, responses);
+ }
+
public int acknowledgeCallbacks(InvokerCallbackHandler callbackHandler, List callbacks)
throws Throwable
{
+ return acknowledgeCallbacks(callbackHandler, callbacks, null);
+ }
+
+ public int acknowledgeCallbacks(InvokerCallbackHandler callbackHandler, List callbacks, List responses)
+ throws Throwable
+ {
if (callbackHandler == null)
throw new Exception("InvokerCallbackHandler parameter must not be null");
if (callbacks == null)
- throw new Exception("Callback ArrayList parameter must not be null");
+ throw new Exception("Callback List parameter must not be null");
+
+ if (responses != null && responses.size() != callbacks.size())
+ throw new Exception("Callback response list must be (1) null or (2) the same size as callback list");
if (callbacks.size() == 0)
return 0;
@@ -1218,10 +1249,25 @@
if (isConnected())
{
ArrayList callbackIds = new ArrayList(callbacks.size());
- Iterator it = callbacks.iterator();
+ Iterator idsIterator = callbacks.iterator();
+ ArrayList responseList = null;
+ Iterator responseIterator = null;
+ if (responses != null)
+ {
+ responseList = new ArrayList(responses.size());
+ responseIterator = responses.iterator();
+ }
+
+ Callback callback = null;
+ Object response = null;
+ String listenerId = null;
+
for (int i = 0; i < callbacks.size(); i++)
{
- Callback callback = (Callback) it.next();
+ callback = (Callback) idsIterator.next();
+ if (responseIterator != null)
+ response = responseIterator.next();
+
Map returnPayload = callback.getReturnPayload();
if (returnPayload != null)
{
@@ -1229,6 +1275,20 @@
if (callbackId != null)
{
callbackIds.add(callbackId);
+ if (responseIterator != null)
+ responseList.add(response);
+
+ String nextListenerId = (String) returnPayload.get(LISTENER_ID_KEY);
+ if (i == 0)
+ {
+ listenerId = nextListenerId;
+ }
+ else
+ {
+ if (!listenerId.equals(nextListenerId))
+ throw new Exception("Cannot acknowledge callbacks: " +
+ "all must be from same server side callback handler");
+ }
}
else
{
@@ -1245,20 +1305,20 @@
return 0;
Map metadata = new HashMap();
- String listenerId = (String)listeners.get(callbackHandler);
if(listenerId != null)
{
metadata.put(LISTENER_ID_KEY, listenerId);
}
else
{
- log.error("Could not find listener id for InvokerCallbackHandler (" + callbackHandler + "), please verify handler has been registered as listener.");
+ throw new Exception("Could not find listener id for InvokerCallbackHandler (" + callbackHandler
+ + "), please verify handler has been registered as listener.");
}
- Object[] callbackIdArray = callbackIds.toArray();
- InternalInvocation invocation = new InternalInvocation(InternalInvocation.ACKNOWLEDGECALLBACK, callbackIdArray);
+ Object[] params = new Object[] {callbackIds, responseList};
+ InternalInvocation invocation = new InternalInvocation(InternalInvocation.ACKNOWLEDGECALLBACK, params);
invoke(invocation, metadata);
- return callbackIdArray.length;
+ return callbackIds.size();
}
else
{
More information about the jboss-cvs-commits
mailing list