[jboss-cvs] JBossAS SVN: r87083 - in branches/Branch_5_x: profileservice/src/main/org/jboss/profileservice/management/upload and 3 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Apr 9 11:22:48 EDT 2009


Author: emuckenhuber
Date: 2009-04-09 11:22:48 -0400 (Thu, 09 Apr 2009)
New Revision: 87083

Modified:
   branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/ManagementViewImpl.java
   branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/upload/AbstractTransientProfileManager.java
   branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/upload/remoting/AbstractDeployHandler.java
   branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/upload/remoting/DeployHandler.java
   branches/Branch_5_x/system/src/main/org/jboss/system/server/profileservice/repository/BasicDeploymentRepository.java
   branches/Branch_5_x/testsuite/src/main/org/jboss/test/deployers/DeploymentManagerUnitTestCase.java
Log:
[JBAS-6708], [JBAS-6709] prototype to expose deployment status

Modified: branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/ManagementViewImpl.java
===================================================================
--- branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/ManagementViewImpl.java	2009-04-09 14:36:47 UTC (rev 87082)
+++ branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/ManagementViewImpl.java	2009-04-09 15:22:48 UTC (rev 87083)
@@ -46,6 +46,7 @@
 import org.jboss.deployers.spi.management.RuntimeComponentDispatcher;
 import org.jboss.logging.Logger;
 import org.jboss.managed.api.ComponentType;
+import org.jboss.managed.api.DeploymentState;
 import org.jboss.managed.api.DeploymentTemplateInfo;
 import org.jboss.managed.api.Fields;
 import org.jboss.managed.api.ManagedComponent;
@@ -146,6 +147,7 @@
    
    /** The state mappings. */
    private Map<String, String> stateMappings = new HashMap<String, String>();
+   private Map<String, String> deploymentStateMappings = new HashMap<String, String>();
    
    /** The dispatcher handles ManagedOperation dispatches */
    private RuntimeComponentDispatcher dispatcher;
@@ -175,6 +177,10 @@
       stateMappings.put("Create", RunState.STARTING.name());
       stateMappings.put("Start", RunState.STARTING.name());
       stateMappings.put("Installed", RunState.RUNNING.name());
+      // Set default deployment state mappings for managed deployments
+      deploymentStateMappings.put("**ERROR**", DeploymentState.FAILED.name());
+      deploymentStateMappings.put("Not Installed", DeploymentState.STOPPED.name());
+      deploymentStateMappings.put("Installed", DeploymentState.STARTED.name());
    }
    
    public void start() throws Exception
@@ -218,7 +224,7 @@
          try
          {
             // 
-            processManagedDeployment(md, null, 0, trace); 
+            processManagedDeployment(md, null, DeploymentState.STARTED, 0, trace); 
          }
          catch(Exception e)
          {
@@ -231,7 +237,7 @@
       // Now create a ManagedDeployment for the platform beans
       Map<String, ManagedObject> platformMBeanMOs = ManagementFactoryUtils.getPlatformMBeanMOs(managedObjFactory);
       ManagedDeploymentImpl platformMBeans = new ManagedDeploymentImpl("JDK PlatformMBeans", "PlatformMBeans", null,
-            null, platformMBeanMOs);
+            platformMBeanMOs);
       List<ManagedObject> gcMbeans = ManagementFactoryUtils.getGarbageCollectorMXBeans(managedObjFactory);
       Map<String, ManagedObject> gcMOs = new HashMap<String, ManagedObject>();
       for (ManagedObject mo : gcMbeans)
@@ -245,19 +251,17 @@
       for (ManagedObject mo : mpoolMBeans)
          mpoolMOs.put(mo.getName(), mo);
       ManagedDeploymentImpl gcMD = new ManagedDeploymentImpl("GarbageCollectorMXBeans", "GarbageCollectorMXBeans",
-            null, null, gcMOs);
+            null, gcMOs);
       platformMBeans.getChildren().add(gcMD);
-      ManagedDeploymentImpl mmMD = new ManagedDeploymentImpl("MemoryManagerMXBeans", "MemoryManagerMXBeans", null,
-            null, mmMOs);
+      ManagedDeploymentImpl mmMD = new ManagedDeploymentImpl("MemoryManagerMXBeans", "MemoryManagerMXBeans", null, mmMOs);
       platformMBeans.getChildren().add(mmMD);
-      ManagedDeploymentImpl mpoolMD = new ManagedDeploymentImpl("MemoryPoolMXBeans", "MemoryPoolMXBeans", null, null,
-            mpoolMOs);
+      ManagedDeploymentImpl mpoolMD = new ManagedDeploymentImpl("MemoryPoolMXBeans", "MemoryPoolMXBeans", null, mpoolMOs);
       platformMBeans.getChildren().add(mpoolMD);
       
       try
       {
          // Create the ManagedComponents
-         processManagedDeployment(platformMBeans, null, 0, trace);   
+         processManagedDeployment(platformMBeans, null, DeploymentState.STARTED, 0, trace);   
       }
       catch(Exception e)
       {
@@ -309,8 +313,15 @@
                try
                {
                   ManagedDeployment md = getManagedDeployment(deployment);
-                  processManagedDeployment(md, key, 0, trace);
+                  processRootManagedDeployment(md, key, trace);
                }
+               catch(DeploymentException e)
+               {
+                  // FIXME Assume a undeployed (stopped) deployment
+                  ManagedDeployment md = new ManagedDeploymentImpl(deployment.getName(),
+                        deployment.getRoot().getName());
+                  processManagedDeployment(md, key, DeploymentState.STOPPED, 0, trace);
+               }
                catch(Exception e)
                {
                   log.debug("Failed to create ManagedDeployment for: " + deployment.getName(), e);
@@ -350,15 +361,32 @@
    }
 
    /**
+    * Process the root managed deployment. This gets
+    * the deployment state for this deployment, which will
+    * get populated to the child deployments as well.
+    *
+    * @param md the managed deployment
+    * @param profile the associated profile key 
+    * @param trace is trace enabled
+    * @throws Exception for any error
+    */
+   protected void processRootManagedDeployment(ManagedDeployment md, ProfileKey profile, boolean trace) throws Exception
+   {
+      DeploymentState state = getDeploymentState(md);
+      processManagedDeployment(md, profile, state, 0, trace);      
+   }
+   
+   /**
     * Process managed deployment.
     *
     * @param md the managed deployment
     * @param profile the associated profile key 
+    * @param state the deployment state
     * @param level depth level
     * @param trace is trace enabled
     * @throws Exception for any error
     */
-   protected void processManagedDeployment(ManagedDeployment md, ProfileKey profile, int level, boolean trace) throws Exception
+   protected void processManagedDeployment(ManagedDeployment md, ProfileKey profile, DeploymentState state, int level, boolean trace) throws Exception
    {
       String name = md.getName();
       if (trace)
@@ -366,6 +394,11 @@
       Map<String, ManagedObject> mos = md.getManagedObjects();
       if (trace)
          log.trace(name + " ManagedObjects_ " + level + ": " + mos);
+      
+      // Set the deployment state
+      if(state != null && md instanceof ManagedDeploymentImpl)
+         ((ManagedDeploymentImpl)md).setDeploymentState(state);
+      
       for(ManagedObject mo : mos.values())
       {
          processManagedObject(mo, md);
@@ -388,7 +421,8 @@
       {
          for(ManagedDeployment mdChild : mdChildren)
          {
-            processManagedDeployment(mdChild, profile, level + 1, trace);
+            // process the child deployments, with the state of the parent.
+            processManagedDeployment(mdChild, profile, state, level + 1, trace);
          }
       }
    }
@@ -623,14 +657,12 @@
       RunState state = comp.getRunState();
       if (state == RunState.UNKNOWN && dispatcher != null)
       {
-         //TODO, update RuntimeComponentDispatcher
-         AbstractRuntimeComponentDispatcher xdispatcher = (AbstractRuntimeComponentDispatcher) dispatcher;
          Object name = comp.getComponentName();
          if (name == null && runtimeMO != null)
             name = runtimeMO.getComponentName();
          if (name != null)
          {
-            String stateString = xdispatcher.getState(name);
+            String stateString = getControllerState(name);
             String runStateString = stateMappings.get(stateString);
             state = RunState.valueOf(runStateString);
             if (comp instanceof MutableManagedComponent)
@@ -642,6 +674,34 @@
       }
       return state;
    }
+   
+   protected DeploymentState getDeploymentState(ManagedDeployment md)
+   {
+      DeploymentState state = md.getDeploymentState();
+      if(state == DeploymentState.UNKNOWN && dispatcher != null)
+      {
+         Object name = md.getName();
+         if(name != null)
+         {
+            String stateString = getControllerState(name);
+            String deploymenStateString = deploymentStateMappings.get(stateString); 
+            state = DeploymentState.valueOf(deploymenStateString);
+         }
+      }
+      return state;
+   }
+   
+   protected String getControllerState(Object name)
+   {
+      String state = null;
+      if(dispatcher != null)
+      {
+         //TODO, update RuntimeComponentDispatcher
+         AbstractRuntimeComponentDispatcher xdispatcher = (AbstractRuntimeComponentDispatcher) dispatcher;
+         state = xdispatcher.getState(name);  
+      }
+      return state;
+   }
 
    /**
     * Process generic value.
@@ -1006,7 +1066,7 @@
       
       // Process the deployment
       ManagedDeployment md = getMainDeployer().getManagedDeployment(deploymentName);
-      processManagedDeployment(md, getDefaulProfiletKey(), 0, log.isTraceEnabled());
+      processRootManagedDeployment(md, getDefaulProfiletKey(), log.isTraceEnabled());
    }
    
    public void process() throws DeploymentException

Modified: branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/upload/AbstractTransientProfileManager.java
===================================================================
--- branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/upload/AbstractTransientProfileManager.java	2009-04-09 14:36:47 UTC (rev 87082)
+++ branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/upload/AbstractTransientProfileManager.java	2009-04-09 15:22:48 UTC (rev 87083)
@@ -154,6 +154,12 @@
       {
          return Collections.emptySet();
       }
+      
+      @Override
+      public boolean isMutable()
+      {
+         return false;
+      }
    }
    
 }

Modified: branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/upload/remoting/AbstractDeployHandler.java
===================================================================
--- branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/upload/remoting/AbstractDeployHandler.java	2009-04-09 14:36:47 UTC (rev 87082)
+++ branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/upload/remoting/AbstractDeployHandler.java	2009-04-09 15:22:48 UTC (rev 87083)
@@ -222,12 +222,21 @@
       log.info("Handle stream, deploymentTarget: " + deploymentTarget);
       deploymentTarget.setContentIS(contentIS);
       String[] names = deploymentTarget.getNames();
+      
       // Add deployment content to the repository
       String repositoryName = deploymentRepository.addDeploymentContent(names[0], contentIS);
+      
+      // FIXME make deployment visible to management view
+      VirtualFile vf = deploymentRepository.getDeploymentContent(repositoryName);
+      ProfileDeployment deployment = createDeployment(vf);
+      deploymentRepository.addDeployment(deployment.getName(), deployment);
+      deploymentRepository.lockDeploymentContent(deployment.getName());
+      
       log.info("End handle stream, repositoryName: " + repositoryName);
       // Return the repository names
       String[] rnames = {repositoryName};
       deploymentTarget.setRepositoryNames(rnames);
+     
       return new InvocationResponse(repositoryName);
    }
    
@@ -288,6 +297,7 @@
       }
       // CheckComplete
       deployer.process();
+      
       // TODO check if there is still a deploymentContext ?
       log.info("End stop, "+ deployments);
    }

Modified: branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/upload/remoting/DeployHandler.java
===================================================================
--- branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/upload/remoting/DeployHandler.java	2009-04-09 14:36:47 UTC (rev 87082)
+++ branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/upload/remoting/DeployHandler.java	2009-04-09 15:22:48 UTC (rev 87083)
@@ -99,15 +99,20 @@
     * @throws URISyntaxException 
     */
    @Override
-   protected String[] distribute(DeploymentID dtID) throws IOException, URISyntaxException 
+   protected String[] distribute(DeploymentID dtID) throws Exception 
    {
       URL contentURL = dtID.getContentURL();
       log.info("Begin distribute, content url: " + contentURL);
 
       // Create the virtual file
       VirtualFile vf = VFS.getRoot(contentURL);
-      String name = vf.toURI().toString();
-      this.transientDeployments.put(name, vf);        
+     
+      // FIXME make deployment visible to management view
+      ProfileDeployment deployment = createDeployment(vf);
+      this.transientProfile.addDeployment(deployment);
+
+      String name = deployment.getName();
+      this.transientDeployments.put(name, vf);
       
       log.info("End distribute, " + name);
       return new String[] { name };
@@ -119,21 +124,19 @@
       String deploymentName = resolveDeploymentName(name);
       if(deploymentName != null)
       {
-         // Create deployment
-         VirtualFile vf = this.transientDeployments.get(deploymentName);
-         ProfileDeployment deployment = createDeployment(vf);
-         // Add to transient profile
+         //
+         ProfileDeployment deployment = this.transientProfile.getDeployment(deploymentName);
+         // FIXME update the timestamp
          this.transientProfile.addDeployment(deployment);
          return deployment;
       }
       else
       {
-         // Create deployment
-         VirtualFile vf = deploymentRepository.getDeploymentContent(name);
-         ProfileDeployment deployment = createDeployment(vf);
-         // Add deployment repository
+         // unlock 
+         ProfileDeployment deployment = deploymentRepository.getDeployment(name);
+         deploymentRepository.unlockDeploymentContent(deployment.getName());
+         // FIXME update the timestamp
          deploymentRepository.addDeployment(deployment.getName(), deployment);
-         deploymentRepository.unlockDeploymentContent(deployment.getName());
          return deployment;
       }
    }
@@ -144,14 +147,18 @@
       String deploymentName = resolveDeploymentName(name);
       if(deploymentName != null)
       {
-         // Remove from profile
-         return this.transientProfile.removeDeployment(deploymentName); 
+         ProfileDeployment deployment = this.transientProfile.getDeployment(deploymentName);
+         // FIXME update the timestamp
+         this.transientProfile.addDeployment(deployment);
+         return deployment; 
       }
       else
       {
          // Lock content
          ProfileDeployment deployment = deploymentRepository.getDeployment(name);
          deploymentRepository.lockDeploymentContent(deployment.getName());
+         // FIXME update the timestamp
+         deploymentRepository.addDeployment(deployment.getName(), deployment);
          return deployment;
       }
    }
@@ -164,6 +171,8 @@
       {
          // Remove from local cache
          this.transientDeployments.remove(deploymentName);
+         // Remove from profile
+         this.transientProfile.removeDeployment(deploymentName); 
       }
       else
       {

Modified: branches/Branch_5_x/system/src/main/org/jboss/system/server/profileservice/repository/BasicDeploymentRepository.java
===================================================================
--- branches/Branch_5_x/system/src/main/org/jboss/system/server/profileservice/repository/BasicDeploymentRepository.java	2009-04-09 14:36:47 UTC (rev 87082)
+++ branches/Branch_5_x/system/src/main/org/jboss/system/server/profileservice/repository/BasicDeploymentRepository.java	2009-04-09 15:22:48 UTC (rev 87083)
@@ -114,6 +114,25 @@
       updateLastModfied();
    }
    
+   @Override
+   public void addDeployment(String vfsPath, ProfileDeployment d) throws Exception
+   {
+      // Suspend hot deployment checking
+      if( log.isTraceEnabled() )
+         log.trace("Aquiring content write lock");
+      lockWrite();
+      try
+      {
+         super.addDeployment(vfsPath, d);
+      }
+      finally
+      {
+         unlockWrite();
+         if (log.isTraceEnabled())
+            log.trace("Released content write lock");
+      }
+   }
+   
    public Collection<ModificationInfo> getModifiedDeployments() throws Exception
    {
       return Collections.emptySet();
@@ -143,6 +162,10 @@
          if(exists && isFailIfAlreadyExists())
             throw new SyncFailedException("Deployment content already exists: "+ contentFile.getAbsolutePath());
          
+         // Create the new file
+         if(exists == false)
+            contentFile.createNewFile();
+         
          // Copy streams
          FileOutputStream fos = new FileOutputStream(contentFile);
          try

Modified: branches/Branch_5_x/testsuite/src/main/org/jboss/test/deployers/DeploymentManagerUnitTestCase.java
===================================================================
--- branches/Branch_5_x/testsuite/src/main/org/jboss/test/deployers/DeploymentManagerUnitTestCase.java	2009-04-09 14:36:47 UTC (rev 87082)
+++ branches/Branch_5_x/testsuite/src/main/org/jboss/test/deployers/DeploymentManagerUnitTestCase.java	2009-04-09 15:22:48 UTC (rev 87083)
@@ -25,8 +25,13 @@
 
 import javax.naming.InitialContext;
 
+import org.jboss.deployers.spi.management.ManagementView;
+import org.jboss.deployers.spi.management.deploy.DeploymentID;
 import org.jboss.deployers.spi.management.deploy.DeploymentManager;
 import org.jboss.deployers.spi.management.deploy.DeploymentProgress;
+import org.jboss.managed.api.DeploymentState;
+import org.jboss.managed.api.ManagedDeployment;
+import org.jboss.profileservice.spi.NoSuchDeploymentException;
 import org.jboss.profileservice.spi.ProfileKey;
 import org.jboss.profileservice.spi.ProfileService;
 import org.jboss.test.JBossTestCase;
@@ -51,6 +56,7 @@
    
    /** The deployment manager. */
    private DeploymentManager deployMgr;
+   private ManagementView mgtView;
 
    public DeploymentManagerUnitTestCase(String name)
    {
@@ -82,12 +88,17 @@
       try
       {
          // 
-         DeploymentProgress start = distributeAndStart(NESTED_DEPLOYMENT, true);
+         DeploymentProgress start = distributeAndStart(NESTED_DEPLOYMENT, true, true);
          assertComplete(start);
-         //
-         start = distributeAndStart(NESTED_DEPLOYMENT, true);
+         // disable stopped check, as it was started before
+         start = distributeAndStart(NESTED_DEPLOYMENT, true, false);
          assertComplete(start);
       }
+      catch(Exception e)
+      {
+         log.debug("Failed ", e);
+         throw e;
+      }
       finally
       {
          stopAndRemove(new String[] { NESTED_DEPLOYMENT });
@@ -112,6 +123,11 @@
          // TODO implement prepare 
          prepareCheckComplete(EMTPY_DEPLOYMENT);
       }
+      catch(Exception e)
+      {
+         log.debug("Failed ", e);
+         throw e;
+      }
       finally
       {
          stopAndRemove(new String[]
@@ -137,6 +153,11 @@
          // TODO implement prepare
          prepareCheckComplete(EMTPY_DEPLOYMENT);
       }
+      catch(Exception e)
+      {
+         log.error("Failed ", e);
+         throw e;
+      }
       finally
       {
          stopAndRemove(new String[]
@@ -161,6 +182,11 @@
          // Test redeploy
          redeployCheckComplete(EMTPY_DEPLOYMENT);
       }
+      catch(Exception e)
+      {
+         log.debug("Failed ", e);
+         throw e;
+      }
       finally
       {
          try
@@ -179,17 +205,24 @@
    void deployFailed(boolean isCopyContent) throws Exception
    {
       DeploymentProgress start = distributeAndStart(FAILING_DEPLOYMENT, isCopyContent);
-      assertFailed(start);      
+      assertFailed(start);
+      assertDeploymentState(start.getDeploymentID(), DeploymentState.FAILED);
    }
    
    void deployEmpty(boolean isCopyContent) throws Exception
    {
       DeploymentProgress start = distributeAndStart(EMTPY_DEPLOYMENT, isCopyContent);
-      assertComplete(start);      
+      assertComplete(start);
+      assertDeploymentState(start.getDeploymentID(), DeploymentState.STARTED);
    }
    
    DeploymentProgress distributeAndStart(String deploymentName, boolean copyContent) throws Exception
    {
+      return distributeAndStart(deploymentName, copyContent, true);
+   }
+   
+   DeploymentProgress distributeAndStart(String deploymentName, boolean copyContent, boolean checkStopped) throws Exception
+   {
       // The deployment manager
       DeploymentManager deployMgr = getDeploymentManager();
       
@@ -197,8 +230,11 @@
       DeploymentProgress distribute = deployMgr.distribute(deploymentName, 
             getDeployURL(deploymentName), copyContent);
       distribute.run();
-      // Distribute always have to work
+      // Distribute always has to complete
       assertComplete(distribute);
+      // check if the app is stopped
+      if(checkStopped)
+         assertDeploymentState(distribute.getDeploymentID(), DeploymentState.STOPPED);
       
       // Get the repository names
       String[] uploadedNames = distribute.getDeploymentID().getRepositoryNames();
@@ -220,6 +256,7 @@
       DeploymentProgress redeploy = deployMgr.redeploy(name);
       redeploy.run();
       assertComplete(redeploy);
+      assertDeploymentState(redeploy.getDeploymentID(), DeploymentState.STARTED);
    }
    
    void prepareCheckComplete(String name) throws Exception
@@ -243,12 +280,30 @@
          DeploymentProgress stop = deployMgr.stop(names);
          stop.run();
          assertComplete(stop);
+         assertDeploymentState(stop.getDeploymentID(), DeploymentState.STOPPED);
       }
+      catch(Exception e)
+      {
+         log.debug("stopAndRemove Failed ", e);
+         throw e;
+      }
       finally
       {
          DeploymentProgress remove = deployMgr.remove(names);
          remove.run();
          assertComplete(remove);
+         
+         String name = remove.getDeploymentID().getNames()[0];
+         ManagementView mgtView = getManagementView();
+         try
+         {
+            mgtView.getDeployment(name);
+            fail("Did not see NoSuchDeploymentException");
+         }
+         catch(NoSuchDeploymentException ok)
+         {
+            //
+         }
       }
    }
    
@@ -258,6 +313,15 @@
       assertTrue(progress.getDeploymentStatus().isFailed());
    }
    
+   void assertDeploymentState(DeploymentID DtID, DeploymentState state) throws Exception
+   {
+      String name = DtID.getNames()[0];
+      ManagementView mgtView = getManagementView();
+      ManagedDeployment md = mgtView.getDeployment(name);
+      assertNotNull(name, md);
+      assertEquals("deployment: " + name, state, md.getDeploymentState());
+   }
+   
    void assertComplete(DeploymentProgress progress) throws Exception
    {
       if(progress.getDeploymentStatus().isFailed())
@@ -277,6 +341,16 @@
       return deployMgr;
    }
    
+   ManagementView getManagementView() throws Exception
+   {
+      if(this.mgtView == null)
+      {
+         this.mgtView = getProfileService().getViewManager();
+      }
+      this.mgtView.load();
+      return this.mgtView;
+   }
+   
    ProfileService getProfileService() throws Exception
    {
       InitialContext ctx = getInitialContext();




More information about the jboss-cvs-commits mailing list