[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