[jboss-cvs] JBossAS SVN: r96608 - in trunk/tomcat/src/main/java/org/jboss/web/tomcat/service: session and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Nov 19 21:12:10 EST 2009


Author: bstansberry at jboss.com
Date: 2009-11-19 21:12:10 -0500 (Thu, 19 Nov 2009)
New Revision: 96608

Modified:
   trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/JBossContextConfig.java
   trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatDeployment.java
   trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/session/JBossManager.java
Log:
[JBAS-7473] Configure clustered session manager in JBossContextConfig

Modified: trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/JBossContextConfig.java
===================================================================
--- trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/JBossContextConfig.java	2009-11-20 00:12:12 UTC (rev 96607)
+++ trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/JBossContextConfig.java	2009-11-20 02:12:10 UTC (rev 96608)
@@ -47,8 +47,10 @@
 import javax.xml.namespace.QName;
 
 import org.apache.catalina.Container;
+import org.apache.catalina.Host;
 import org.apache.catalina.Lifecycle;
 import org.apache.catalina.LifecycleEvent;
+import org.apache.catalina.Manager;
 import org.apache.catalina.Wrapper;
 import org.apache.catalina.core.ContextJarRepository;
 import org.apache.catalina.core.StandardContext;
@@ -61,6 +63,7 @@
 import org.apache.catalina.deploy.jsp.TagLibraryInfo;
 import org.apache.catalina.deploy.jsp.TagLibraryValidatorInfo;
 import org.apache.catalina.deploy.jsp.TagVariableInfo;
+import org.apache.catalina.session.StandardManager;
 import org.apache.catalina.startup.ContextConfig;
 import org.apache.naming.resources.ProxyDirContext;
 import org.apache.tomcat.util.IntrospectionUtils;
@@ -119,7 +122,11 @@
 import org.jboss.web.deployers.MergedJBossWebMetaDataDeployer;
 import org.jboss.web.deployers.ServletContainerInitializerDeployer;
 import org.jboss.web.tomcat.metadata.ContextMetaData;
+import org.jboss.web.tomcat.metadata.ManagerMetaData;
 import org.jboss.web.tomcat.metadata.ParameterMetaData;
+import org.jboss.web.tomcat.service.session.AbstractJBossManager;
+import org.jboss.web.tomcat.service.session.JBossCacheManager;
+import org.jboss.web.tomcat.service.session.distributedcache.spi.ClusteringNotSupportedException;
 import org.jboss.xb.binding.Unmarshaller;
 import org.jboss.xb.binding.UnmarshallerFactory;
 import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
@@ -786,8 +793,8 @@
             // Context/Manager
             if (contextMetaData.getManager() != null)
             {
-               org.apache.catalina.Manager manager = (org.apache.catalina.Manager)TomcatService.getInstance
-                  (contextMetaData.getManager(), "org.apache.catalina.session.StandardManager");
+               Manager manager = initManager(contextMetaData.getManager());
+               
                if (contextMetaData.getManager().getStore() != null)
                {
                   org.apache.catalina.Store store = (org.apache.catalina.Store)TomcatService.getInstance
@@ -1205,6 +1212,68 @@
          }
       }
    }
+
+   protected Manager initManager(ManagerMetaData managerMetaData) throws Exception,
+         ClusteringNotSupportedException, NoClassDefFoundError
+   {
+      JBossWebMetaData webMetaData = metaDataLocal.get();
+      
+      String defaultManagerClass = webMetaData.getDistributable() == null 
+            ? StandardManager.class.getName() : JBossCacheManager.class.getName();      
+      Manager manager = (Manager)TomcatService.getInstance(managerMetaData, defaultManagerClass);
+      
+      if (manager instanceof AbstractJBossManager)
+      {
+         // TODO next 10+ lines just to create a 'name' that the AbstractJBossManager
+         // impls don't even use
+         Host host = null;
+         Container container = context;
+         while (host == null && container != null)
+         {
+            container = container.getParent();
+            if (container instanceof Host)
+            {
+               host = (Host) container;
+            }
+         }
+         String hostName = host.getName();
+         String name = "//" + ((hostName == null) ? "localhost" : hostName) + webMetaData.getContextRoot();
+         
+         try
+         {
+            ((AbstractJBossManager) manager).init(name, webMetaData);
+         }
+         catch (ClusteringNotSupportedException e)
+         {
+            if (managerMetaData.getClassName() == null)
+            {  
+               // JBAS-3513 Just log a WARN, not an ERROR
+               log.warn("Failed to setup clustering, clustering disabled. ClusteringNotSupportedException: " + e.getMessage());
+               manager = (Manager)TomcatService.getInstance(managerMetaData, StandardManager.class.getName());
+            }
+            else
+            {
+               throw e;
+            }
+         }
+         catch (NoClassDefFoundError ncdf)
+         {
+            if (managerMetaData.getClassName() == null)
+            {  
+               // JBAS-3513 Just log a WARN, not an ERROR
+               log.debug("Classes needed for clustered webapp unavailable", ncdf);
+               log.warn("Failed to setup clustering, clustering disabled. NoClassDefFoundError: " + ncdf.getMessage());
+               manager = (Manager)TomcatService.getInstance(managerMetaData, StandardManager.class.getName());
+            }
+            else
+            {
+               throw ncdf;
+            }
+            
+         }
+      }
+      return manager;
+   }
    
    protected void completeConfig() {
 

Modified: trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatDeployment.java
===================================================================
--- trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatDeployment.java	2009-11-20 00:12:12 UTC (rev 96607)
+++ trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatDeployment.java	2009-11-20 02:12:10 UTC (rev 96608)
@@ -35,7 +35,6 @@
 import java.util.Map;
 import java.util.Set;
 
-import javax.management.Attribute;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 import javax.naming.Context;
@@ -70,8 +69,6 @@
 import org.jboss.web.tomcat.service.TomcatInjectionContainer;
 import org.jboss.web.tomcat.service.WebCtxLoader;
 import org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve;
-import org.jboss.web.tomcat.service.session.AbstractJBossManager;
-import org.jboss.web.tomcat.service.session.distributedcache.spi.ClusteringNotSupportedException;
 import org.omg.CORBA.ORB;
 
 /**
@@ -329,42 +326,6 @@
          throw new DeploymentException("URL " + warUrlStr + " deployment failed");
       }
 
-      // Clustering
-      if (config.getOverrideDistributableManager() && metaData.getDistributable() != null)
-      {
-         // Try to initate clustering, fallback to standard if no clustering is
-         // available
-         try
-         {
-            AbstractJBossManager manager = null;
-            String managerClassName = config.getManagerClass();
-            Class managerClass = Thread.currentThread().getContextClassLoader().loadClass(managerClassName);
-            manager = (AbstractJBossManager)managerClass.newInstance();
-            String name = "//" + ((hostName == null) ? "localhost" : hostName) + ctxPath;
-            manager.init(name, metaData);
-
-            server.setAttribute(objectName, new Attribute("manager", manager));
-
-            log.debug("Enabled clustering support for ctxPath=" + ctxPath);
-         }
-         catch (ClusteringNotSupportedException e)
-         {
-            // JBAS-3513 Just log a WARN, not an ERROR
-            log.warn("Failed to setup clustering, clustering disabled. ClusteringNotSupportedException: " + e.getMessage());
-         }
-         catch (NoClassDefFoundError ncdf)
-         {
-            // JBAS-3513 Just log a WARN, not an ERROR
-            log.debug("Classes needed for clustered webapp unavailable", ncdf);
-            log.warn("Failed to setup clustering, clustering disabled. NoClassDefFoundError: " + ncdf.getMessage());
-         }
-         catch (Throwable t)
-         {
-            // TODO consider letting this through and fail the deployment
-            log.error("Failed to setup clustering, clustering disabled. Exception: ", t);
-         }
-      }
-
       /*
        * Add security association valve after the authorization valves so that the authenticated user may be associated
        * with the request thread/session.
@@ -504,6 +465,7 @@
        * else scoped class loading does not see the war level overrides. The call to setWarURL adds these paths to the
        * deployment UCL.
        */
+      @SuppressWarnings("unchecked")
       List<URL> classpath = unit.getAttachment("org.jboss.web.expandedWarClasspath", List.class);
       if (classpath == null && unit instanceof VFSDeploymentUnit)
       {

Modified: trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/session/JBossManager.java
===================================================================
--- trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/session/JBossManager.java	2009-11-20 00:12:12 UTC (rev 96607)
+++ trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/session/JBossManager.java	2009-11-20 02:12:10 UTC (rev 96608)
@@ -963,6 +963,44 @@
       return objectName_;
    }
 
+   // ------------------------------------------ Tomcat StandardManager Setters
+   
+   // Following are setters exposed by Tomcat's StandardManager. We also
+   // expose them so if someone uses them in the default conf/context.xml
+   // we won't blow up during initialization
+   
+   public void setPathname(String pathname)
+   {
+      if (pathname != null && pathname.length() > 0)
+      {
+         log_.debug(getClass().getSimpleName() + " is ignoring the pathname attribute");
+      }
+   }
+   
+   public void setAlgorithm(String algorithm)
+   {
+      if (algorithm != null && algorithm.length() > 0)
+      {
+         log_.debug(getClass().getSimpleName() + " is ignoring the algorithm algorithm");
+      }
+   }
+   
+   public void setEntropy(String entropy)
+   {
+      if (entropy != null && entropy.length() > 0)
+      {
+         log_.debug(getClass().getSimpleName() + " is ignoring the entropy algorithm");
+      }
+   }
+   
+   public void setRandomClass(String randomClass)
+   {
+      if (randomClass != null && randomClass.length() > 0)
+      {
+         log_.debug(getClass().getSimpleName() + " is ignoring the randomClass algorithm");
+      }
+   }
+
    // ------------------------------------------------------------------ Protected
 
    /**




More information about the jboss-cvs-commits mailing list