[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