[jboss-cvs] JBossRemoting/src/main/org/jboss/remoting/callback ...
Ron Sigal
ron_sigal at yahoo.com
Tue Nov 28 12:39:28 EST 2006
User: rsigal
Date: 06/11/28 12:39:28
Modified: src/main/org/jboss/remoting/callback
ServerInvokerCallbackHandler.java
Added: src/main/org/jboss/remoting/callback
AsynchInvokerCallbackHandler.java
Log:
JBREM-640: Added asynchronous callback handling.
Revision Changes Path
1.19 +74 -5 JBossRemoting/src/main/org/jboss/remoting/callback/ServerInvokerCallbackHandler.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: ServerInvokerCallbackHandler.java
===================================================================
RCS file: /cvsroot/jboss/JBossRemoting/src/main/org/jboss/remoting/callback/ServerInvokerCallbackHandler.java,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- ServerInvokerCallbackHandler.java 21 Nov 2006 06:46:47 -0000 1.18
+++ ServerInvokerCallbackHandler.java 28 Nov 2006 17:39:28 -0000 1.19
@@ -59,7 +59,7 @@
*
* @author <a href="mailto:telrod at e2technologies.net">Tom Elrod</a>
*/
-public class ServerInvokerCallbackHandler implements InvokerCallbackHandler
+public class ServerInvokerCallbackHandler implements AsynchInvokerCallbackHandler
{
private InvocationRequest invocation;
private Client callBackClient;
@@ -560,6 +560,65 @@
public void handleCallback(Callback callback)
throws HandleCallbackException
{
+ handleCallback(callback, false, false);
+ }
+
+ /**
+ * For push callbacks, will send the callback to the server invoker on the
+ * client side, hand off processing to a separate thread, and return.<p>
+ *
+ * For pull callbacks, behaves the same as handleCallback(Callback callback).<p>
+ *
+ * @param callback
+ * @throws HandleCallbackException
+ */
+ public void handleCallbackOneway(Callback callback)
+ throws HandleCallbackException
+ {
+ handleCallback(callback, true, false);
+ }
+
+ /**
+ * For push callbacks:<p>
+ * if serverSide == false, will send the callback to the server invoker on
+ * the client side, hand off processing to a separate thread, and return.<p>
+ *
+ * if serverside == true, will hand off to a separate thread the sending
+ * of the callback and will then return.<p>
+ *
+ * For pull callbacks, behaves the same as handleCallback(Callback callback).<p>
+ *
+ * @param callback
+ * @param serverSide
+ * @throws HandleCallbackException
+ */
+ public void handleCallbackOneway(Callback callback, boolean serverSide)
+ throws HandleCallbackException
+ {
+ handleCallback(callback, true, serverSide);
+ }
+
+ /**
+ * For push callbacks:<p>
+ * if asynch == false, behaves the same as handleCallback(Callback callback).<p>
+ *
+ * if asynch == true:<p>
+ * if serverSide == false, will send the callback to the server invoker on
+ * the client side, hand off processing to a separate thread, and return.<p>
+ *
+ * if serverside == true, will hand off to a separate thread the sending
+ * of the callback and will then return.<p>
+ *
+ * For pull callbacks, behaves the same as handleCallback(Callback callback).<p>
+ *
+ * @param callback
+ * @param asynch
+ * @param serverSide
+ * @throws HandleCallbackException
+ */
+ public void handleCallback(Callback callback, boolean asynch, boolean serverSide)
+ throws HandleCallbackException
+ {
try
{
Object callbackId = checkForCallbackListener(callback);
@@ -620,10 +679,13 @@
else
{
Object o = returnPayload.remove(REMOTING_ACKNOWLEDGES_PUSH_CALLBACKS);
+ if (!asynch)
+ {
if (o instanceof String && Boolean.valueOf((String)o).booleanValue() ||
o instanceof Boolean && ((Boolean)o).booleanValue())
handleAcknowledgement = true;
}
+ }
returnPayload.put(Callback.SERVER_LOCATOR_KEY, serverLocator);
callback.setReturnPayload(returnPayload);
@@ -634,8 +696,15 @@
InternalInvocation internalInvocation = new InternalInvocation(InternalInvocation.HANDLECALLBACK,
new Object[]{callback});
callBackClient.setSessionId(sessionId);
- callBackClient.invoke(internalInvocation, callback.getRequestPayload());
+ if (asynch)
+ {
+ callBackClient.invokeOneway(internalInvocation, callback.getRequestPayload(), serverSide);
+ }
+ else
+ {
+ callBackClient.invoke(internalInvocation, callback.getRequestPayload());
+ }
handlePushCallbackAcknowledgement(callbackId, handleAcknowledgement);
}
catch(Throwable ex)
1.2 +88 -0 JBossRemoting/src/main/org/jboss/remoting/callback/AsynchInvokerCallbackHandler.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: AsynchInvokerCallbackHandler.java
===================================================================
RCS file: AsynchInvokerCallbackHandler.java
diff -N AsynchInvokerCallbackHandler.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ AsynchInvokerCallbackHandler.java 28 Nov 2006 17:39:28 -0000 1.2
@@ -0,0 +1,88 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.remoting.callback;
+
+
+/**
+ * AsynchInvokerCallbackHandler extends InvokerCallbackHandler with
+ * asynchronous callback handling.
+ *
+ * @author <a href="ron.sigal at jboss.com">Ron Sigal</a>
+ * @version $Revision: 1.2 $
+ * <p>
+ * Copyright Nov 28, 2006
+ * </p>
+ */
+public interface AsynchInvokerCallbackHandler extends InvokerCallbackHandler
+{
+ /**
+ * For push callbacks, will send the callback to the server invoker on the
+ * client side, hand off processing to a separate thread, and return.<p>
+ *
+ * For pull callbacks, behaves the same as handleCallback(Callback callback).<p>
+ *
+ * @param callback
+ * @throws HandleCallbackException
+ */
+ public void handleCallbackOneway(Callback callback)
+ throws HandleCallbackException;
+
+
+ /**
+ * For push callbacks:<p>
+ * if serverSide == false, will send the callback to the server invoker on
+ * the client side, hand off processing to a separate thread, and return.<p>
+ *
+ * if serverside == true, will hand off to a separate thread the sending
+ * of the callback and will then return.<p>
+ *
+ * For pull callbacks, behaves the same as handleCallback(Callback callback).<p>
+ *
+ * @param callback
+ * @param serverSide
+ * @throws HandleCallbackException
+ */
+ public void handleCallbackOneway(Callback callback, boolean serverSide)
+ throws HandleCallbackException;
+
+
+ /**
+ * For push callbacks:<p>
+ * if asynch == false, behaves the same as handleCallback(Callback callback).<p>
+ *
+ * if asynch == true:<p>
+ * if serverSide == false, will send the callback to the server invoker on
+ * the client side, hand off processing to a separate thread, and return.<p>
+ *
+ * if serverside == true, will hand off to a separate thread the sending
+ * of the callback and will then return.<p>
+ *
+ * For pull callbacks, behaves the same as handleCallback(Callback callback).<p>
+ *
+ * @param callback
+ * @param asynch
+ * @param serverSide
+ * @throws HandleCallbackException
+ */
+ public void handleCallback(Callback callback, boolean asynch, boolean serverSide)
+ throws HandleCallbackException;
+}
More information about the jboss-cvs-commits
mailing list