You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by fm...@apache.org on 2011/05/26 10:52:41 UTC

svn commit: r1127828 - /tuscany/sca-java-2.x/trunk/modules/binding-comet-runtime/src/main/java/org/apache/tuscany/sca/binding/comet/runtime/handler/CometBindingHandler.java

Author: fmoga
Date: Thu May 26 08:52:41 2011
New Revision: 1127828

URL: http://svn.apache.org/viewvc?rev=1127828&view=rev
Log:
Add support for non-void return types for blocking operations as there is only one response.

Modified:
    tuscany/sca-java-2.x/trunk/modules/binding-comet-runtime/src/main/java/org/apache/tuscany/sca/binding/comet/runtime/handler/CometBindingHandler.java

Modified: tuscany/sca-java-2.x/trunk/modules/binding-comet-runtime/src/main/java/org/apache/tuscany/sca/binding/comet/runtime/handler/CometBindingHandler.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-comet-runtime/src/main/java/org/apache/tuscany/sca/binding/comet/runtime/handler/CometBindingHandler.java?rev=1127828&r1=1127827&r2=1127828&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-comet-runtime/src/main/java/org/apache/tuscany/sca/binding/comet/runtime/handler/CometBindingHandler.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-comet-runtime/src/main/java/org/apache/tuscany/sca/binding/comet/runtime/handler/CometBindingHandler.java Thu May 26 08:52:41 2011
@@ -22,7 +22,7 @@ package org.apache.tuscany.sca.binding.c
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.concurrent.TimeUnit;
+import java.util.UUID;
 
 import javax.servlet.ServletContext;
 import javax.servlet.http.HttpServletRequest;
@@ -47,8 +47,6 @@ import org.apache.tuscany.sca.interfaced
 import org.apache.tuscany.sca.invocation.Message;
 import org.apache.tuscany.sca.runtime.RuntimeEndpoint;
 import org.atmosphere.cpr.Broadcaster;
-import org.atmosphere.cpr.BroadcasterLifeCyclePolicy.ATMOSPHERE_RESOURCE_POLICY;
-import org.atmosphere.cpr.BroadcasterLifeCyclePolicy.Builder;
 import org.atmosphere.jersey.JerseyBroadcaster;
 import org.atmosphere.jersey.SuspendResponse;
 
@@ -97,11 +95,13 @@ public class CometBindingHandler {
 	@GET
 	@Path("/connect")
 	public SuspendResponse<String> connect() {
-//		System.out.println("-- connect -- Session Id: " + request.getSession().getId());
+		// System.out.println("-- connect -- Session Id: " +
+		// request.getSession().getId());
 		if (broadcaster == null) {
-			broadcaster = new JerseyBroadcaster();
-//			broadcaster.setBroadcasterLifeCyclePolicy(new Builder().policy(ATMOSPHERE_RESOURCE_POLICY.IDLE_DESTROY)
-//					.idleTimeInMS(5000).build());
+			broadcaster = new JerseyBroadcaster(UUID.randomUUID().toString());
+			// broadcaster.setBroadcasterLifeCyclePolicy(new
+			// Builder().policy(ATMOSPHERE_RESOURCE_POLICY.IDLE_DESTROY)
+			// .idleTimeInMS(5000).build());
 			context = (CometComponentContext) sc.getAttribute(ServletFactory.COMET_COMPONENT_CONTEXT_KEY);
 		}
 		CometComponentContext.broadcasters.put(request.getSession().getId(), broadcaster);
@@ -130,14 +130,25 @@ public class CometBindingHandler {
 	public void handleRequest(@PathParam("service") final String service, @PathParam("method") final String method,
 			@FormParam("callbackMethod") final String callbackMethod, @FormParam("params") final String jsonData)
 			throws InvocationTargetException {
-//		System.out.println("-- handleRequest -- Session Id: " + request.getSession().getId());
+		// System.out.println("-- handleRequest -- Session Id: " +
+		// request.getSession().getId());
 		final String url = "/" + service + "/" + method;
 		final RuntimeEndpoint wire = context.getEndpoint(url);
 		final Operation operation = context.getOperation(url);
 
 		final Object[] args = decodeJsonDataForOperation(jsonData, operation);
 		Message msg = createMessageWithMockedCometReference(args, callbackMethod);
-		wire.invoke(operation, msg);
+		boolean isVoidReturnType = operation.getOutputType().getLogical().isEmpty();
+		if (!isVoidReturnType) {
+			Object response = wire.invoke(operation, args);
+			broadcaster.broadcast(callbackMethod + "($.secureEvalJSON('" + CometComponentContext.gson.toJson(response)
+					+ "'))");
+			if (broadcaster.getAtmosphereResources().isEmpty()) {
+				CometComponentContext.broadcasters.remove(request.getSession().getId());
+			}
+		} else {
+			wire.invoke(operation, msg);
+		}
 	}
 
 	/**