[jboss-cvs] JBossAS SVN: r100731 - in trunk: tomcat/src/main/java/org/jboss/web/tomcat/service/deployers and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Feb 8 23:09:17 EST 2010


Author: bstansberry at jboss.com
Date: 2010-02-08 23:09:16 -0500 (Mon, 08 Feb 2010)
New Revision: 100731

Added:
   trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/ondemand/DefaultOnDemandContextIntegrator.java
Modified:
   trunk/server/src/etc/deploy/admin-console-activator-jboss-beans.xml
   trunk/server/src/etc/deploy/jbossws-console-activator-jboss-beans.xml
   trunk/server/src/etc/deploy/jmx-console-activator-jboss-beans.xml
   trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatService.java
Log:
[JBAS-7713] Improve testability; have TomcatService delegate the on-demand context integration work

Modified: trunk/server/src/etc/deploy/admin-console-activator-jboss-beans.xml
===================================================================
--- trunk/server/src/etc/deploy/admin-console-activator-jboss-beans.xml	2010-02-09 03:33:00 UTC (rev 100730)
+++ trunk/server/src/etc/deploy/admin-console-activator-jboss-beans.xml	2010-02-09 04:09:16 UTC (rev 100731)
@@ -5,7 +5,7 @@
       
       <property name="profileService"><inject bean="ProfileService"/></property>
       <property name="profileFactory"><inject bean="ProfileFactory"/></property>
-      <property name="onDemandContextIntegrator"><inject bean="WebServer"/></property>
+      <property name="onDemandContextIntegrator"><inject bean="WebServer" property="onDemandContextIntegrator"/></property>
 
       <property name="contextName">admin-console</property>
 

Modified: trunk/server/src/etc/deploy/jbossws-console-activator-jboss-beans.xml
===================================================================
--- trunk/server/src/etc/deploy/jbossws-console-activator-jboss-beans.xml	2010-02-09 03:33:00 UTC (rev 100730)
+++ trunk/server/src/etc/deploy/jbossws-console-activator-jboss-beans.xml	2010-02-09 04:09:16 UTC (rev 100731)
@@ -5,7 +5,7 @@
       
       <property name="profileService"><inject bean="ProfileService"/></property>
       <property name="profileFactory"><inject bean="ProfileFactory"/></property>
-      <property name="onDemandContextIntegrator"><inject bean="WebServer"/></property>
+      <property name="onDemandContextIntegrator"><inject bean="WebServer" property="onDemandContextIntegrator"/></property>
 
       <property name="contextName">jbossws</property>
 

Modified: trunk/server/src/etc/deploy/jmx-console-activator-jboss-beans.xml
===================================================================
--- trunk/server/src/etc/deploy/jmx-console-activator-jboss-beans.xml	2010-02-09 03:33:00 UTC (rev 100730)
+++ trunk/server/src/etc/deploy/jmx-console-activator-jboss-beans.xml	2010-02-09 04:09:16 UTC (rev 100731)
@@ -5,7 +5,7 @@
       
       <property name="profileService"><inject bean="ProfileService"/></property>
       <property name="profileFactory"><inject bean="ProfileFactory"/></property>
-      <property name="onDemandContextIntegrator"><inject bean="WebServer"/></property>
+      <property name="onDemandContextIntegrator"><inject bean="WebServer" property="onDemandContextIntegrator"/></property>
 
       <property name="contextName">jmx-console</property>
 

Modified: trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatService.java
===================================================================
--- trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatService.java	2010-02-09 03:33:00 UTC (rev 100730)
+++ trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatService.java	2010-02-09 04:09:16 UTC (rev 100731)
@@ -26,13 +26,8 @@
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
-import java.util.Set;
 import java.util.concurrent.Executor;
 
 import javax.management.MBeanServer;
@@ -50,8 +45,6 @@
 import org.apache.catalina.startup.Catalina;
 import org.apache.catalina.startup.CatalinaProperties;
 import org.apache.tomcat.util.IntrospectionUtils;
-import org.apache.tomcat.util.http.mapper.Mapper;
-import org.apache.tomcat.util.http.mapper.OnDemandContextMappingListener;
 import org.apache.tomcat.util.modeler.Registry;
 import org.jboss.bootstrap.api.lifecycle.LifecycleState;
 import org.jboss.bootstrap.spi.as.server.JBossASServerProvider;
@@ -71,7 +64,7 @@
 import org.jboss.web.tomcat.metadata.ServiceMetaData;
 import org.jboss.web.tomcat.metadata.ValveMetaData;
 import org.jboss.web.tomcat.security.HttpServletRequestPolicyContextHandler;
-import org.jboss.web.tomcat.service.ondemand.ContextDemandListener;
+import org.jboss.web.tomcat.service.ondemand.DefaultOnDemandContextIntegrator;
 import org.jboss.web.tomcat.service.ondemand.OnDemandContextIntegrator;
 import org.jboss.web.tomcat.service.session.SessionIDGenerator;
 import org.jboss.xb.binding.Unmarshaller;
@@ -94,7 +87,7 @@
  * @author <a href="brian.stansberry at jboss.com">Brian Stansberry</a>
  * @version $Revision$
  */
-public class TomcatService extends ServiceMBeanSupport implements NotificationListener, TomcatServiceMBean, OnDemandContextIntegrator
+public class TomcatService extends ServiceMBeanSupport implements NotificationListener, TomcatServiceMBean
 {
    
    /** The associated Tomcat deployer * */
@@ -106,13 +99,8 @@
    // Use a flag because isInShutdown doesn't appear to be correct
    private boolean connectorsRunning = false;
    
-   private final Set<ContextDemandAdapter> contextDemandAdapters = 
-      Collections.synchronizedSet(new HashSet<ContextDemandAdapter>());
-   
-   private final Map<String, Mapper> mappers = 
-      Collections.synchronizedMap(new HashMap<String, Mapper>());
-   
-   // Dependency inject the Executor pojo
+   /** Integrate support for on-demand contexts */
+   private DefaultOnDemandContextIntegrator onDemandContextIntegrator = new DefaultOnDemandContextIntegrator();
 
    public Executor getExecutor()
    {
@@ -135,6 +123,17 @@
    {
       this.tomcatDeployer = tomcatDeployer;
    }
+   
+   /** 
+    * Gets the object that provides support for on-demand activation of
+    * contexts.
+    * 
+    * @return the OnDemandContextIntegrator. Will not return <code>null</code>
+    */
+   public OnDemandContextIntegrator getOnDemandContextIntegrator()
+   {
+      return onDemandContextIntegrator;
+   }
 
    // In our lifecycle, we invoke the webserver lifecycle-related operations
    // in the TomcatDeployer
@@ -234,13 +233,8 @@
          catalinaServer.addService(service);
          
          // Integrate support for on-demand contexts
-         Mapper mapper = service.getMapper();
-         mappers.put(service.getName(), mapper);
-         ContextDemandAdapter adapter = new ContextDemandAdapter(service.getName());
-         mapper.registerOnDemandContextMappingListener(adapter);
-         contextDemandAdapters.add(adapter);
+         onDemandContextIntegrator.registerMapper(service.getName(), service.getMapper());
 
-
          // Server/Service/Executor
          // Executor is useless in JBoss: the Executor will get injected in the executor field
          // and used directly
@@ -496,10 +490,10 @@
 
       // Unregister any remaining jboss.web or Catalina MBeans
       ObjectName queryObjectName = new ObjectName(tomcatDeployer.getDomain() + ":*");
-      Iterator iterator = server2.queryMBeans(queryObjectName, null).iterator();
+      Iterator<ObjectInstance> iterator = server2.queryMBeans(queryObjectName, null).iterator();
       while (iterator.hasNext())
       {
-         ObjectInstance oi = (ObjectInstance) iterator.next();
+         ObjectInstance oi = iterator.next();
          ObjectName toRemove = oi.getObjectName();
          // Exception: Don't unregister the service right now
          if (!"WebServer".equals(toRemove.getKeyProperty("service")))
@@ -788,87 +782,4 @@
       super.unsetKernelControllerContext(controllerContext);
       JBossWebMicrocontainerBeanLocator.setKernelController(null);
    }
-   
-   public void registerContextDemandListener(ContextDemandListener listener)
-   {
-      for (ContextDemandAdapter adapter : contextDemandAdapters)
-      {
-         adapter.registerContextDemandListener(listener);
-      }
-   }
-   
-   public void removeContextDemandListener(ContextDemandListener listener)
-   {
-      for (ContextDemandAdapter adapter : contextDemandAdapters)
-      {
-         adapter.removeContextDemandListener(listener);
-      }
-   }
-   
-   public void registerOnDemandContext(String serviceName, String hostName, String contextName)
-   {
-      Mapper mapper = mappers.get(serviceName);
-      if (mapper != null)
-      {
-         // ensure the path starts w/ slash or Mapper won't match it correctly
-         if (contextName.length() > 0 && ('/' != contextName.charAt(0)))
-         {
-            contextName = "/" + contextName;
-         }
-         mapper.addOnDemandContext(hostName, contextName);
-      }
-      else
-      {
-         log.warn("Cannot register on-demand context for unknown engine " + serviceName);
-      }
-   }
-   
-   public void removeOnDemandContext(String serviceName, String hostName, String contextName)
-   {
-      Mapper mapper = mappers.get(serviceName);
-      if (mapper != null)
-      {
-         mapper.removeContext(hostName, contextName);
-      }
-      else
-      {
-         log.warn("Cannot remove on-demand context for unknown engine " + serviceName);
-      }
-   }
-   
-   private class ContextDemandAdapter implements OnDemandContextMappingListener
-   {
-      private final String engineName;
-      private final Set<ContextDemandListener> contextDemandListeners = 
-          Collections.synchronizedSet(new HashSet<ContextDemandListener>());
-
-      private ContextDemandAdapter(String engineName)
-      {
-         this.engineName = engineName;
-      }
-
-      public void onDemandContextMapped(String hostName, String contextName)
-      {
-         for (ContextDemandListener listener : contextDemandListeners)
-         {
-            listener.contextDemanded(this.engineName, hostName, contextName);
-         }         
-      }
-      
-      private void registerContextDemandListener(ContextDemandListener listener)
-      {
-         if (listener != null )
-         {
-            contextDemandListeners.add(listener);
-         }
-      }
-      
-      private void removeContextDemandListener(ContextDemandListener listener)
-      {
-         if (listener != null )
-         {
-            contextDemandListeners.remove(listener);
-         }
-      }
-   }
 }

Added: trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/ondemand/DefaultOnDemandContextIntegrator.java
===================================================================
--- trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/ondemand/DefaultOnDemandContextIntegrator.java	                        (rev 0)
+++ trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/ondemand/DefaultOnDemandContextIntegrator.java	2010-02-09 04:09:16 UTC (rev 100731)
@@ -0,0 +1,158 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat, Inc, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.web.tomcat.service.ondemand;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.log4j.Logger;
+import org.apache.tomcat.util.http.mapper.Mapper;
+import org.apache.tomcat.util.http.mapper.OnDemandContextMappingListener;
+
+/**
+ * Default implementation of OnDemandContextIntegrator.
+ * 
+ * @author Brian Stansberry
+ * @version $Revision: 1.1 $
+ */
+public class DefaultOnDemandContextIntegrator implements OnDemandContextIntegrator
+{
+   private static final Logger log = Logger.getLogger(DefaultOnDemandContextIntegrator.class);
+   
+   private final Set<ContextDemandAdapter> adapters = Collections.synchronizedSet(new HashSet<ContextDemandAdapter>());
+
+   private final  Map<String, Mapper> mappers = Collections.synchronizedMap(new HashMap<String, Mapper>());
+   
+   // -----------------------------------------------------------------  Public
+   
+   /**
+    * Makes this object aware of the given {@link Mapper}, allowing on-demand
+    * contexts to be registered with it.
+    * 
+    * @param serviceName name of the JBoss Web <code>Service</code> with
+    *                    which the service is associated. Cannot be <code>null</code>
+    * @param mapper the mapper. Cannot be <code>null</code>
+    */
+   public void registerMapper(String serviceName, Mapper mapper)
+   {
+      if (serviceName == null)
+      {
+         throw new IllegalArgumentException("Argument serviceName is null");
+      }
+      if (mapper == null)
+      {
+         throw new IllegalArgumentException("Argument mapper is null");
+      }
+      mappers.put(serviceName, mapper);
+      ContextDemandAdapter adapter = new ContextDemandAdapter(serviceName);
+      mapper.registerOnDemandContextMappingListener(adapter);
+      adapters.add(adapter);
+   }
+   
+   // ------------------------------------------------  OnDemandContextListener
+   
+   public void registerContextDemandListener(ContextDemandListener listener)
+   {
+      for (ContextDemandAdapter adapter : adapters)
+      {
+         adapter.registerContextDemandListener(listener);
+      }
+   }
+   
+   public void removeContextDemandListener(ContextDemandListener listener)
+   {
+      for (ContextDemandAdapter adapter : adapters)
+      {
+         adapter.removeContextDemandListener(listener);
+      }
+   }
+   
+   public void registerOnDemandContext(String serviceName, String hostName, String contextName)
+   {
+      Mapper mapper = mappers.get(serviceName);
+      if (mapper != null)
+      {
+         // ensure the path starts w/ slash or Mapper won't match it correctly
+         if (contextName.length() > 0 && ('/' != contextName.charAt(0)))
+         {
+            contextName = "/" + contextName;
+         }
+         mapper.addOnDemandContext(hostName, contextName);
+      }
+      else
+      {
+         log.warn("Cannot register on-demand context for unknown engine " + serviceName);
+      }
+   }
+   
+   public void removeOnDemandContext(String serviceName, String hostName, String contextName)
+   {
+      Mapper mapper = mappers.get(serviceName);
+      if (mapper != null)
+      {
+         mapper.removeContext(hostName, contextName);
+      }
+      else
+      {
+         log.warn("Cannot remove on-demand context for unknown engine " + serviceName);
+      }
+   }
+   
+   private class ContextDemandAdapter implements OnDemandContextMappingListener
+   {
+      private final String engineName;
+      private final Set<ContextDemandListener> contextDemandListeners = 
+          Collections.synchronizedSet(new HashSet<ContextDemandListener>());
+
+      private ContextDemandAdapter(String engineName)
+      {
+         this.engineName = engineName;
+      }
+
+      public void onDemandContextMapped(String hostName, String contextName)
+      {
+         for (ContextDemandListener listener : contextDemandListeners)
+         {
+            listener.contextDemanded(this.engineName, hostName, contextName);
+         }         
+      }
+      
+      private void registerContextDemandListener(ContextDemandListener listener)
+      {
+         if (listener != null )
+         {
+            contextDemandListeners.add(listener);
+         }
+      }
+      
+      private void removeContextDemandListener(ContextDemandListener listener)
+      {
+         if (listener != null )
+         {
+            contextDemandListeners.remove(listener);
+         }
+      }
+   }
+}
\ No newline at end of file




More information about the jboss-cvs-commits mailing list