diff options
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); } - } |