You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2005/10/28 08:34:49 UTC

svn commit: r329128 - in /geronimo/trunk/modules: jetty-builder/src/java/org/apache/geronimo/jetty/deployment/ tomcat-builder/src/java/org/apache/geronimo/tomcat/deployment/ web-builder/src/java/org/apache/geronimo/web/deployment/

Author: djencks
Date: Thu Oct 27 23:34:18 2005
New Revision: 329128

URL: http://svn.apache.org/viewcvs?rev=329128&view=rev
Log:
GERONIMO-513, different implementation.  Make web apps depend on all managed connection factories in app and all ejbs in app

Added:
    geronimo/trunk/modules/web-builder/src/java/org/apache/geronimo/web/deployment/AbstractWebModuleBuilder.java
Modified:
    geronimo/trunk/modules/jetty-builder/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java
    geronimo/trunk/modules/tomcat-builder/src/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java

Modified: geronimo/trunk/modules/jetty-builder/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/jetty-builder/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java?rev=329128&r1=329127&r2=329128&view=diff
==============================================================================
--- geronimo/trunk/modules/jetty-builder/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java (original)
+++ geronimo/trunk/modules/jetty-builder/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java Thu Oct 27 23:34:18 2005
@@ -56,7 +56,6 @@
 import org.apache.geronimo.common.DeploymentException;
 import org.apache.geronimo.deployment.service.ServiceConfigBuilder;
 import org.apache.geronimo.deployment.util.DeploymentUtil;
-import org.apache.geronimo.deployment.xmlbeans.XmlBeansUtil;
 import org.apache.geronimo.deployment.xbeans.ClassFilterType;
 import org.apache.geronimo.deployment.xbeans.DependencyType;
 import org.apache.geronimo.deployment.xbeans.GbeanType;
@@ -90,6 +89,7 @@
 import org.apache.geronimo.security.util.URLPattern;
 import org.apache.geronimo.transaction.context.OnlineUserTransaction;
 import org.apache.geronimo.web.deployment.GenericToSpecificPlanConverter;
+import org.apache.geronimo.web.deployment.AbstractWebModuleBuilder;
 import org.apache.geronimo.xbeans.geronimo.naming.GerMessageDestinationType;
 import org.apache.geronimo.xbeans.geronimo.web.jetty.JettyWebAppDocument;
 import org.apache.geronimo.xbeans.geronimo.web.jetty.JettyWebAppType;
@@ -120,7 +120,6 @@
 import org.apache.geronimo.xbeans.j2ee.WebAppType;
 import org.apache.geronimo.xbeans.j2ee.WebResourceCollectionType;
 import org.apache.geronimo.xbeans.j2ee.WelcomeFileListType;
-import org.apache.xmlbeans.XmlCursor;
 import org.apache.xmlbeans.XmlException;
 import org.apache.xmlbeans.XmlObject;
 import org.mortbay.http.BasicAuthenticator;
@@ -132,7 +131,7 @@
 /**
  * @version $Rev$ $Date$
  */
-public class JettyModuleBuilder implements ModuleBuilder {
+public class JettyModuleBuilder extends AbstractWebModuleBuilder {
     private final static Log log = LogFactory.getLog(JettyModuleBuilder.class);
     private final List defaultParentId;
     private final ObjectName jettyContainerObjectName;
@@ -404,14 +403,14 @@
         } catch (URISyntaxException e) {
             throw new DeploymentException("Could not construct URI for location of war entry", e);
         }
-        
+
         if (jettyWebApp.isSetInverseClassloading()) {
             earContext.setInverseClassloading(jettyWebApp.getInverseClassloading());
         }
-        
+
         ClassFilterType[] filters = jettyWebApp.getHiddenClassesArray();
         ServiceConfigBuilder.addHiddenClasses(earContext, filters);
-        
+
         filters = jettyWebApp.getNonOverridableClassesArray();
         ServiceConfigBuilder.addNonOverridableClasses(earContext, filters);
     }
@@ -472,6 +471,12 @@
                 hosts[i] = hosts[i].trim();
             }
             webModuleData.setAttribute("virtualHosts", hosts);
+
+            //Add dependencies on managed connection factories and ejbs in this app
+            //This is overkill, but allows for people not using java:comp context (even though we don't support it)
+            //and sidesteps the problem of circular references between ejbs.
+            Set dependencies = findGBeanDependencies(earContext);
+            webModuleData.getDependencies().addAll(dependencies);
 
             webModuleData.setAttribute("componentContext", compContext);
             webModuleData.setAttribute("userTransaction", userTransaction);

Modified: geronimo/trunk/modules/tomcat-builder/src/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/tomcat-builder/src/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java?rev=329128&r1=329127&r2=329128&view=diff
==============================================================================
--- geronimo/trunk/modules/tomcat-builder/src/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java (original)
+++ geronimo/trunk/modules/tomcat-builder/src/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java Thu Oct 27 23:34:18 2005
@@ -87,6 +87,7 @@
 import org.apache.geronimo.tomcat.util.SecurityHolder;
 import org.apache.geronimo.transaction.context.OnlineUserTransaction;
 import org.apache.geronimo.web.deployment.GenericToSpecificPlanConverter;
+import org.apache.geronimo.web.deployment.AbstractWebModuleBuilder;
 import org.apache.geronimo.xbeans.geronimo.naming.GerMessageDestinationType;
 import org.apache.geronimo.xbeans.geronimo.web.tomcat.TomcatWebAppDocument;
 import org.apache.geronimo.xbeans.geronimo.web.tomcat.TomcatWebAppType;
@@ -112,7 +113,7 @@
 /**
  * @version $Rev: 161588 $ $Date: 2005-04-16 12:06:59 -0600 (Sat, 16 Apr 2005) $
  */
-public class TomcatModuleBuilder implements ModuleBuilder {
+public class TomcatModuleBuilder extends AbstractWebModuleBuilder {
 
     private static final Log log = LogFactory.getLog(TomcatModuleBuilder.class);
 
@@ -358,10 +359,10 @@
         if (tomcatWebApp.isSetInverseClassloading()) {
             earContext.setInverseClassloading(tomcatWebApp.getInverseClassloading());
         }
-        
+
         ClassFilterType[] filters = tomcatWebApp.getHiddenClassesArray();
         ServiceConfigBuilder.addHiddenClasses(earContext, filters);
-        
+
         filters = tomcatWebApp.getNonOverridableClassesArray();
         ServiceConfigBuilder.addNonOverridableClasses(earContext, filters);
     }
@@ -417,9 +418,15 @@
             Set securityRoles = collectRoleNames(webApp);
             Map rolePermissions = new HashMap();
 
-            URI baseUri = URI.create(webModule.getTargetPath() + "/");       
+            URI baseUri = URI.create(webModule.getTargetPath() + "/");
             webModuleData.setAttribute("webAppRoot", baseUri);
             webModuleData.setAttribute("contextPath", webModule.getContextRoot());
+
+            //Add dependencies on managed connection factories and ejbs in this app
+            //This is overkill, but allows for people not using java:comp context (even though we don't support it)
+            //and sidesteps the problem of circular references between ejbs.
+            Set dependencies = findGBeanDependencies(earContext);
+            webModuleData.getDependencies().addAll(dependencies);
 
             webModuleData.setAttribute("componentContext", compContext);
             webModuleData.setAttribute("userTransaction", userTransaction);

Added: geronimo/trunk/modules/web-builder/src/java/org/apache/geronimo/web/deployment/AbstractWebModuleBuilder.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/web-builder/src/java/org/apache/geronimo/web/deployment/AbstractWebModuleBuilder.java?rev=329128&view=auto
==============================================================================
--- geronimo/trunk/modules/web-builder/src/java/org/apache/geronimo/web/deployment/AbstractWebModuleBuilder.java (added)
+++ geronimo/trunk/modules/web-builder/src/java/org/apache/geronimo/web/deployment/AbstractWebModuleBuilder.java Thu Oct 27 23:34:18 2005
@@ -0,0 +1,58 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation
+ *
+ *  Licensed 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.geronimo.web.deployment;
+
+import java.util.Set;
+import java.util.HashSet;
+
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
+
+import org.apache.geronimo.j2ee.deployment.ModuleBuilder;
+import org.apache.geronimo.j2ee.deployment.EARContext;
+import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
+
+/**
+ * @version $Rev:  $ $Date:  $
+ */
+public abstract class AbstractWebModuleBuilder implements ModuleBuilder {
+    protected static final ObjectName MANAGED_CONNECTION_FACTORY_PATTERN;
+    protected static final ObjectName STATELESS_SESSION_BEAN_PATTERN;
+    protected static final ObjectName STATEFUL_SESSION_BEAN_PATTERN;
+    protected static final ObjectName ENTITY_BEAN_PATTERN;
+
+    static {
+        try {
+            MANAGED_CONNECTION_FACTORY_PATTERN = ObjectName.getInstance("*:j2eeType=" + NameFactory.JCA_MANAGED_CONNECTION_FACTORY +  ",*");
+            STATELESS_SESSION_BEAN_PATTERN = ObjectName.getInstance("*:j2eeType=" + NameFactory.STATELESS_SESSION_BEAN +  ",*");
+            STATEFUL_SESSION_BEAN_PATTERN = ObjectName.getInstance("*:j2eeType=" + NameFactory.STATEFUL_SESSION_BEAN +  ",*");
+            ENTITY_BEAN_PATTERN = ObjectName.getInstance("*:j2eeType=" + NameFactory.ENTITY_BEAN +  ",*");
+        } catch (MalformedObjectNameException e) {
+            throw new RuntimeException(e);
+        }
+
+    }
+
+    protected Set findGBeanDependencies(EARContext earContext) {
+        Set dependencies = new HashSet();
+        dependencies.addAll(earContext.listGBeans(MANAGED_CONNECTION_FACTORY_PATTERN));
+        dependencies.addAll(earContext.listGBeans(STATELESS_SESSION_BEAN_PATTERN));
+        dependencies.addAll(earContext.listGBeans(STATEFUL_SESSION_BEAN_PATTERN));
+        dependencies.addAll(earContext.listGBeans(ENTITY_BEAN_PATTERN));
+        return dependencies;
+    }
+}