summaryrefslogtreecommitdiffstats
path: root/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'sandbox/sebastien/java/sca-node/modules/implementation-web/src/main')
-rw-r--r--sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/ComponentContextServlet.java97
-rw-r--r--sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/ContextScriptProcessor.java29
-rw-r--r--sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/ContextScriptProcessorExtensionPoint.java27
-rw-r--r--sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/DefaultContextScriptProcessorExtensionPoint.java29
-rw-r--r--sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/WebImplementation.java36
-rw-r--r--sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/WebImplementationActivator.java67
-rw-r--r--sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/WebSingleton.java73
-rw-r--r--sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/taglib/ReferenceTEI.java42
-rw-r--r--sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/taglib/ReferenceTag.java103
-rw-r--r--sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/resources/META-INF/sca.tld59
-rw-r--r--sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/resources/META-INF/services/org.apache.tuscany.sca.extension.helper.ImplementationActivator18
-rw-r--r--sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/resources/META-INF/services/org.apache.tuscany.sca.implementation.web.ContextScriptProcessorExtensionPoint19
12 files changed, 599 insertions, 0 deletions
diff --git a/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/ComponentContextServlet.java b/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/ComponentContextServlet.java
new file mode 100644
index 0000000000..3b104d7c93
--- /dev/null
+++ b/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/ComponentContextServlet.java
@@ -0,0 +1,97 @@
+/*
+ * 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.implementation.web;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.tuscany.sca.assembly.ComponentReference;
+
+/**
+ * Servlet that handles the GET request for the componentContext.js script
+ *
+ * The script is generated by calling ScriptProcessors to output the code
+ * for the SCA references, properties etc.
+ */
+public class ComponentContextServlet extends HttpServlet {
+ private static final long serialVersionUID = 1L;
+
+ protected static final String HEADER = "/** --- Apache Tuscany componentContext.js --- */\n";
+ protected static final String FOOTER = "/** --- Apache Tuscany componentContext.js EOF --- */\n";
+
+ public static final String COMPONENT_CONTEXT_SCRIPT_URI = "org.apache.tuscany.sca.componentContext.js";
+
+ @Override
+ public void doGet(HttpServletRequest req, HttpServletResponse response) throws IOException {
+ response.setContentType("text/plain;charset=utf-8");
+ OutputStream out = response.getOutputStream();
+
+ doScriptInit(out);
+
+ doScriptReferences(out);
+
+ out.write(FOOTER.getBytes("UTF-8"));
+
+ out.flush();
+ out.close();
+ }
+
+ /**
+ * Calls each ContextScriptProcessor once to insert any required initilization code into componentContext.js
+ */
+ protected void doScriptInit(OutputStream out) throws IOException, UnsupportedEncodingException {
+ out.write(HEADER.getBytes("UTF-8"));
+
+ for (ContextScriptProcessor csp : WebSingleton.INSTANCE.getContextScriptProcessors()) {
+ csp.scriptInit(out);
+ }
+ }
+
+ /**
+ * Calls each ContextScriptProcessor for each SCA reference to insert code for the reference into componentContext.js
+ */
+ protected void doScriptReferences(OutputStream out) throws IOException, UnsupportedEncodingException {
+
+ out.write("// SCA References\n".getBytes("UTF-8"));
+
+ for (ComponentReference cr : WebSingleton.INSTANCE.getRuntimeComponent().getReferences()) {
+ String ref = "// SCA Reference " + cr.getName() + "\n";
+ out.write(ref.getBytes("UTF-8"));
+ for (ContextScriptProcessor csp : WebSingleton.INSTANCE.getContextScriptProcessors()) {
+ csp.scriptReference(cr, out);
+ }
+ }
+
+ out.write("\n// SCA References end.\n".getBytes("UTF-8"));
+ }
+
+ /**
+ * Calls each ContextScriptProcessor for each SCA property to insert code for the property into componentContext.js
+ */
+ protected void doScriptProperties(OutputStream out) throws IOException, UnsupportedEncodingException {
+ // TODO: support properties
+ }
+
+}
diff --git a/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/ContextScriptProcessor.java b/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/ContextScriptProcessor.java
new file mode 100644
index 0000000000..28157feba5
--- /dev/null
+++ b/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/ContextScriptProcessor.java
@@ -0,0 +1,29 @@
+/*
+ * 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.implementation.web;
+
+import java.io.OutputStream;
+
+import org.apache.tuscany.sca.assembly.ComponentReference;
+
+public interface ContextScriptProcessor {
+ void scriptInit(OutputStream out);
+ void scriptReference(ComponentReference cr, OutputStream out);
+}
diff --git a/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/ContextScriptProcessorExtensionPoint.java b/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/ContextScriptProcessorExtensionPoint.java
new file mode 100644
index 0000000000..6d3f590309
--- /dev/null
+++ b/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/ContextScriptProcessorExtensionPoint.java
@@ -0,0 +1,27 @@
+/*
+ * 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.implementation.web;
+
+
+public interface ContextScriptProcessorExtensionPoint {
+
+ void addContextScriptProcessor(ContextScriptProcessor csp);
+
+}
diff --git a/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/DefaultContextScriptProcessorExtensionPoint.java b/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/DefaultContextScriptProcessorExtensionPoint.java
new file mode 100644
index 0000000000..49124331df
--- /dev/null
+++ b/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/DefaultContextScriptProcessorExtensionPoint.java
@@ -0,0 +1,29 @@
+/*
+ * 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.implementation.web;
+
+
+public class DefaultContextScriptProcessorExtensionPoint implements ContextScriptProcessorExtensionPoint {
+
+ public void addContextScriptProcessor(ContextScriptProcessor csp) {
+ WebSingleton.INSTANCE.addContextScriptProcessor(csp);
+ }
+
+}
diff --git a/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/WebImplementation.java b/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/WebImplementation.java
new file mode 100644
index 0000000000..36d564a697
--- /dev/null
+++ b/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/WebImplementation.java
@@ -0,0 +1,36 @@
+/*
+ * 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.implementation.web;
+
+
+/**
+ * Represents a Script implementation.
+ */
+public class WebImplementation {
+
+ protected String war;
+
+ public String getWar() {
+ return war;
+ }
+
+ public void setWar(String war) {
+ this.war = war;
+ }
+}
diff --git a/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/WebImplementationActivator.java b/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/WebImplementationActivator.java
new file mode 100644
index 0000000000..dd3c2e4c94
--- /dev/null
+++ b/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/WebImplementationActivator.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.implementation.web;
+
+import org.apache.tuscany.sca.assembly.ComponentType;
+import org.apache.tuscany.sca.extension.helper.ImplementationActivator;
+import org.apache.tuscany.sca.extension.helper.InvokerFactory;
+import org.apache.tuscany.sca.extension.helper.utils.PropertyValueObjectFactory;
+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 static org.apache.tuscany.sca.implementation.web.ComponentContextServlet.COMPONENT_CONTEXT_SCRIPT_URI;
+
+public class WebImplementationActivator implements ImplementationActivator<WebImplementation> {
+
+ protected ServletHost servletHost;
+ // TODO: seems wrong to need PropertyValueObjectFactory, could it be on Property somehow?
+ protected PropertyValueObjectFactory propertyFactory;
+
+ public WebImplementationActivator(ServletHost servletHost, PropertyValueObjectFactory propertyFactory) {
+ this.servletHost = servletHost;
+ this.propertyFactory = propertyFactory;
+ }
+
+ public Class<WebImplementation> getImplementationClass() {
+ return WebImplementation.class;
+ }
+
+ public InvokerFactory createInvokerFactory(RuntimeComponent rc, ComponentType ct, WebImplementation implementation) {
+
+ initServlet(servletHost);
+
+ WebSingleton.INSTANCE.setRuntimeComponent(rc);
+
+ return new InvokerFactory() {
+ public Invoker createInvoker(Operation arg0) {
+ throw new IllegalStateException("can't invoke an implementation.web component");
+ }
+ };
+ }
+
+ private void initServlet(ServletHost servletHost) {
+ if (servletHost.getServletMapping(COMPONENT_CONTEXT_SCRIPT_URI) == null) {
+ servletHost.addServletMapping(COMPONENT_CONTEXT_SCRIPT_URI, new ComponentContextServlet());
+ }
+ }
+
+}
diff --git a/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/WebSingleton.java b/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/WebSingleton.java
new file mode 100644
index 0000000000..5fcf2a2799
--- /dev/null
+++ b/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/WebSingleton.java
@@ -0,0 +1,73 @@
+/*
+ * 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.implementation.web;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.tuscany.sca.assembly.ComponentReference;
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
+
+/**
+ * Singleton instance to share data between the ModuleActivator,
+ * ContextScriptProcessorExtensionPoint, and Taglib tags.
+ *
+ * TODO: find a way to share the data without needing a singleton
+ */
+public class WebSingleton {
+
+ private List<ContextScriptProcessor> contextScriptProcessors = new ArrayList<ContextScriptProcessor>();
+ private RuntimeComponent runtimeComponent;
+
+ public static final WebSingleton INSTANCE = new WebSingleton();
+ private WebSingleton() {
+ }
+
+ public ComponentReference getComponentReference(String name) {
+ if (runtimeComponent == null) {
+ throw new IllegalStateException("RuntimeComponent is null. Missing a <implementation.web>?");
+ }
+ for (ComponentReference cr : runtimeComponent.getReferences()) {
+ if (cr.getName().equals(name)) {
+ return cr;
+ }
+ }
+ return null;
+ }
+
+ public void addContextScriptProcessor(ContextScriptProcessor csp) {
+ contextScriptProcessors.add(csp);
+ }
+
+ public List<ContextScriptProcessor> getContextScriptProcessors() {
+ return contextScriptProcessors;
+ }
+
+ public RuntimeComponent getRuntimeComponent() {
+ return runtimeComponent;
+ }
+
+ public void setRuntimeComponent(RuntimeComponent rc) {
+ if (this.runtimeComponent != null) {
+ throw new IllegalStateException("adding component '" + rc.getName() + "' but web module already has a component: " + runtimeComponent.getName());
+ }
+ this.runtimeComponent = rc;
+ }
+}
diff --git a/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/taglib/ReferenceTEI.java b/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/taglib/ReferenceTEI.java
new file mode 100644
index 0000000000..cba6359d2f
--- /dev/null
+++ b/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/taglib/ReferenceTEI.java
@@ -0,0 +1,42 @@
+/*
+ * 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.implementation.web.taglib;
+
+import javax.servlet.jsp.tagext.TagData;
+import javax.servlet.jsp.tagext.TagExtraInfo;
+import javax.servlet.jsp.tagext.VariableInfo;
+
+/**
+ * TagExtraInfo class for the SCA reference tags
+ * <sca:reference name="service" type="test.MyService" scope="1" />
+ */
+public class ReferenceTEI extends TagExtraInfo {
+
+ public VariableInfo[] getVariableInfo(TagData data) {
+ VariableInfo info1
+ = new VariableInfo(
+ data.getAttributeString("name"),
+ data.getAttributeString("type"),
+ true,
+ VariableInfo.AT_END);
+ VariableInfo[] info = { info1 } ;
+ return info;
+ }
+}
diff --git a/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/taglib/ReferenceTag.java b/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/taglib/ReferenceTag.java
new file mode 100644
index 0000000000..69f70859b2
--- /dev/null
+++ b/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/taglib/ReferenceTag.java
@@ -0,0 +1,103 @@
+/*
+ * 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.implementation.web.taglib;
+
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.PageContext;
+import javax.servlet.jsp.tagext.TagSupport;
+
+import org.apache.tuscany.sca.assembly.ComponentReference;
+import org.apache.tuscany.sca.implementation.web.WebSingleton;
+
+/**
+ * Tag to handle SCA references
+ * <sca:reference name="service" type="test.MyService" scope="1" />
+ */
+public class ReferenceTag extends TagSupport {
+ private static final long serialVersionUID = 1L;
+
+ protected String name;
+ protected String type;
+ protected Integer scope = PageContext.PAGE_SCOPE;
+
+ public int doStartTag() throws JspException {
+ return SKIP_BODY;
+ }
+
+ public int doEndTag() throws JspException {
+
+// ServletContext servletContext = pageContext.getServletContext();
+// try {
+// WebAppServletHost.getInstance().init(servletContext);
+// } catch (ServletException e) {
+// throw new JspException("Exception initializing Tuscany webapp: " + e, e);
+// }
+//
+ Class<?> typeClass;
+ try {
+ typeClass = Class.forName(type, true, Thread.currentThread().getContextClassLoader());
+ } catch (ClassNotFoundException e) {
+ throw new JspException("Reference '" + name + "' type class not found: " + type);
+ }
+
+ ComponentReference ref = WebSingleton.INSTANCE.getComponentReference(name);
+ if (ref == null) {
+ throw new JspException("Reference '" + name + "' type class not found: " + type);
+ }
+
+ Object o;
+ try {
+ o = WebSingleton.INSTANCE.getRuntimeComponent().getComponentContext().getService(typeClass, name);
+ } catch (Exception e) {
+ throw new JspException("Exception getting service proxy for reference '" + name + "': " + e, e);
+ }
+ if (o == null) {
+ throw new JspException("Reference '" + name + "' not found");
+ }
+
+ pageContext.setAttribute(name, o, scope);
+
+ return EVAL_PAGE;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Integer getScope() {
+ return scope;
+ }
+
+ public void setScope(Integer scope) {
+ this.scope = scope;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+}
diff --git a/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/resources/META-INF/sca.tld b/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/resources/META-INF/sca.tld
new file mode 100644
index 0000000000..4807ba517a
--- /dev/null
+++ b/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/resources/META-INF/sca.tld
@@ -0,0 +1,59 @@
+<?xml version = '1.0' encoding = 'ISO-8859-1'?>
+<!--
+ * 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.
+ -->
+
+<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd">
+
+<taglib version="2.1">
+
+ <tlib-version>1.0</tlib-version>
+ <short-name>SCA-JSP</short-name>
+ <uri>http://www.osog.org/sca/sca.tld</uri>
+ <description>A tag library for integrating sca components with jsp</description>
+
+ <tag>
+
+ <name>reference</name>
+
+ <tag-class>org.apache.tuscany.sca.implementation.web.taglib.ReferenceTag</tag-class>
+ <tei-class>org.apache.tuscany.sca.implementation.web.taglib.ReferenceTEI</tei-class>
+
+ <attribute>
+ <name>name</name>
+ <required>true</required>
+ <type>java.lang.String</type>
+ </attribute>
+
+ <attribute>
+ <name>type</name>
+ <required>true</required>
+ <type>java.lang.String</type>
+ </attribute>
+
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <type>java.lang.Integer</type>
+ </attribute>
+
+ <body-content>empty</body-content>
+
+ </tag>
+
+</taglib>
diff --git a/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/resources/META-INF/services/org.apache.tuscany.sca.extension.helper.ImplementationActivator b/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/resources/META-INF/services/org.apache.tuscany.sca.extension.helper.ImplementationActivator
new file mode 100644
index 0000000000..ebf7b4fa8b
--- /dev/null
+++ b/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/resources/META-INF/services/org.apache.tuscany.sca.extension.helper.ImplementationActivator
@@ -0,0 +1,18 @@
+# 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.implementation.web.WebImplementationActivator
diff --git a/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/resources/META-INF/services/org.apache.tuscany.sca.implementation.web.ContextScriptProcessorExtensionPoint b/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/resources/META-INF/services/org.apache.tuscany.sca.implementation.web.ContextScriptProcessorExtensionPoint
new file mode 100644
index 0000000000..960ae30552
--- /dev/null
+++ b/sandbox/sebastien/java/sca-node/modules/implementation-web/src/main/resources/META-INF/services/org.apache.tuscany.sca.implementation.web.ContextScriptProcessorExtensionPoint
@@ -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 ModuleActivator
+org.apache.tuscany.sca.implementation.web.DefaultContextScriptProcessorExtensionPoint
+