Author: antelder
Date: Thu Feb 26 12:18:38 2009
New Revision: 748109

URL: http://svn.apache.org/viewvc?rev=748109&view=rev
Log:
CHange webapp host so it doesn't need any static singleton (TUSCANY-2881) and 
make webapp host only be used if no other hosts (like jetty) are in the 
classpath

Modified:
    tuscany/java/sca/modules/host-webapp/pom.xml
    
tuscany/java/sca/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/ServletHostHelper.java
    
tuscany/java/sca/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/TuscanyServletFilter.java
    
tuscany/java/sca/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/WebAppModuleActivator.java
    
tuscany/java/sca/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/WebAppServletHost.java
    
tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java

Modified: tuscany/java/sca/modules/host-webapp/pom.xml
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/host-webapp/pom.xml?rev=748109&r1=748108&r2=748109&view=diff
==============================================================================
--- tuscany/java/sca/modules/host-webapp/pom.xml (original)
+++ tuscany/java/sca/modules/host-webapp/pom.xml Thu Feb 26 12:18:38 2009
@@ -46,14 +46,12 @@
             <groupId>org.apache.tuscany.sca</groupId>
             <artifactId>tuscany-node-api</artifactId>
             <version>2.0-SNAPSHOT</version>
-            <scope>compile</scope>
         </dependency>
                 
         <dependency>
             <groupId>org.apache.tuscany.sca</groupId>
             <artifactId>tuscany-node-impl</artifactId>
             <version>2.0-SNAPSHOT</version>
-            <scope>runtime</scope>
         </dependency>
 
         <dependency>

Modified: 
tuscany/java/sca/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/ServletHostHelper.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/ServletHostHelper.java?rev=748109&r1=748108&r2=748109&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/ServletHostHelper.java
 (original)
+++ 
tuscany/java/sca/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/ServletHostHelper.java
 Thu Feb 26 12:18:38 2009
@@ -29,6 +29,7 @@
 import java.net.URL;
 import java.util.Collections;
 import java.util.Enumeration;
+import java.util.List;
 import java.util.logging.Logger;
 
 import javax.naming.InitialContext;
@@ -37,10 +38,13 @@
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
 
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
 import org.apache.tuscany.sca.host.http.ServletHost;
+import org.apache.tuscany.sca.host.http.ServletHostExtensionPoint;
 import org.apache.tuscany.sca.node.Contribution;
 import org.apache.tuscany.sca.node.Node;
 import org.apache.tuscany.sca.node.NodeFactory;
+import org.apache.tuscany.sca.node.impl.NodeImpl;
 import org.oasisopen.sca.ServiceRuntimeException;
 
 public class ServletHostHelper {
@@ -48,31 +52,30 @@
 
     public static final String SCA_NODE_ATTRIBUTE = Node.class.getName();
 
-    public static ServletHost getServletHost() {
-        return WebAppServletHost.getInstance();
-    }
+//    public static ServletHost getServletHost() {
+//        return WebAppServletHost.getInstance();
+//    }
 
     public static void init(ServletConfig servletConfig) {
         init(servletConfig.getServletContext());
     }
     
-    public static void init(final ServletContext servletContext) {
-        if (servletContext.getAttribute(SCA_NODE_ATTRIBUTE) == null) {
+    public static ServletHost init(final ServletContext servletContext) {
+        Node node = (Node)servletContext.getAttribute(SCA_NODE_ATTRIBUTE);
+        if (node == null) {
             try {
-                servletContext.setAttribute(SCA_NODE_ATTRIBUTE, 
createNode(servletContext));
-                WebAppServletHost.getInstance().init(new ServletConfig() {
+                node = createNode(servletContext);
+                servletContext.setAttribute(SCA_NODE_ATTRIBUTE, node);
+                getServletHost(node).init(new ServletConfig() {
                     public String getInitParameter(String name) {
                         return servletContext.getInitParameter(name);
                     }
-
                     public Enumeration<?> getInitParameterNames() {
                         return servletContext.getInitParameterNames();
                     }
-
                     public ServletContext getServletContext() {
                         return servletContext;
                     }
-
                     public String getServletName() {
                         return servletContext.getServletContextName();
                     }});
@@ -80,8 +83,24 @@
                 throw new RuntimeException(e);
             }
         }
+        return getServletHost(node);
     }
     
+    private static WebAppServletHost getServletHost(Node node) {
+        NodeImpl nodeImpl = (NodeImpl) node;
+        ExtensionPointRegistry eps = nodeImpl.getExtensionPoints();
+        ServletHostExtensionPoint servletHosts = 
eps.getExtensionPoint(ServletHostExtensionPoint.class);
+        List<ServletHost> hosts = servletHosts.getServletHosts();
+        if (hosts == null || hosts.size() < 1) {
+            throw new IllegalStateException("No ServletHost found");
+        }
+        ServletHost servletHost = hosts.get(0);
+        if (!(servletHost instanceof WebAppServletHost)) {
+            throw new IllegalStateException("unexpected ServletHost type: " + 
servletHost);
+        }
+        return (WebAppServletHost) servletHost;
+    }
+
     private static Node createNode(final ServletContext servletContext) throws 
ServletException {
         String contextPath = initContextPath(servletContext);
         String contributionRoot = getContributionRoot(servletContext);

Modified: 
tuscany/java/sca/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/TuscanyServletFilter.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/TuscanyServletFilter.java?rev=748109&r1=748108&r2=748109&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/TuscanyServletFilter.java
 (original)
+++ 
tuscany/java/sca/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/TuscanyServletFilter.java
 Thu Feb 26 12:18:38 2009
@@ -30,6 +30,8 @@
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
 
+import org.apache.tuscany.sca.host.http.ServletHost;
+
 
 /**
  * A Servlet filter that forwards service requests to the Servlets registered 
with
@@ -41,10 +43,11 @@
     private static final long serialVersionUID = 1L;
     
     private transient ServletContext context;
+    private transient ServletHost servletHost;
 
     public void init(final FilterConfig config) throws ServletException {
         context = config.getServletContext();
-        ServletHostHelper.init(context);
+        servletHost = ServletHostHelper.init(context);
     }
 
     public void destroy() {
@@ -65,7 +68,7 @@
         }
 
         // Get a request dispatcher for the Servlet mapped to that path
-        RequestDispatcher dispatcher = 
ServletHostHelper.getServletHost().getRequestDispatcher(path);
+        RequestDispatcher dispatcher = servletHost.getRequestDispatcher(path);
         if (dispatcher != null) {
 
             // Let the dispatcher forward the request to the Servlet 

Modified: 
tuscany/java/sca/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/WebAppModuleActivator.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/WebAppModuleActivator.java?rev=748109&r1=748108&r2=748109&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/WebAppModuleActivator.java
 (original)
+++ 
tuscany/java/sca/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/WebAppModuleActivator.java
 Thu Feb 26 12:18:38 2009
@@ -39,15 +39,9 @@
             
extensionPointRegistry.getExtensionPoint(ServletHostExtensionPoint.class);
 
         List<ServletHost> hosts = servletHosts.getServletHosts();
-        ServletHost host = null;
-        try {
-           host = ServletHostHelper.getServletHost();
-        } catch (NoClassDefFoundError e) {
-               // ignore 
-        }
-        if (host != null) {
-            hosts.clear();
-            hosts.add(host);
+        // Only add webapp host if no other host already registered (eg jetty 
in standalone)
+        if (hosts != null && hosts.size() < 1) {
+            hosts.add(new WebAppServletHost());
         }
     }
 

Modified: 
tuscany/java/sca/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/WebAppServletHost.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/WebAppServletHost.java?rev=748109&r1=748108&r2=748109&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/WebAppServletHost.java
 (original)
+++ 
tuscany/java/sca/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/WebAppServletHost.java
 Thu Feb 26 12:18:38 2009
@@ -51,7 +51,7 @@
 
     public static final String SCA_NODE_ATTRIBUTE = Node.class.getName();
 
-    private static final WebAppServletHost instance = new WebAppServletHost();
+//    private static final WebAppServletHost instance = new 
WebAppServletHost();
 
     private Map<String, Servlet> servlets;
     private String contextPath = "/";
@@ -61,7 +61,7 @@
     private ServletContext servletContext;
     private Map<String, Object> tempAttributes = new HashMap<String, Object>();
 
-    WebAppServletHost() {
+    public WebAppServletHost() {
         servlets = new HashMap<String, Servlet>();
     }
 
@@ -199,9 +199,9 @@
         return null;
     }
 
-    public static WebAppServletHost getInstance() {
-        return instance;
-    }
+//    public static WebAppServletHost getInstance() {
+//        return instance;
+//    }
 
     public void init(ServletConfig config) throws ServletException {
 

Modified: 
tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java?rev=748109&r1=748108&r2=748109&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java
 (original)
+++ 
tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java
 Thu Feb 26 12:18:38 2009
@@ -712,4 +712,8 @@
         }
         throw new ServiceRuntimeException("no deployable composite found");
     }
+
+    public ExtensionPointRegistry getExtensionPoints() {
+        return extensionPoints;
+    }
 }


Reply via email to