summaryrefslogtreecommitdiffstats
path: root/java/sca/contrib/modules/binding-dwr/src
diff options
context:
space:
mode:
authorslaws <slaws@13f79535-47bb-0310-9956-ffa450edef68>2008-11-18 10:16:48 +0000
committerslaws <slaws@13f79535-47bb-0310-9956-ffa450edef68>2008-11-18 10:16:48 +0000
commit5767541fd5d52fcd7fd04d361e2743ecf2e0a8f6 (patch)
treed187b9a316602225f608a6b9dc90b0b3d1a90d9a /java/sca/contrib/modules/binding-dwr/src
parenta1ac450baf123b0ab689929f76afca6349017fef (diff)
Equinox branch merge - create a contrib directory and start moving those modules that are not obviously junk but which are not in the branch here. All of the modules that are not required to bring up the calculator sample will go here after the merge but which it's going on its technically easier to keep the modules that match between trunk and branch in the same place.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@718546 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/sca/contrib/modules/binding-dwr/src')
-rw-r--r--java/sca/contrib/modules/binding-dwr/src/main/java/org/apache/tuscany/sca/binding/dwr/DWRBinding.java31
-rw-r--r--java/sca/contrib/modules/binding-dwr/src/main/java/org/apache/tuscany/sca/binding/dwr/DWRBindingActivator.java56
-rw-r--r--java/sca/contrib/modules/binding-dwr/src/main/java/org/apache/tuscany/sca/binding/dwr/DWRInvoker.java93
-rw-r--r--java/sca/contrib/modules/binding-dwr/src/main/java/org/apache/tuscany/sca/binding/dwr/DWRInvokerFactory.java67
-rw-r--r--java/sca/contrib/modules/binding-dwr/src/main/java/org/apache/tuscany/sca/binding/dwr/DWRService.java81
-rw-r--r--java/sca/contrib/modules/binding-dwr/src/main/java/org/apache/tuscany/sca/binding/dwr/DWRServlet.java247
-rw-r--r--java/sca/contrib/modules/binding-dwr/src/main/resources/META-INF/services/org.apache.tuscany.sca.extension.helper.BindingActivator19
7 files changed, 594 insertions, 0 deletions
diff --git a/java/sca/contrib/modules/binding-dwr/src/main/java/org/apache/tuscany/sca/binding/dwr/DWRBinding.java b/java/sca/contrib/modules/binding-dwr/src/main/java/org/apache/tuscany/sca/binding/dwr/DWRBinding.java
new file mode 100644
index 0000000000..ae5cf327ab
--- /dev/null
+++ b/java/sca/contrib/modules/binding-dwr/src/main/java/org/apache/tuscany/sca/binding/dwr/DWRBinding.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tuscany.sca.binding.dwr;
+
+/**
+ * The runtime representation of the <binding.dwr> SCDL
+ *
+ * @version $Rev$ $Date$
+ */
+public class DWRBinding {
+
+ // Empty as <binding.dwr> doesn't use any additional attributes or elements (yet).
+
+}
diff --git a/java/sca/contrib/modules/binding-dwr/src/main/java/org/apache/tuscany/sca/binding/dwr/DWRBindingActivator.java b/java/sca/contrib/modules/binding-dwr/src/main/java/org/apache/tuscany/sca/binding/dwr/DWRBindingActivator.java
new file mode 100644
index 0000000000..d14751f235
--- /dev/null
+++ b/java/sca/contrib/modules/binding-dwr/src/main/java/org/apache/tuscany/sca/binding/dwr/DWRBindingActivator.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tuscany.sca.binding.dwr;
+
+import org.apache.tuscany.sca.assembly.Binding;
+import org.apache.tuscany.sca.extension.helper.BindingActivator;
+import org.apache.tuscany.sca.extension.helper.ComponentLifecycle;
+import org.apache.tuscany.sca.extension.helper.InvokerFactory;
+import org.apache.tuscany.sca.host.http.ServletHost;
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
+import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
+import org.apache.tuscany.sca.runtime.RuntimeComponentService;
+
+/**
+ * The Binding Activator for the DWR Binding.
+ *
+ * @version $Rev$ $Date$
+ */
+public class DWRBindingActivator implements BindingActivator<DWRBinding>{
+
+ private ServletHost servletHost;
+
+ public DWRBindingActivator(ServletHost servletHost) {
+ this.servletHost = servletHost;
+ }
+
+ public Class<DWRBinding> getBindingClass() {
+ return DWRBinding.class;
+ }
+
+ public InvokerFactory createInvokerFactory(RuntimeComponent rc, RuntimeComponentReference rcr, Binding b, DWRBinding ab) {
+ return new DWRInvokerFactory(rc, rcr, b, ab, servletHost);
+ }
+
+ public ComponentLifecycle createService(RuntimeComponent rc, RuntimeComponentService rcs, Binding b, DWRBinding ab) {
+ return new DWRService(rc, rcs, b, ab, servletHost);
+ }
+
+}
diff --git a/java/sca/contrib/modules/binding-dwr/src/main/java/org/apache/tuscany/sca/binding/dwr/DWRInvoker.java b/java/sca/contrib/modules/binding-dwr/src/main/java/org/apache/tuscany/sca/binding/dwr/DWRInvoker.java
new file mode 100644
index 0000000000..24e6dbbcd4
--- /dev/null
+++ b/java/sca/contrib/modules/binding-dwr/src/main/java/org/apache/tuscany/sca/binding/dwr/DWRInvoker.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tuscany.sca.binding.dwr;
+
+import java.util.Collection;
+
+import org.apache.tuscany.sca.core.invocation.MessageImpl;
+import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.invocation.Invoker;
+import org.apache.tuscany.sca.invocation.Message;
+import org.directwebremoting.ScriptBuffer;
+import org.directwebremoting.WebContext;
+import org.directwebremoting.WebContextFactory;
+import org.directwebremoting.proxy.dwr.Util;
+
+/**
+ * The invoker for a DWR Binding.
+ *
+ * @version $Rev$ $Date$
+ */
+public class DWRInvoker implements Invoker {
+
+ private String referenceFunction;
+
+ public DWRInvoker(String referenceName, Operation operation) {
+ this.referenceFunction = referenceName + "." + operation.getName();
+ }
+
+ public Message invoke(Message requestMsg) {
+
+ invoke((Object[])requestMsg.getBody());
+
+ // DWR references can not return anything
+ return new MessageImpl();
+ }
+
+ public void invoke(Object[] args) {
+
+ // TODO: this only works if its the same thread as request
+ WebContext wctx = WebContextFactory.get();
+ String currentPage = wctx.getCurrentPage();
+
+ // Get a DWR Util proxy for all the browsers on the current page:
+ Collection sessions = wctx.getScriptSessionsByPage(currentPage);
+ Util utilAll = new Util(sessions);
+
+ ScriptBuffer referenceInvoke = getInvokeFragment(args, wctx);
+
+ // add the reference call to the Util proxy which will cause DWR to
+ // asynchronously send it to be run on each active browser client
+ utilAll.addScript(referenceInvoke);
+ }
+
+ /**
+ * Creates a fragment of JavaScript code to invoke the reference function
+ * Eg: "<referenceName>.<operationName>(arg1, arg2,...);"
+ */
+ protected ScriptBuffer getInvokeFragment(Object[] args, WebContext wctx) {
+
+ ScriptBuffer sb = new ScriptBuffer();
+ sb.appendScript(referenceFunction);
+ sb.appendScript("(");
+ if (args != null) {
+ for (int i = 0; i < args.length; i++) {
+ sb.appendData(args[i]);
+ if (i < (args.length - 1)) {
+ sb.appendScript(", ");
+ }
+ }
+ }
+ sb.appendScript(");");
+
+ return sb;
+ }
+
+}
diff --git a/java/sca/contrib/modules/binding-dwr/src/main/java/org/apache/tuscany/sca/binding/dwr/DWRInvokerFactory.java b/java/sca/contrib/modules/binding-dwr/src/main/java/org/apache/tuscany/sca/binding/dwr/DWRInvokerFactory.java
new file mode 100644
index 0000000000..1d073c9ecf
--- /dev/null
+++ b/java/sca/contrib/modules/binding-dwr/src/main/java/org/apache/tuscany/sca/binding/dwr/DWRInvokerFactory.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tuscany.sca.binding.dwr;
+
+import static org.apache.tuscany.sca.binding.dwr.DWRService.SERVLET_PATH;
+
+import org.apache.tuscany.sca.assembly.Binding;
+import org.apache.tuscany.sca.extension.helper.ComponentLifecycle;
+import org.apache.tuscany.sca.extension.helper.InvokerFactory;
+import org.apache.tuscany.sca.host.http.ServletHost;
+import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.invocation.Invoker;
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
+import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
+
+/**
+ * InvokerFactory for the DWRBinding.
+ *
+ * @version $Rev$ $Date$
+ */
+public class DWRInvokerFactory implements InvokerFactory, ComponentLifecycle {
+
+ private Binding binding;
+ private ServletHost servletHost;
+
+ public DWRInvokerFactory(RuntimeComponent rc, RuntimeComponentReference rcr, Binding b, DWRBinding ab, ServletHost servletHost) {
+ this.binding = b;
+ this.servletHost = servletHost;
+ }
+
+ public Invoker createInvoker(Operation operation) {
+ return new DWRInvoker(binding.getName(), operation);
+ }
+
+ public void start() {
+
+ DWRServlet servlet = (DWRServlet) servletHost.getServletMapping(SERVLET_PATH);
+ if (servlet == null) {
+ servlet = new DWRServlet();
+ servletHost.addServletMapping(SERVLET_PATH, servlet);
+ }
+
+ servlet.addReference(binding.getName());
+ }
+
+ public void stop() {
+ servletHost.removeServletMapping(SERVLET_PATH);
+ }
+
+}
diff --git a/java/sca/contrib/modules/binding-dwr/src/main/java/org/apache/tuscany/sca/binding/dwr/DWRService.java b/java/sca/contrib/modules/binding-dwr/src/main/java/org/apache/tuscany/sca/binding/dwr/DWRService.java
new file mode 100644
index 0000000000..7d5a7f1677
--- /dev/null
+++ b/java/sca/contrib/modules/binding-dwr/src/main/java/org/apache/tuscany/sca/binding/dwr/DWRService.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tuscany.sca.binding.dwr;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+
+import org.apache.tuscany.sca.assembly.Binding;
+import org.apache.tuscany.sca.extension.helper.ComponentLifecycle;
+import org.apache.tuscany.sca.host.http.ServletHost;
+import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
+import org.apache.tuscany.sca.interfacedef.java.impl.JavaInterfaceUtil;
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
+import org.apache.tuscany.sca.runtime.RuntimeComponentService;
+import org.apache.tuscany.sca.runtime.RuntimeWire;
+
+/**
+ * DWR Service.
+ *
+ * @version $Rev$ $Date$
+ */
+public class DWRService implements ComponentLifecycle {
+
+ private RuntimeComponent rc;
+ private RuntimeComponentService rcs;
+ private Binding binding;
+ private ServletHost servletHost;
+
+ static final String SERVLET_PATH = "/SCADomain/*";
+
+ public DWRService(RuntimeComponent rc, RuntimeComponentService rcs, Binding binding, DWRBinding ab, ServletHost servletHost) {
+ this.rc = rc;
+ this.rcs = rcs;
+ this.binding = binding;
+ this.servletHost = servletHost;
+ }
+
+ public void start() {
+
+ DWRServlet servlet = (DWRServlet) servletHost.getServletMapping(SERVLET_PATH);
+ if (servlet == null) {
+ servlet = new DWRServlet();
+ servletHost.addServletMapping(SERVLET_PATH, servlet);
+ }
+
+ // Create a Java proxy to the target service
+ Class<?> type = ((JavaInterface)rcs.getInterfaceContract().getInterface()).getJavaClass();
+ Object proxy = Proxy.newProxyInstance(type.getClassLoader(), new Class[]{type}, new InvocationHandler() {
+ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+ RuntimeWire wire = rcs.getRuntimeWire(binding);
+ Operation op = JavaInterfaceUtil.findOperation(method, rcs.getInterfaceContract().getInterface().getOperations());
+ return wire.invoke(op, args);
+ }});
+
+ servlet.addService(binding.getName(), type, proxy);
+ }
+
+ public void stop() {
+ servletHost.removeServletMapping(SERVLET_PATH);
+ }
+
+}
diff --git a/java/sca/contrib/modules/binding-dwr/src/main/java/org/apache/tuscany/sca/binding/dwr/DWRServlet.java b/java/sca/contrib/modules/binding-dwr/src/main/java/org/apache/tuscany/sca/binding/dwr/DWRServlet.java
new file mode 100644
index 0000000000..3a2471d8f3
--- /dev/null
+++ b/java/sca/contrib/modules/binding-dwr/src/main/java/org/apache/tuscany/sca/binding/dwr/DWRServlet.java
@@ -0,0 +1,247 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tuscany.sca.binding.dwr;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.directwebremoting.Container;
+import org.directwebremoting.create.AbstractCreator;
+import org.directwebremoting.extend.CreatorManager;
+import org.directwebremoting.extend.Handler;
+import org.directwebremoting.extend.Remoter;
+import org.directwebremoting.servlet.DwrServlet;
+import org.directwebremoting.servlet.EngineHandler;
+import org.directwebremoting.servlet.PathConstants;
+import org.directwebremoting.servlet.UrlProcessor;
+
+/**
+ * Tuscany customized DWR Servlet to implement support for the DWR binding
+ *
+ * Handles requests for SCA services and references that use <binding.dwr>,
+ * and also the HTTP GET for the Tuscany DWR system script "scaDomain.js"
+ *
+ * @version $Rev$ $Date$
+ */
+public class DWRServlet extends DwrServlet {
+ private static final long serialVersionUID = 1L;
+
+ private transient Map<String, ServiceHolder> services;
+ private transient List<String> referenceNames;
+ private transient boolean initialized;
+ private transient Map<String, String> initParams;
+
+ private static final String SCADOMAIN_SCRIPT_PATH = "/scaDomain.js";
+
+ public DWRServlet() {
+ this.services = new HashMap<String, ServiceHolder>();
+ this.referenceNames = new ArrayList<String>();
+
+ this.initParams = new HashMap<String, String>();
+ // maybe use <binding.dwr> attributes to define the init params
+ initParams.put("activeReverseAjaxEnabled", "true");
+ }
+
+ @Override
+ public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
+ super.service(req, res);
+ }
+
+ /**
+ * Initialize the Servlet
+ * There is a single instance of this Servlet which is registered
+ * for multiple path mappings, but the init should only run once.
+ */
+ @Override
+ public void init(ServletConfig servletConfig) throws ServletException {
+ if (!initialized) {
+ super.init(patchConfig(servletConfig));
+ addScriptHandler();
+ initServices();
+ initialized = true;
+ }
+ }
+
+ /**
+ * Add in the handler to process the HTTP get for /sca/scaDomain.js
+ *
+ * This wrappers the DWR Engine handler which returns the DWR engine.js script,
+ * this wrappers that handler so as to add Tuscany specific header and footer code
+ * to the DWR engine.js to define the Tuscany SCADomain control functions and
+ * functions for each SCA service and reference that use <binding.dwr>.
+ */
+ private void addScriptHandler() {
+
+ UrlProcessor urlProcessor = (UrlProcessor)getContainer().getBean(UrlProcessor.class.getName());
+
+ final EngineHandler engineHandler =
+ (EngineHandler)getContainer().getBean(PathConstants.URL_PREFIX + "/engine.js");
+
+ final Handler scaDomainScriptHandler = new Handler() {
+ public void handle(HttpServletRequest request, HttpServletResponse response) throws IOException {
+ PrintWriter out = response.getWriter();
+ out.println("/** Apache Tuscany scaDomain.js Header */");
+
+ engineHandler.handle(request, response);
+
+ tuscanyFooter(request, out);
+ }
+
+ };
+
+ // add the scaDomainScriptHandler to the urlProcessor
+ // bit of a hack, there's probably cleaner way to get it registered
+ urlProcessor.afterContainerSetup(new Container() {
+ public Object getBean(String name) {
+ return scaDomainScriptHandler;
+ }
+ public Collection getBeanNames() {
+ return Arrays.asList(new String[] {PathConstants.URL_PREFIX + SCADOMAIN_SCRIPT_PATH});
+ }
+ });
+ }
+
+ /**
+ * Adds the JavaScript defining SCADomain, its control functions,
+ * and functions for all the available SCA services and references.
+ */
+ private void tuscanyFooter(HttpServletRequest request, PrintWriter out) {
+ out.println("/** Apache Tuscany scaDomain.js Footer */");
+ out.println();
+ out.println("function scaDomain() { }");
+ out.println();
+ out.println("// SCA services");
+
+ // Use the DWR remoter to generate the JavaScipt function for each SCA service
+ Remoter remoter = (Remoter)getContainer().getBean(Remoter.class.getName());
+
+ String path = request.getContextPath() + request.getServletPath();
+
+ for (String serviceName : services.keySet()) {
+ String serviceScript = remoter.generateInterfaceScript(serviceName, path);
+ out.println(serviceScript);
+ }
+
+ if (referenceNames.size() > 0) {
+
+ out.println("// SCA reverse ajax control functions");
+ out.println();
+ out.println("scaDomain.open = function() { dwr.engine.setActiveReverseAjax(true); };");
+ out.println("scaDomain.close = function() { dwr.engine.setActiveReverseAjax(false); };");
+
+ out.println();
+ out.println("// SCA references");
+ out.println();
+
+ // the JavaScript function for SCA references has an
+ // empty impl as it uses DWR severside "push"
+ for (String referenceName : referenceNames) {
+ out.println("function " + referenceName + "() { }");
+ }
+ }
+
+ out.println();
+ out.println("/** End of Apache Tuscany scaDomain.js */");
+ out.println();
+ }
+
+ /**
+ * Add an SCA reference to be added to the DWR runtime
+ */
+ public void addReference(String name) {
+ referenceNames.add(name);
+ }
+
+ /**
+ * Add an SCA service to be added to the DWR runtime
+ */
+ public void addService(String name, final Class type, final Object instance) {
+ ServiceHolder holder = new ServiceHolder();
+ holder.name = name;
+ holder.type = type;
+ holder.instance = instance;
+ services.put(name, holder);
+ }
+
+ /**
+ * Defines each SCA service proxy instance to DWR
+ */
+ private void initServices() {
+ CreatorManager creatorManager = (CreatorManager)getContainer().getBean(CreatorManager.class.getName());
+
+ for (final ServiceHolder holder : services.values()) {
+ creatorManager.addCreator(holder.name, new AbstractCreator() {
+ public Class getType() {
+ return holder.type;
+ }
+
+ public Object getInstance() throws InstantiationException {
+ return holder.instance;
+ }
+ });
+ }
+ }
+
+ // utility class to aid passing around services
+ private class ServiceHolder {
+ String name;
+ Class type;
+ Object instance;
+ }
+
+ /**
+ * Patch the ServletConfig to enable setting init params for DWR
+ * and so DWR can't see the Tuscany servlet's init params.
+ */
+ private ServletConfig patchConfig(final ServletConfig servletConfig) {
+ ServletConfig patchedContext = new ServletConfig() {
+ public String getInitParameter(String name) {
+ return initParams.get(name);
+ }
+ public Enumeration getInitParameterNames() {
+ return Collections.enumeration(initParams.keySet());
+ }
+ public ServletContext getServletContext() {
+ return servletConfig.getServletContext();
+ }
+ public String getServletName() {
+ return servletConfig.getServletName();
+ }
+ };
+ return patchedContext;
+ }
+
+}
diff --git a/java/sca/contrib/modules/binding-dwr/src/main/resources/META-INF/services/org.apache.tuscany.sca.extension.helper.BindingActivator b/java/sca/contrib/modules/binding-dwr/src/main/resources/META-INF/services/org.apache.tuscany.sca.extension.helper.BindingActivator
new file mode 100644
index 0000000000..1a9f91fab2
--- /dev/null
+++ b/java/sca/contrib/modules/binding-dwr/src/main/resources/META-INF/services/org.apache.tuscany.sca.extension.helper.BindingActivator
@@ -0,0 +1,19 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# Implementation class for the ExtensionActivator
+org.apache.tuscany.sca.binding.dwr.DWRBindingActivator
+