You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by xu...@apache.org on 2010/07/21 09:14:47 UTC

svn commit: r966115 - in /geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat: GeronimoStandardContext.java HostGBean.java TomcatManagerImpl.java

Author: xuhaihong
Date: Wed Jul 21 07:14:46 2010
New Revision: 966115

URL: http://svn.apache.org/viewvc?rev=966115&view=rev
Log:
Pass the initial web.xml to security builder while starting the web application

Modified:
    geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/GeronimoStandardContext.java
    geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/HostGBean.java
    geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/TomcatManagerImpl.java

Modified: geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/GeronimoStandardContext.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/GeronimoStandardContext.java?rev=966115&r1=966114&r2=966115&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/GeronimoStandardContext.java (original)
+++ geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/GeronimoStandardContext.java Wed Jul 21 07:14:46 2010
@@ -17,6 +17,7 @@
 package org.apache.geronimo.tomcat;
 
 import java.beans.PropertyChangeListener;
+import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -40,7 +41,6 @@ import javax.servlet.Servlet;
 import javax.servlet.ServletContainerInitializer;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
-
 import org.apache.catalina.Container;
 import org.apache.catalina.ContainerListener;
 import org.apache.catalina.Engine;
@@ -82,6 +82,8 @@ import org.apache.geronimo.webservices.P
 import org.apache.geronimo.webservices.WebServiceContainer;
 import org.apache.geronimo.webservices.WebServiceContainerInvoker;
 import org.apache.naming.resources.FileDirContext;
+import org.apache.openejb.jee.JaxbJavaee;
+import org.apache.openejb.jee.WebApp;
 import org.apache.tomcat.InstanceManager;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.ServiceRegistration;
@@ -307,11 +309,17 @@ public class GeronimoStandardContext ext
     private void addJACCSecurityLifecycleListener(TomcatWebAppContext tomcatWebAppContext) throws DeploymentException {
         float schemaVersion = (Float) tomcatWebAppContext.getDeploymentAttribute(WebAttributeName.SCHEMA_VERSION.name());
         boolean metaComplete = (Boolean) tomcatWebAppContext.getDeploymentAttribute(WebAttributeName.META_COMPLETE.name());
-        addLifecycleListener(new JACCSecurityLifecycleListener(bundle,
-                null, 
-                schemaVersion >= 2.5f && !metaComplete,
-                tomcatWebAppContext.getApplicationPolicyConfigurationManager(),
-                tomcatWebAppContext.getSecurityHolder().getPolicyContextID()));
+        try {
+            WebApp webApp = tomcatWebAppContext.getDeploymentDescriptor() == null ? null : (WebApp) JaxbJavaee.unmarshalJavaee(WebApp.class, new ByteArrayInputStream(tomcatWebAppContext
+                    .getDeploymentDescriptor().getBytes()));
+            addLifecycleListener(new JACCSecurityLifecycleListener(bundle, webApp, schemaVersion >= 2.5f && !metaComplete, tomcatWebAppContext.getApplicationPolicyConfigurationManager(),
+                    tomcatWebAppContext.getSecurityHolder().getPolicyContextID()));
+        } catch (DeploymentException e) {
+            throw e;
+        } catch (Exception e) {
+            logger.error("fail to parse the web.xml file while starting the web application", e);
+            throw new DeploymentException("fail to parse the web.xml file while starting the web application", e);
+        }
     }
 
     private final Object instanceListenersLock = new Object();

Modified: geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/HostGBean.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/HostGBean.java?rev=966115&r1=966114&r2=966115&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/HostGBean.java (original)
+++ geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/HostGBean.java Wed Jul 21 07:14:46 2010
@@ -40,44 +40,44 @@ import org.slf4j.LoggerFactory;
 public class HostGBean extends BaseGBean implements GBeanLifecycle, ObjectRetriever {
 
     private static final Logger log = LoggerFactory.getLogger(HostGBean.class);
-    
+
     public static final String J2EE_TYPE = "Host";
     private static final String WORKDIR = "workDir";
     private static final String NAME = "name";
-    
+
     private final Host host;
     private final EngineGBean engine;
-    
+
     public HostGBean(){
         host = null;
         engine = null;
     }
 
-    public HostGBean(String className, 
-            Map initParams, 
-            ArrayList aliases,
-            ObjectRetriever realmGBean,            
+    public HostGBean(String className,
+            Map initParams,
+            ArrayList<String> aliases,
+            ObjectRetriever realmGBean,
             ValveGBean tomcatValveChain,
             LifecycleListenerGBean listenerChain,
             CatalinaClusterGBean clusterGBean,
             ManagerGBean manager,
             EngineGBean engine) throws Exception {
         super(); // TODO: make it an attribute
-        
+
         //Validate
         if (className == null){
             className = "org.apache.catalina.core.StandardHost";
         }
-        
+
         if (initParams == null){
             throw new IllegalArgumentException("Must have a 'name' value in initParams.");
         }
-        
+
         //Be sure the name has been declared.
         if (!initParams.containsKey(NAME)){
             throw new IllegalArgumentException("Must have a 'name' value initParams.");
         }
-        
+
         //Be sure we have a default working directory
         if (!initParams.containsKey(WORKDIR)){
             initParams.put(WORKDIR, "work");
@@ -85,10 +85,10 @@ public class HostGBean extends BaseGBean
 
         //Create the Host object
         host = (Host)Class.forName(className).newInstance();
-        
+
         //Set the parameters
         setParameters(host, initParams);
-        
+
         //Add aliases, if any
         if (aliases != null){
             for (Iterator iter = aliases.iterator(); iter.hasNext();) {
@@ -96,13 +96,13 @@ public class HostGBean extends BaseGBean
                 host.addAlias(alias);
             }
         }
-        
+
         if (realmGBean != null)
             host.setRealm((Realm)realmGBean.getInternalObject());
 
         //Add the valve list
         if (host instanceof StandardHost){
-            
+
             if (tomcatValveChain != null){
                 ValveGBean valveGBean = tomcatValveChain;
                 while(valveGBean != null){
@@ -110,7 +110,7 @@ public class HostGBean extends BaseGBean
                     valveGBean = valveGBean.getNextValve();
                 }
             }
-            
+
             if (listenerChain != null){
                 LifecycleListenerGBean listenerGBean = listenerChain;
                 while(listenerGBean != null){
@@ -118,14 +118,14 @@ public class HostGBean extends BaseGBean
                     listenerGBean = listenerGBean.getNextListener();
                 }
             }
-            
+
        }
 
         //Add clustering
         if (clusterGBean != null){
             host.setCluster((Cluster)clusterGBean.getInternalObject());
         }
-        
+
         //Add manager
         if (manager != null)
             host.setManager((Manager)manager.getInternalObject());
@@ -169,11 +169,11 @@ public class HostGBean extends BaseGBean
         infoFactory.addReference("Manager", ManagerGBean.class, ManagerGBean.J2EE_TYPE);
         infoFactory.addReference("Engine", EngineGBean.class, GBeanInfoBuilder.DEFAULT_J2EE_TYPE);
         infoFactory.addOperation("getInternalObject");
-        infoFactory.setConstructor(new String[] { 
-                "className", 
-                "initParams", 
-                "aliases", 
-                "RealmGBean", 
+        infoFactory.setConstructor(new String[] {
+                "className",
+                "initParams",
+                "aliases",
+                "RealmGBean",
                 "TomcatValveChain",
                 "LifecycleListenerChain",
                 "CatalinaCluster",

Modified: geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/TomcatManagerImpl.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/TomcatManagerImpl.java?rev=966115&r1=966114&r2=966115&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/TomcatManagerImpl.java (original)
+++ geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/TomcatManagerImpl.java Wed Jul 21 07:14:46 2010
@@ -265,32 +265,31 @@ public class TomcatManagerImpl implement
         if(protocol == null) {
             return getConnectors();
         }
-        List result = new ArrayList();
+        List<TomcatWebConnector> result = new ArrayList<TomcatWebConnector>();
         ProxyManager proxyManager = kernel.getProxyManager();
         AbstractNameQuery query = new AbstractNameQuery(TomcatWebConnector.class.getName());
-        Set names = kernel.listGBeans(query);
-        for (Iterator it = names.iterator(); it.hasNext();) {
-            AbstractName name = (AbstractName) it.next();
+        Set<AbstractName> names = kernel.listGBeans(query);
+        for (AbstractName name : names) {
             try {
                 if (kernel.getAttribute(name, "protocol").equals(protocol)) {
-                    result.add(proxyManager.createProxy(name, TomcatWebConnector.class.getClassLoader()));
+                    result.add((TomcatWebConnector)proxyManager.createProxy(name, TomcatWebConnector.class.getClassLoader()));
                 }
             } catch (Exception e) {
                 log.error("Unable to check the protocol for a connector", e);
             }
         }
-        return (TomcatWebConnector[]) result.toArray(new TomcatWebConnector[names.size()]);
+        return result.toArray(new TomcatWebConnector[names.size()]);
     }
 
     public WebAccessLog getAccessLog(WebContainer container) {
         AbstractNameQuery query = new AbstractNameQuery(TomcatLogManager.class.getName());
-        Set names = kernel.listGBeans(query);
+        Set<AbstractName> names = kernel.listGBeans(query);
         if(names.size() == 0) {
             return null;
         } else if(names.size() > 1) {
             throw new IllegalStateException("Should not be more than one Tomcat access log manager");
         }
-        return (WebAccessLog) kernel.getProxyManager().createProxy((AbstractName)names.iterator().next(), TomcatLogManager.class.getClassLoader());
+        return (WebAccessLog) kernel.getProxyManager().createProxy(names.iterator().next(), TomcatLogManager.class.getClassLoader());
     }
 
     public List<ConnectorType> getConnectorTypes() {