[Jboss-cvs] JBossAS SVN: r56887 - in branches/MC_VDF_WORK: server/src/etc/conf/default system-jmx/src/main/org/jboss/system system-jmx/src/main/org/jboss/system/deployers

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Sep 15 11:12:12 EDT 2006


Author: adrian at jboss.org
Date: 2006-09-15 11:12:03 -0400 (Fri, 15 Sep 2006)
New Revision: 56887

Added:
   branches/MC_VDF_WORK/system-jmx/src/main/org/jboss/system/deployers/ServiceDeploymentDeployer.java
Modified:
   branches/MC_VDF_WORK/server/src/etc/conf/default/deployer-beans.xml
   branches/MC_VDF_WORK/system-jmx/src/main/org/jboss/system/ServiceController.java
   branches/MC_VDF_WORK/system-jmx/src/main/org/jboss/system/deployers/SARDeployer.java
   branches/MC_VDF_WORK/system-jmx/src/main/org/jboss/system/deployers/ServiceClassLoaderDeployer.java
   branches/MC_VDF_WORK/system-jmx/src/main/org/jboss/system/deployers/ServiceDeployer.java
   branches/MC_VDF_WORK/system-jmx/src/main/org/jboss/system/deployers/ServiceDeployment.java
Log:
[JBMICROCONT-5] - Componentization of the Service and Bean deployers.

Modified: branches/MC_VDF_WORK/server/src/etc/conf/default/deployer-beans.xml
===================================================================
--- branches/MC_VDF_WORK/server/src/etc/conf/default/deployer-beans.xml	2006-09-15 15:10:25 UTC (rev 56886)
+++ branches/MC_VDF_WORK/server/src/etc/conf/default/deployer-beans.xml	2006-09-15 15:12:03 UTC (rev 56887)
@@ -33,7 +33,8 @@
          <list>
             <!-- POJO Deployment -->
             <bean name="BeanDeployer" class="org.jboss.deployers.plugins.deployers.kernel.BeanDeployer"/>
-            <bean name="KernelDeployer" class="org.jboss.deployers.plugins.deployers.kernel.KernelDeployer">
+            <bean name="KernelDeploymentDeployer" class="org.jboss.deployers.plugins.deployers.kernel.KernelDeploymentDeployer"/>
+            <bean name="BeanMetaDataDeployer" class="org.jboss.deployers.plugins.deployers.kernel.BeanMetaDataDeployer">
                <constructor><parameter><inject bean="jboss.kernel:service=Kernel"/></parameter></constructor>
             </bean>
             <!-- JMX Deployment -->
@@ -41,6 +42,7 @@
             <bean name="ServiceClassLoaderDeployer" class="org.jboss.system.deployers.ServiceClassLoaderDeployer">
                <constructor><parameter><inject bean="JMXKernel" property="serviceController"/></parameter></constructor>
             </bean>
+            <bean name="ServiceDeploymentDeployer" class="org.jboss.system.deployers.ServiceDeploymentDeployer"/>
             <bean name="ServiceDeployer" class="org.jboss.system.deployers.ServiceDeployer">
                <constructor><parameter><inject bean="JMXKernel" property="serviceController"/></parameter></constructor>
             </bean>

Modified: branches/MC_VDF_WORK/system-jmx/src/main/org/jboss/system/ServiceController.java
===================================================================
--- branches/MC_VDF_WORK/system-jmx/src/main/org/jboss/system/ServiceController.java	2006-09-15 15:10:25 UTC (rev 56886)
+++ branches/MC_VDF_WORK/system-jmx/src/main/org/jboss/system/ServiceController.java	2006-09-15 15:12:03 UTC (rev 56887)
@@ -258,6 +258,26 @@
       return result;
    }
 
+   public ObjectName install(ServiceMetaData metaData, ObjectName loaderName) throws DeploymentException
+   {
+      KernelController controller = kernel.getController();
+      metaData.setClassLoaderName(loaderName);
+      ObjectName name = metaData.getObjectName();
+      
+      // Install the context to the configured level
+      ServiceControllerContext context = new ServiceControllerContext(this, metaData);
+      try
+      {
+         doInstall(controller, context);
+         doChange(controller, context, ControllerState.CONFIGURED, "configure");
+         return context.getObjectName();
+      }
+      catch (Throwable t)
+      {
+         throw DeploymentException.rethrowAsDeploymentException("Error during install " + name, t);
+      }
+   }
+
    public List<ObjectName> install(Element config, ObjectName loaderName) throws DeploymentException
    {
       // Parse the xml

Modified: branches/MC_VDF_WORK/system-jmx/src/main/org/jboss/system/deployers/SARDeployer.java
===================================================================
--- branches/MC_VDF_WORK/system-jmx/src/main/org/jboss/system/deployers/SARDeployer.java	2006-09-15 15:10:25 UTC (rev 56886)
+++ branches/MC_VDF_WORK/system-jmx/src/main/org/jboss/system/deployers/SARDeployer.java	2006-09-15 15:12:03 UTC (rev 56887)
@@ -73,11 +73,6 @@
       super(ServiceDeployment.class);
    }
 
-   public int getRelativeOrder()
-   {
-      return 1000;
-   }
-
    /**
     * Get the useNamespaceAwareParser.
     * 

Modified: branches/MC_VDF_WORK/system-jmx/src/main/org/jboss/system/deployers/ServiceClassLoaderDeployer.java
===================================================================
--- branches/MC_VDF_WORK/system-jmx/src/main/org/jboss/system/deployers/ServiceClassLoaderDeployer.java	2006-09-15 15:10:25 UTC (rev 56886)
+++ branches/MC_VDF_WORK/system-jmx/src/main/org/jboss/system/deployers/ServiceClassLoaderDeployer.java	2006-09-15 15:12:03 UTC (rev 56887)
@@ -65,11 +65,6 @@
          throw new IllegalArgumentException("Null controller");
       this.controller = controller;
    }
-   
-   public int getRelativeOrder()
-   {
-      return 2000;
-   }
 
    public ClassLoader createTopLevelClassLoader(DeploymentContext context) throws Exception
    {

Modified: branches/MC_VDF_WORK/system-jmx/src/main/org/jboss/system/deployers/ServiceDeployer.java
===================================================================
--- branches/MC_VDF_WORK/system-jmx/src/main/org/jboss/system/deployers/ServiceDeployer.java	2006-09-15 15:10:25 UTC (rev 56886)
+++ branches/MC_VDF_WORK/system-jmx/src/main/org/jboss/system/deployers/ServiceDeployer.java	2006-09-15 15:12:03 UTC (rev 56887)
@@ -21,7 +21,6 @@
 */
 package org.jboss.system.deployers;
 
-import java.util.List;
 import java.util.Set;
 
 import javax.management.ObjectName;
@@ -30,9 +29,9 @@
 import org.jboss.deployers.spi.DeploymentException;
 import org.jboss.deployers.spi.deployer.DeploymentUnit;
 import org.jboss.mx.loading.RepositoryClassLoader;
+import org.jboss.system.ServiceContext;
 import org.jboss.system.ServiceController;
 import org.jboss.system.metadata.ServiceMetaData;
-import org.w3c.dom.Element;
 
 /**
  * ServiceDeployer.<p>
@@ -43,11 +42,11 @@
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @version $Revision: 1.1 $
  */
-public class ServiceDeployer extends AbstractRealDeployer<ServiceDeployment>
+public class ServiceDeployer extends AbstractRealDeployer<ServiceMetaData>
 {
    /** The service controller */
    private final ServiceController controller;
-   
+
    /**
     * Create a new ServiceDeployer.
     * 
@@ -56,7 +55,7 @@
     */
    public ServiceDeployer(ServiceController controller)
    {
-      super(ServiceDeployment.class);
+      super(ServiceMetaData.class);
       if (controller == null)
          throw new IllegalArgumentException("Null controller");
       this.controller = controller;
@@ -64,132 +63,115 @@
 
    public void deploy(DeploymentUnit unit) throws DeploymentException
    {
-      Set<ServiceDeployment> deployments = getAllMetaData(unit);
-      for (ServiceDeployment deployment : deployments)
+      Set<ServiceMetaData> services = getAllMetaData(unit);
+      for (ServiceMetaData service : services)
       {
+         ObjectName name = service.getObjectName();
          try
          {
-            ObjectName loaderName = deployment.getLoaderName();
+            ObjectName loaderName = service.getClassLoaderName();
             if (loaderName == null)
             {
                ClassLoader cl = unit.getClassLoader();
                if (cl != null && cl instanceof RepositoryClassLoader)
                   loaderName = ((RepositoryClassLoader) cl).getObjectName();
             }
-               
-            List<ServiceMetaData> services = deployment.getServices();
-            Element config = deployment.getConfig();
-            List<ObjectName> names = null;
-            if (services != null)
-               names = controller.install(services, loaderName);
-            else if (config != null)
-               names = controller.install(config, loaderName);
-            else
-            {
-               log.debug("Service deployment has no services: " + deployment.getName());
-               continue;
-            }
-            
-            deployment.setServiceNames(names);
+
+            controller.install(service, loaderName);
             try
             {
-               create(names);
+               ServiceContext context = controller.getServiceContext(name);
+               create(context);
                try
                {
-                  start(names);
+                  start(context);
                }
                catch (Throwable t)
                {
-                  stop(names);
-                  destroy(names);
+                  destroy(name);
+                  throw t;
                }
             }
             catch (Throwable t)
             {
-               remove(names);
-               deployment.setServices(null);
+               remove(name);
+               throw t;
             }
          }
          catch (Throwable t)
          {
-            throw DeploymentException.rethrowAsDeploymentException("Error deploying: " + deployment.getName(), t);
+            // TODO better unwind
+            undeploy(unit);
+            throw DeploymentException.rethrowAsDeploymentException("Error deploying: " + name, t);
          }
       }
    }
 
    public void undeploy(DeploymentUnit unit)
    {
-      Set<ServiceDeployment> deployments = getAllMetaData(unit);
-      for (ServiceDeployment deployment : deployments)
+      Set<ServiceMetaData> services = getAllMetaData(unit);
+      for (ServiceMetaData service : services)
       {
-         List<ObjectName> names = deployment.getServiceNames();
-         if (names == null)
-            continue;
-         
-         stop(names);
-         destroy(names);
-         remove(names);
-         deployment.setServices(null);
+         ObjectName name = service.getObjectName();
+         ServiceContext context = controller.getServiceContext(name);
+         if (context != null)
+         {
+            stop(name);
+            destroy(name);
+            remove(name);
+         }
       }
    }
    
-   protected void create(List<ObjectName> names) throws Exception
+   protected void create(ServiceContext context) throws Throwable
    {
-      for (ObjectName name : names)
-         controller.create(name);
+      controller.create(context.objectName);
+      Throwable problem = context.problem;
+      if (problem != null)
+         throw problem;
    }
    
-   protected void start(List<ObjectName> names) throws Exception
+   protected void start(ServiceContext context) throws Throwable
    {
-      for (ObjectName name : names)
-         controller.start(name);
+      controller.start(context.objectName);
+      Throwable problem = context.problem;
+      if (problem != null)
+         throw problem;
    }
    
-   protected void stop(List<ObjectName> names)
+   protected void stop(ObjectName name)
    {
-      for (int i = names.size()-1; i >=0 ; --i)
+      try
       {
-         ObjectName name = names.get(i);
-         try
-         {
-            controller.stop(name);
-         }
-         catch (Throwable t)
-         {
-            log.warn("Error during stop for " + name, t);
-         }
+         controller.stop(name);
       }
+      catch (Throwable t)
+      {
+         log.warn("Error during stop for " + name, t);
+      }
    }
    
-   protected void destroy(List<ObjectName> names)
+   protected void destroy(ObjectName name)
    {
-      for (int i = names.size()-1; i >=0 ; --i)
+      try
       {
-         ObjectName name = names.get(i);
-         try
-         {
-            controller.destroy(name);
-         }
-         catch (Throwable t)
-         {
-            log.warn("Error during destroy for " + name, t);
-         }
+         controller.destroy(name);
       }
+      catch (Throwable t)
+      {
+         log.warn("Error during destroy for " + name, t);
+      }
    }
    
-   protected void remove(List<ObjectName> names)
+   protected void remove(ObjectName name)
    {
-      for (int i = names.size()-1; i >=0 ; --i)
+      try
       {
-         ObjectName name = names.get(i);
-         try
-         {
-            controller.remove(name);
-         }
-         catch (Throwable t)
-         {
-            log.warn("Error during remove for " + name, t);
-         }
+         controller.remove(name);
       }
+      catch (Throwable t)
+      {
+         log.warn("Error during destroy for " + name, t);
+      }
    }
 }

Modified: branches/MC_VDF_WORK/system-jmx/src/main/org/jboss/system/deployers/ServiceDeployment.java
===================================================================
--- branches/MC_VDF_WORK/system-jmx/src/main/org/jboss/system/deployers/ServiceDeployment.java	2006-09-15 15:10:25 UTC (rev 56886)
+++ branches/MC_VDF_WORK/system-jmx/src/main/org/jboss/system/deployers/ServiceDeployment.java	2006-09-15 15:12:03 UTC (rev 56887)
@@ -23,8 +23,6 @@
 
 import java.util.List;
 
-import javax.management.ObjectName;
-
 import org.jboss.system.metadata.ServiceMetaData;
 import org.w3c.dom.Element;
 
@@ -38,16 +36,10 @@
 {
    /** The deployment name */
    private String name;
-   
-   /** The service names */
-   private List<ObjectName> serviceNames;
 
    /** The services */
    private List<ServiceMetaData> services;
    
-   /** The loader object name */
-   private ObjectName loaderName;
-   
    /** The config */
    private Element config;
    
@@ -72,26 +64,6 @@
    }
 
    /**
-    * Get the serviceNames.
-    * 
-    * @return the serviceNames.
-    */
-   public List<ObjectName> getServiceNames()
-   {
-      return serviceNames;
-   }
-
-   /**
-    * Set the serviceNames.
-    * 
-    * @param serviceNames the serviceNames.
-    */
-   public void setServiceNames(List<ObjectName> serviceNames)
-   {
-      this.serviceNames = serviceNames;
-   }
-
-   /**
     * Get the services.
     * 
     * @return the services.
@@ -112,26 +84,6 @@
    }
 
    /**
-    * Get the loaderName.
-    * 
-    * @return the loaderName.
-    */
-   public ObjectName getLoaderName()
-   {
-      return loaderName;
-   }
-
-   /**
-    * Set the loaderName.
-    * 
-    * @param loaderName the loaderName.
-    */
-   public void setLoaderName(ObjectName loaderName)
-   {
-      this.loaderName = loaderName;
-   }
-
-   /**
     * Get the config.
     * 
     * @return the config.

Added: branches/MC_VDF_WORK/system-jmx/src/main/org/jboss/system/deployers/ServiceDeploymentDeployer.java
===================================================================
--- branches/MC_VDF_WORK/system-jmx/src/main/org/jboss/system/deployers/ServiceDeploymentDeployer.java	2006-09-15 15:10:25 UTC (rev 56886)
+++ branches/MC_VDF_WORK/system-jmx/src/main/org/jboss/system/deployers/ServiceDeploymentDeployer.java	2006-09-15 15:12:03 UTC (rev 56887)
@@ -0,0 +1,117 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt 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.system.deployers;
+
+import java.util.List;
+import java.util.Set;
+
+import javax.management.ObjectName;
+
+import org.jboss.deployers.plugins.deployers.helpers.AbstractRealDeployer;
+import org.jboss.deployers.spi.DeploymentException;
+import org.jboss.deployers.spi.deployer.DeploymentUnit;
+import org.jboss.system.metadata.ServiceMetaData;
+import org.jboss.system.metadata.ServiceMetaDataParser;
+import org.w3c.dom.Element;
+
+/**
+ * ServiceDeployer.<p>
+ * 
+ * This deployer is responsible for deploying services of
+ * type {@link ServiceDeployment}.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class ServiceDeploymentDeployer extends AbstractRealDeployer<ServiceDeployment>
+{
+   public int getRelativeOrder()
+   {
+      return COMPONENT_DEPLOYER;
+   }
+
+   /**
+    * Create a new ServiceDeployer.
+    */
+   public ServiceDeploymentDeployer()
+   {
+      super(ServiceDeployment.class);
+   }
+
+   public void deploy(DeploymentUnit unit) throws DeploymentException
+   {
+      Set<ServiceDeployment> deployments = getAllMetaData(unit);
+      for (ServiceDeployment deployment : deployments)
+      {
+         try
+         {
+            List<ServiceMetaData> services = deployment.getServices();
+            if (services == null)
+            {
+               Element config = deployment.getConfig();
+               if (config == null)
+               {
+                  log.debug("Service deployment has no services: " + deployment.getName());
+                  continue;
+               }
+               
+               ServiceMetaDataParser parser = new ServiceMetaDataParser(config);
+               services = parser.parse();
+               deployment.setServices(services);
+            }
+
+            if (services == null || services.isEmpty())
+               return;
+            
+            for (ServiceMetaData service : services)
+            {
+               ObjectName objectName = service.getObjectName();
+               String name = objectName.getCanonicalName();
+               DeploymentUnit component = unit.addComponent(name);
+               component.addAttachment(ServiceMetaData.class.getName(), service);
+            }
+         }
+         catch (Throwable t)
+         {
+            throw DeploymentException.rethrowAsDeploymentException("Error deploying: " + deployment.getName(), t);
+         }
+      }
+   }
+
+   public void undeploy(DeploymentUnit unit)
+   {
+      Set<ServiceDeployment> deployments = getAllMetaData(unit);
+      for (ServiceDeployment deployment : deployments)
+      {
+         List<ServiceMetaData> services = deployment.getServices();
+         if (services == null)
+            continue;
+         
+         for (ServiceMetaData service : services)
+         {
+            ObjectName objectName = service.getObjectName();
+            String name = objectName.getCanonicalName();
+            unit.removeComponent(name);
+         }
+      }
+   }
+}




More information about the jboss-cvs-commits mailing list