[jboss-cvs] JBossAS SVN: r63192 - trunk/deployment/src/main/org/jboss/deployment/services.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed May 23 10:17:37 EDT 2007


Author: jfrederic.clere at jboss.com
Date: 2007-05-23 10:17:37 -0400 (Wed, 23 May 2007)
New Revision: 63192

Modified:
   trunk/deployment/src/main/org/jboss/deployment/services/DeploymentManagerService.java
   trunk/deployment/src/main/org/jboss/deployment/services/DeploymentManagerServiceMBean.java
Log:
Fix JBCTS-534.
You have to add 
<attribute name="Controller"><inject bean="jboss.kernel:service=KernelController"/></attribute>
in server/_name_/deploy/jsr88-service.xml
to get it running.


Modified: trunk/deployment/src/main/org/jboss/deployment/services/DeploymentManagerService.java
===================================================================
--- trunk/deployment/src/main/org/jboss/deployment/services/DeploymentManagerService.java	2007-05-23 08:29:57 UTC (rev 63191)
+++ trunk/deployment/src/main/org/jboss/deployment/services/DeploymentManagerService.java	2007-05-23 14:17:37 UTC (rev 63192)
@@ -38,8 +38,15 @@
 import javax.enterprise.deploy.shared.ModuleType;
 import javax.enterprise.deploy.spi.exceptions.TargetException;
 
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+
+import org.jboss.dependency.spi.Controller;
 import org.jboss.deployers.plugins.structure.AbstractDeploymentContext;
 import org.jboss.deployers.spi.deployer.DeploymentUnit;
+import org.jboss.deployers.spi.IncompleteDeploymentsBuilder;
+import org.jboss.deployers.spi.IncompleteDeployments;
+import org.jboss.deployers.spi.IncompleteDeploymentException;
 import org.jboss.deployers.spi.deployment.MainDeployer;
 import org.jboss.deployers.spi.structure.DeploymentContext;
 import org.jboss.deployers.spi.structure.DeploymentState;
@@ -49,6 +56,9 @@
 import org.jboss.virtual.VFS;
 import org.jboss.virtual.VirtualFile;
 
+import org.jboss.mx.util.MBeanServerLocator;
+import org.jboss.system.metadata.ServiceMetaData;
+
 /**
  * A service that supports the JSR-88 DeploymentManager operations.
  * 
@@ -93,6 +103,11 @@
    private MainDeployer mainDeployer;
 
    /**
+    * The controller
+    */
+   private Controller controller;
+
+   /**
     * The local directory for uploaded content.
     */
    private File uploadDir;
@@ -108,6 +123,16 @@
       this.mainDeployer = mainDeployer;
    }
 
+   public Controller getController()
+   {
+      return controller;
+   }
+
+   public void setController(Controller controller)
+   {
+      this.controller = controller;
+   }
+
    public Class getCarDeployerType()
    {
       return carDeployerType;
@@ -242,30 +267,192 @@
       bos.close();
 
       moduleMap.put(url, moduleID);
+
+      // TODO: arrange deploy_phase2 (and TC glue code).
+      deploy_phase2(url);
    }
 
+   /* Invoke the method on the contexts */
+   public void hack(SerializableTargetModuleID moduleID,
+         DeploymentContext info, String method)
+   {
+      try {
+         MBeanServer server = MBeanServerLocator.locateJBoss();
+         String objNames = getComponentName(info);
+
+         String contexts = null;
+         if (objNames != null)
+         {
+           String token = ":war=";
+           int i = objNames.indexOf(token);
+           if (i == -1)
+             return;
+           i = i + token.length();
+           contexts = objNames.substring(i);
+         }
+
+         String onStr = "*:j2eeType=WebModule,*,J2EEApplication=none,J2EEServer=none";
+         ObjectName objectName = new ObjectName(onStr);
+         Set mbeans = server.queryNames(objectName, null);
+         if (mbeans != null && mbeans.size () > 0 && contexts != null)
+         {
+            for (Iterator iter = mbeans.iterator(); iter.hasNext();)
+            {
+               ObjectName inst = (ObjectName) iter.next();
+               String name = inst.toString();
+               String token = ".*" + contexts + ".*";
+               if (name.matches(token))
+               {
+                   server.invoke(inst, method, new Object[] {}, new String[] {});
+               }
+            }
+         }
+
+
+      } catch (Throwable e)
+      {
+         log.info("hack: failed" + e);
+      }
+   }
    public void start(String url) throws Exception
    {
       SerializableTargetModuleID moduleID = (SerializableTargetModuleID)moduleMap.get(url);
       if (moduleID == null)
          throw new IOException("deployURL(" + url + ") has not been distributed");
 
+      if (moduleID.isRunning()) {
+         log.error("start, url: " + url + " Already started");
+         return;
+      }
       URL deployURL = new URL(url);
       // Build the local path
       File path = new File(deployURL.getFile());
       String archive = path.getName();
       File deployFile = new File(uploadDir, archive);
+
+      VirtualFile root = VFS.getRoot(deployFile.toURI());
+      DeploymentContext context = mainDeployer.getDeploymentContext(AbstractDeploymentContext.getDeploymentName(root));
+
+      /* TODO: that is a hack */
+      if (context == null) {
+         context = new AbstractDeploymentContext(root);
+         mainDeployer.addDeploymentContext(context);
+         mainDeployer.process();
+         moduleID.setRunning(true);
+         moduleID.clearChildModuleIDs();
+         // Repopulate the child modules
+         fillChildrenTargetModuleID(moduleID, context);
+      }
+
+      // hack(moduleID, context, "start");
+   }
+   /*
+    * Get the component name.
+    */
+   private String getComponentName(DeploymentContext context)
+   {
+      DeploymentUnit u = context.getDeploymentUnit();
+      ServiceMetaData data = u.getAttachment(ServiceMetaData.class);
+      if (data == null)
+         return null;
+      ObjectName objectName = data.getObjectName();
+      String objNames = objectName.toString();
+      return objNames;
+   }
+
+   public void deploy_phase2(String url) throws Exception
+   {
+      SerializableTargetModuleID moduleID = (SerializableTargetModuleID)moduleMap.get(url);
+      if (moduleID == null)
+         throw new IOException("deployURL(" + url + ") has not been distributed");
+      if (moduleID.isRunning())
+      {
+         return;
+      }
+
+      URL deployURL = new URL(url);
+      // Build the local path
+      File path = new File(deployURL.getFile());
+      String archive = path.getName();
+      File deployFile = new File(uploadDir, archive);
       if (deployFile.exists() == false)
          throw new IOException("deployURL(" + url + ") has no local archive");
 
       VirtualFile root = VFS.getRoot(deployFile.toURI());
       DeploymentContext context = new AbstractDeploymentContext(root);
       mainDeployer.addDeploymentContext(context);
-      mainDeployer.process();
+      try {
+         mainDeployer.process();
+         IncompleteDeployments incomplete = IncompleteDeploymentsBuilder.build(mainDeployer, controller);
+         if (incomplete.isIncomplete())
+         {
+            boolean itisme = false;
+
+            /* Check that it is our context */
+            /* TODO check also incomplete.getContextsMissingDependencies() */
+            Map contexts = incomplete.getContextsInError();
+            Set set = contexts.keySet();
+            Object [] stringset = set.toArray();
+
+            String componentname =  getComponentName(context);
+            for (int i=0; i<stringset.length; i++)
+            {
+               if (componentname.compareTo((String)stringset[i]) == 0)
+               {
+                  itisme = true;
+                  break;
+               }
+            }
+
+            /* Check the deployment */
+            /* TODO check also incomplete.getDeploymentsMissingDeployer() */
+            contexts = incomplete.getDeploymentsInError();
+            set = contexts.keySet();
+            stringset = set.toArray();
+            componentname = context.getDeploymentUnit().getName();
+            for (int i=0; i<stringset.length; i++)
+            {
+               if (componentname.compareTo((String)stringset[i]) == 0)
+               {
+                  itisme = true;
+                  break;
+               }
+            }
+
+            /* If we have had the problem throw the exception */
+            if (itisme)
+            {
+               IncompleteDeploymentException e = new IncompleteDeploymentException(incomplete);
+               throw e;
+            }
+         }
+      }
+      catch (Exception e)
+      {
+         /* destroy the context */
+         hack(moduleID, context, "destroy");
+         /* clear the child */
+         moduleID.clearChildModuleIDs();
+         /* remove the deployment */
+         mainDeployer.removeDeploymentContext(AbstractDeploymentContext.getDeploymentName(root));
+         mainDeployer.process();
+
+         /* remove the map */
+         if (deleteOnUndeploy)
+           Files.delete(deployFile);
+ 
+         moduleMap.remove(url);
+         throw e;
+      }
+
       moduleID.setRunning(true);
       moduleID.clearChildModuleIDs();
       // Repopulate the child modules
       fillChildrenTargetModuleID(moduleID, context);
+
+      // TODO: invoke the start.
+      // hack(moduleID, context, "start");
+         
    }
 
    public void stop(String url) throws Exception

Modified: trunk/deployment/src/main/org/jboss/deployment/services/DeploymentManagerServiceMBean.java
===================================================================
--- trunk/deployment/src/main/org/jboss/deployment/services/DeploymentManagerServiceMBean.java	2007-05-23 08:29:57 UTC (rev 63191)
+++ trunk/deployment/src/main/org/jboss/deployment/services/DeploymentManagerServiceMBean.java	2007-05-23 14:17:37 UTC (rev 63192)
@@ -26,6 +26,7 @@
 
 import javax.enterprise.deploy.spi.exceptions.TargetException;
 
+import org.jboss.dependency.spi.Controller;
 import org.jboss.deployers.spi.deployment.MainDeployer;
 import org.jboss.deployment.spi.SerializableTargetModuleID;
 
@@ -38,6 +39,8 @@
  */
 public interface DeploymentManagerServiceMBean
 {
+   public Controller getController();
+   public void setController(Controller controller);
    public File getUploadDir();
 
    public void setUploadDir(File uploadDir);




More information about the jboss-cvs-commits mailing list