[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