diff options
author | fmoga <fmoga@13f79535-47bb-0310-9956-ffa450edef68> | 2010-08-14 00:34:27 +0000 |
---|---|---|
committer | fmoga <fmoga@13f79535-47bb-0310-9956-ffa450edef68> | 2010-08-14 00:34:27 +0000 |
commit | eff7bb9dd439b9d9d74cb54b4cf0733e6b3ca0cf (patch) | |
tree | a5bfaba168f239b0d4328d26a95da864467e0161 /sca-java-2.x/contrib/modules/binding-comet-runtime/src/main/java/org/apache/tuscany/sca/binding/comet/runtime/CometBindingHandler.java | |
parent | 7c39643f218f7169bae9e7e4581e6a92d5c50c34 (diff) |
Added ServletFactory in order to keep a singleton servlet for all comet services in a scdl so that the two connection limit issue with the browsers is avoided.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@985414 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to '')
-rw-r--r-- | sca-java-2.x/contrib/modules/binding-comet-runtime/src/main/java/org/apache/tuscany/sca/binding/comet/runtime/CometBindingHandler.java | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/sca-java-2.x/contrib/modules/binding-comet-runtime/src/main/java/org/apache/tuscany/sca/binding/comet/runtime/CometBindingHandler.java b/sca-java-2.x/contrib/modules/binding-comet-runtime/src/main/java/org/apache/tuscany/sca/binding/comet/runtime/CometBindingHandler.java index a597d86f3a..f8e6470c4c 100644 --- a/sca-java-2.x/contrib/modules/binding-comet-runtime/src/main/java/org/apache/tuscany/sca/binding/comet/runtime/CometBindingHandler.java +++ b/sca-java-2.x/contrib/modules/binding-comet-runtime/src/main/java/org/apache/tuscany/sca/binding/comet/runtime/CometBindingHandler.java @@ -1,13 +1,18 @@ package org.apache.tuscany.sca.binding.comet.runtime; import java.lang.reflect.InvocationTargetException; +import java.util.Map; import javax.servlet.ServletContext; +import javax.ws.rs.FormParam; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; +import javax.ws.rs.PathParam; import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.Context; +import javax.ws.rs.core.Request; import org.apache.tuscany.sca.interfacedef.Operation; import org.apache.tuscany.sca.runtime.RuntimeEndpoint; @@ -25,29 +30,36 @@ import com.sun.jersey.spi.container.servlet.PerSession; public class CometBindingHandler { private Broadcaster broadcaster; - public static final String ENDPOINT_KEY = "org.apache.tuscany.sca.binding.comet.endpoint"; - public static final String OPERATION_KEY = "org.apache.tuscany.sca.binding.comet.operation"; + private Map<String, RuntimeEndpoint> endpoints; + private Map<String, Operation> operations; @Context private ServletContext sc; - + @GET public SuspendResponse<String> connect() { + System.out.println("Entering connect..."); broadcaster = new DefaultBroadcaster(); - return new SuspendResponse.SuspendResponseBuilder<String>() - .broadcaster(broadcaster) - .outputComments(true) - // .addListener(new EventsLogger()) - .build(); + endpoints = (Map<String, RuntimeEndpoint>)sc.getAttribute(ServletFactory.ENDPOINTS_KEY); + operations = (Map<String, Operation>)sc.getAttribute(ServletFactory.OPERATIONS_KEY); + return new SuspendResponse.SuspendResponseBuilder<String>().broadcaster(broadcaster).outputComments(true) + .addListener(new EventsLogger()).build(); } @POST + @Path("/{component}/{service}/{method}") @Broadcast - public Broadcastable callAndRespond() throws InvocationTargetException { - RuntimeEndpoint wire = (RuntimeEndpoint)sc.getAttribute(ENDPOINT_KEY); - Operation operation = (Operation)sc.getAttribute(OPERATION_KEY); + public Broadcastable callAndRespond(@PathParam("component") String component, + @PathParam("service") String service, + @PathParam("method") String method, + @FormParam("callback") String callbackMethod) throws InvocationTargetException { + String url = "/" + component + "/" + service + "/" + method; + System.out.println("Entered callAndRespond with url: " + url); + System.out.println("Callback method: " + callbackMethod); + RuntimeEndpoint wire = endpoints.get(url); + Operation operation = operations.get(url); Object response = wire.invoke(operation, new Object[] {}); - return new Broadcastable(response.toString(), "", broadcaster); + // TODO: replace with JSON + return new Broadcastable(callbackMethod + "#" + response.toString(), "", broadcaster); } - } |