summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/contrib/modules/binding-comet-runtime/src/main/java/org/apache/tuscany/sca/binding/comet/runtime/CometBindingHandler.java
diff options
context:
space:
mode:
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.java38
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);
}
-
}