Return-Path: Delivered-To: apmail-incubator-geronimo-cvs-archive@www.apache.org Received: (qmail 6912 invoked from network); 17 Nov 2003 20:31:13 -0000 Received: from daedalus.apache.org (HELO mail.apache.org) (208.185.179.12) by minotaur-2.apache.org with SMTP; 17 Nov 2003 20:31:12 -0000 Received: (qmail 57581 invoked by uid 500); 17 Nov 2003 20:30:58 -0000 Delivered-To: apmail-incubator-geronimo-cvs-archive@incubator.apache.org Received: (qmail 57526 invoked by uid 500); 17 Nov 2003 20:30:57 -0000 Mailing-List: contact geronimo-cvs-help@incubator.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: list-post: Reply-To: geronimo-dev@incubator.apache.org Delivered-To: mailing list geronimo-cvs@incubator.apache.org Received: (qmail 57497 invoked from network); 17 Nov 2003 20:30:57 -0000 Received: from unknown (HELO minotaur.apache.org) (209.237.227.194) by daedalus.apache.org with SMTP; 17 Nov 2003 20:30:57 -0000 Received: (qmail 6449 invoked by uid 1750); 17 Nov 2003 20:31:07 -0000 Date: 17 Nov 2003 20:31:07 -0000 Message-ID: <20031117203107.6448.qmail@minotaur.apache.org> From: ammulder@apache.org To: incubator-geronimo-cvs@apache.org Subject: cvs commit: incubator-geronimo/modules/kernel/src/java/org/apache/geronimo/kernel/deployment ApplicationDeployer.java X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N ammulder 2003/11/17 12:31:07 Modified: modules/core/src/java/org/apache/geronimo/enterprise/deploy/server JmxProgressObject.java JmxServerConnection.java modules/kernel/src/java/org/apache/geronimo/kernel/deployment ApplicationDeployer.java Log: Add MBean operations for JSR-88 support to ApplicationDeployer Begin to hook up the ProgressObject as a return value from the long-running operations Add a little logging to the JSR-88 plumbing Revision Changes Path 1.2 +141 -5 incubator-geronimo/modules/core/src/java/org/apache/geronimo/enterprise/deploy/server/JmxProgressObject.java Index: JmxProgressObject.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/enterprise/deploy/server/JmxProgressObject.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- JmxProgressObject.java 17 Nov 2003 10:51:53 -0000 1.1 +++ JmxProgressObject.java 17 Nov 2003 20:31:07 -0000 1.2 @@ -55,6 +55,9 @@ */ package org.apache.geronimo.enterprise.deploy.server; +import java.util.Map; +import java.util.HashMap; +import java.util.Iterator; import javax.enterprise.deploy.spi.status.ProgressObject; import javax.enterprise.deploy.spi.status.DeploymentStatus; import javax.enterprise.deploy.spi.status.ClientConfiguration; @@ -66,7 +69,19 @@ import javax.enterprise.deploy.shared.CommandType; import javax.enterprise.deploy.shared.ActionType; import javax.management.MBeanServer; +import javax.management.NotificationListener; +import javax.management.Notification; +import javax.management.ObjectName; +import javax.management.NotificationFilter; +import javax.management.InstanceNotFoundException; +import javax.management.ListenerNotFoundException; +import javax.management.MBeanException; +import javax.management.ReflectionException; import javax.swing.event.EventListenerList; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.geronimo.kernel.deployment.client.DeploymentNotification; +import org.apache.geronimo.kernel.jmx.JMXUtil; /** * A ProgressObject implementation that listens for JMX notifications @@ -74,14 +89,28 @@ * @version $Revision$ $Date$ */ public class JmxProgressObject implements ProgressObject { + private final static Log log = LogFactory.getLog(JmxProgressObject.class); + private final static ObjectName CONTROLLER = JMXUtil.getObjectName("geronimo.deployment:role=DeploymentController"); private int jobID; private MBeanServer server; private JobDeploymentStatus status = new JobDeploymentStatus(); private EventListenerList listenerList = new EventListenerList(); + private NotificationListener listener; //todo: this class is just a beginning public JmxProgressObject(int jobID, MBeanServer server) { this.jobID = jobID; this.server = server; + try { + server.addNotificationListener(CONTROLLER, listener = new PONotificationListener(), + new PONotificationFilter(),null); + server.invoke(CONTROLLER, "startDeploymentJob", new Object[]{new Integer(jobID)}, new String[]{Integer.TYPE.toString()}); + } catch(InstanceNotFoundException e) { + throw new RuntimeException("ProgressObject unable to register with server"); + } catch(MBeanException e) { + throw new RuntimeException("ProgressObject unable to start deployment job on server"); + } catch(ReflectionException e) { + throw new RuntimeException("ProgressObject unable to start deployment job on server"); + } } /** @@ -198,13 +227,25 @@ } private static class TMDeploymentStatus implements DeploymentStatus { + private JobDeploymentStatus parent; + private String message; + private StateType stateType; + + public TMDeploymentStatus(JobDeploymentStatus parent) { + this.parent = parent; + } + /** * Retrieve the StateType value. * * @return the StateType object */ public StateType getState() { - return null; + return stateType; + } + + public void setStateType(StateType stateType) { + this.stateType = stateType; } /** @@ -231,7 +272,12 @@ * @return message text */ public String getMessage() { - return null; + return message; + } + + public void setMessage(String message) { + this.message = message; + parent.setMessage(message); } /** @@ -263,13 +309,50 @@ } private static class JobDeploymentStatus implements DeploymentStatus { + private String message; + private Map tms = new HashMap(); + private StateType stateType = StateType.RUNNING; + private boolean failed = false; + + public TMDeploymentStatus getTargetModule(TargetModuleID id) { + TMDeploymentStatus tm = (TMDeploymentStatus)tms.get(id); + if(tm == null) { + tm = new TMDeploymentStatus(this); + tms.put(id, tm); + } + return tm; + } + + public TMDeploymentStatus closeTargetModule(TargetModuleID id, boolean success, String message) { + TMDeploymentStatus tm = (TMDeploymentStatus)tms.get(id); + if(tm != null) { + tm.setMessage(message); + tm.setStateType(success ? StateType.COMPLETED : StateType.FAILED); + if(!success) { + failed = true; + } + boolean finished = true; + for(Iterator it = tms.values().iterator(); it.hasNext();) { + TMDeploymentStatus status = (TMDeploymentStatus)it.next(); + if(status.isRunning()) { + finished = false; + break; + } + } + if(finished) { + stateType = failed ? StateType.FAILED : StateType.COMPLETED; + } + } + return tm; + } + /** * Retrieve the StateType value. * * @return the StateType object */ public StateType getState() { - return null; + return stateType; } /** @@ -296,7 +379,11 @@ * @return message text */ public String getMessage() { - return null; + return message; + } + + public void setMessage(String message) { + this.message = message; } /** @@ -324,6 +411,55 @@ */ public boolean isRunning() { return false; + } + } + + private class PONotificationListener implements NotificationListener { + /** + * Called when a notification occurs. + * + * @param notification The notification object + * @param handback Helps in associating information regarding the listener. + */ + public void handleNotification(Notification notification, Object handback) { + DeploymentNotification dn = (DeploymentNotification)notification; + if(dn.getDeploymentID() == jobID) { + TMDeploymentStatus st = null; + if(dn.getType().equals(DeploymentNotification.DEPLOYMENT_UPDATE)) { + st = status.getTargetModule(dn.getTargetModuleID()); + st.setMessage(dn.getMessage()); + } else if(dn.getType().equals(DeploymentNotification.DEPLOYMENT_COMPLETED)) { + st = status.closeTargetModule(dn.getTargetModuleID(), true, dn.getMessage()); + } else if(dn.getType().equals(DeploymentNotification.DEPLOYMENT_FAILED)) { + st = status.closeTargetModule(dn.getTargetModuleID(), false, dn.getMessage()); + } + if(st != null) { + fireProgressEvent(dn.getTargetModuleID(), st); + } + if(status.isCompleted() || status.isFailed()) { + try { + server.removeNotificationListener(CONTROLLER, listener); + } catch(InstanceNotFoundException e) { + log.error("Unable to remove notification listener", e); + } catch(ListenerNotFoundException e) { + log.error("Unable to remove notification listener", e); + } + } + } + } + } + + private static class PONotificationFilter implements NotificationFilter { + /** + * Invoked before sending the Notification to the listener. + * + * @return boolean true if the Notification should be sent, false otherwise + * + */ + public boolean isNotificationEnabled(Notification notification) { + return notification.getType().equals(DeploymentNotification.DEPLOYMENT_COMPLETED) || + notification.getType().equals(DeploymentNotification.DEPLOYMENT_FAILED) || + notification.getType().equals(DeploymentNotification.DEPLOYMENT_UPDATE); } } } 1.4 +51 -16 incubator-geronimo/modules/core/src/java/org/apache/geronimo/enterprise/deploy/server/JmxServerConnection.java Index: JmxServerConnection.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/enterprise/deploy/server/JmxServerConnection.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- JmxServerConnection.java 16 Nov 2003 05:26:32 -0000 1.3 +++ JmxServerConnection.java 17 Nov 2003 20:31:07 -0000 1.4 @@ -16,6 +16,8 @@ import javax.enterprise.deploy.shared.ModuleType; import javax.management.MBeanServer; import javax.management.ObjectName; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.apache.geronimo.kernel.jmx.JMXUtil; /** @@ -25,6 +27,7 @@ * @version $Revision$ */ public class JmxServerConnection implements ServerConnection { + private final static Log log = LogFactory.getLog(JmxServerConnection.class); private final static ObjectName DEPLOYER_NAME = JMXUtil.getObjectName("geronimo.deployment:role=ApplicationDeployer"); private MBeanServer server; @@ -40,10 +43,12 @@ public Target[] getTargets() throws IllegalStateException, RemoteException { try { - return (Target[]) server.getAttribute(DEPLOYER_NAME, "Targets"); +// return (Target[]) server.getAttribute(DEPLOYER_NAME, "Targets"); + return (Target[]) server.invoke(DEPLOYER_NAME, "getTargets", new Object[0], new String[0]); } catch(UndeclaredThrowableException e) { throw new RemoteException("Server request failed", e.getCause()); } catch(Exception e) { + e.printStackTrace(); throw new RemoteException("Server request failed", e); } } @@ -96,7 +101,7 @@ //todo: figure out if the targets are all local and place the files and pass URLs via JMX Object moduleData = getBytes(new BufferedInputStream(new FileInputStream(moduleArchive))); Object ddData = getBytes(new BufferedInputStream(new FileInputStream(deploymentPlan))); - Object result = server.invoke(DEPLOYER_NAME, "distribute", new Object[]{targetList, + Object result = server.invoke(DEPLOYER_NAME, "prepareDistribute", new Object[]{targetList, moduleArchive.getName(), moduleData, ddData}, @@ -105,11 +110,16 @@ if(result instanceof Exception) { throw (Exception)result; } else { - return null; //todo: return a proper P.O. based on whatever the server ends up returning + return new JmxProgressObject(((Integer)result).intValue(), server); } } catch(UndeclaredThrowableException e) { throw new RemoteException("Server request failed", e.getCause()); } catch(Exception e) { + Throwable t = e; + do { + log.error("Problem from server", t); + t = t.getCause(); + } while(t != null); throw new RemoteException("Server request failed", e); } } @@ -118,15 +128,20 @@ //todo: find a way to stream the content to the server try { //todo: figure out if the targets are all local and place the files and pass URLs via JMX - Object result = server.invoke(DEPLOYER_NAME, "distribute", new Object[]{targetList, getBytes(moduleArchive),getBytes(deploymentPlan)}, new String[]{getArrayType(Target.class.getName()), getByteArrayType(), getByteArrayType()}); + Object result = server.invoke(DEPLOYER_NAME, "prepareDistribute", new Object[]{targetList, getBytes(moduleArchive),getBytes(deploymentPlan)}, new String[]{getArrayType(Target.class.getName()), getByteArrayType(), getByteArrayType()}); if(result instanceof Exception) { throw (Exception)result; } else { - return null; //todo: return a proper P.O. based on whatever the server ends up returning + return new JmxProgressObject(((Integer)result).intValue(), server); } } catch(UndeclaredThrowableException e) { throw new RemoteException("Server request failed", e.getCause()); } catch(Exception e) { + Throwable t = e; + do { + log.error("Problem from server", t); + t = t.getCause(); + } while(t != null); throw new RemoteException("Server request failed", e); } } @@ -135,11 +150,15 @@ //todo: find a way to stream the content to the server try { //todo: figure out if the targets are all local and place the files and pass URLs via JMX - server.invoke(DEPLOYER_NAME, "redeploy", new Object[]{moduleIDList, + Object result = server.invoke(DEPLOYER_NAME, "prepareRedeploy", new Object[]{moduleIDList, getBytes(new BufferedInputStream(new FileInputStream(moduleArchive))), getBytes(new BufferedInputStream(new FileInputStream(deploymentPlan)))}, new String[]{getArrayType(TargetModuleID.class.getName()), getByteArrayType(), getByteArrayType()}); - return null; //todo: return a proper P.O. based on whatever the server ends up returning + if(result instanceof Exception) { + throw (Exception)result; + } else { + return new JmxProgressObject(((Integer)result).intValue(), server); + } } catch(UndeclaredThrowableException e) { throw new RemoteException("Server request failed", e.getCause()); } catch(Exception e) { @@ -151,8 +170,12 @@ //todo: find a way to stream the content to the server try { //todo: figure out if the targets are all local and place the files and pass URLs via JMX - server.invoke(DEPLOYER_NAME, "redeploy", new Object[]{moduleIDList, getBytes(moduleArchive),getBytes(deploymentPlan)}, new String[]{getArrayType(TargetModuleID.class.getName()), getByteArrayType(), getByteArrayType()}); - return null; //todo: return a proper P.O. based on whatever the server ends up returning + Object result = server.invoke(DEPLOYER_NAME, "prepareRedeploy", new Object[]{moduleIDList, getBytes(moduleArchive),getBytes(deploymentPlan)}, new String[]{getArrayType(TargetModuleID.class.getName()), getByteArrayType(), getByteArrayType()}); + if(result instanceof Exception) { + throw (Exception)result; + } else { + return new JmxProgressObject(((Integer)result).intValue(), server); + } } catch(UndeclaredThrowableException e) { throw new RemoteException("Server request failed", e.getCause()); } catch(Exception e) { @@ -162,9 +185,13 @@ public ProgressObject start(TargetModuleID[] moduleIDList) throws IllegalStateException, RemoteException { try { - server.invoke(DEPLOYER_NAME, "start", new Object[]{moduleIDList}, + Object result = server.invoke(DEPLOYER_NAME, "prepareStart", new Object[]{moduleIDList}, new String[]{getArrayType(TargetModuleID.class.getName())}); - return null; //todo: return a proper P.O. based on whatever the server ends up returning + if(result instanceof Exception) { + throw (Exception)result; + } else { + return new JmxProgressObject(((Integer)result).intValue(), server); + } } catch(UndeclaredThrowableException e) { throw new RemoteException("Server request failed", e.getCause()); } catch(Exception e) { @@ -174,9 +201,13 @@ public ProgressObject stop(TargetModuleID[] moduleIDList) throws IllegalStateException, RemoteException { try { - server.invoke(DEPLOYER_NAME, "stop", new Object[]{moduleIDList}, + Object result = server.invoke(DEPLOYER_NAME, "prepareStop", new Object[]{moduleIDList}, new String[]{getArrayType(TargetModuleID.class.getName())}); - return null; //todo: return a proper P.O. based on whatever the server ends up returning + if(result instanceof Exception) { + throw (Exception)result; + } else { + return new JmxProgressObject(((Integer)result).intValue(), server); + } } catch(UndeclaredThrowableException e) { throw new RemoteException("Server request failed", e.getCause()); } catch(Exception e) { @@ -186,9 +217,13 @@ public ProgressObject undeploy(TargetModuleID[] moduleIDList) throws IllegalStateException, RemoteException { try { - server.invoke(DEPLOYER_NAME, "undeploy", new Object[]{moduleIDList}, + Object result = server.invoke(DEPLOYER_NAME, "prepareUndeploy", new Object[]{moduleIDList}, new String[]{getArrayType(TargetModuleID.class.getName())}); - return null; //todo: return a proper P.O. based on whatever the server ends up returning + if(result instanceof Exception) { + throw (Exception)result; + } else { + return new JmxProgressObject(((Integer)result).intValue(), server); + } } catch(UndeclaredThrowableException e) { throw new RemoteException("Server request failed", e.getCause()); } catch(Exception e) { 1.2 +91 -9 incubator-geronimo/modules/kernel/src/java/org/apache/geronimo/kernel/deployment/ApplicationDeployer.java Index: ApplicationDeployer.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/kernel/src/java/org/apache/geronimo/kernel/deployment/ApplicationDeployer.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- ApplicationDeployer.java 17 Nov 2003 10:57:40 -0000 1.1 +++ ApplicationDeployer.java 17 Nov 2003 20:31:07 -0000 1.2 @@ -111,6 +111,7 @@ GeronimoMBeanInfo mbeanInfo = new GeronimoMBeanInfo(); mbeanInfo.setAutostart(true); mbeanInfo.setTargetClass(ApplicationDeployer.class.getName()); + // Methods taken over from DeploymentController mbeanInfo.addOperationInfo(new GeronimoOperationInfo("planDeployment", new GeronimoParameterInfo[] { new GeronimoParameterInfo("Source", ObjectName.class.getName(), "Good question!"), @@ -137,6 +138,83 @@ 0, "Undeploy the URL")); //todo: add the rest of the operation methods to support the JSR-88 client + // Methods supporting JSR-88 client + mbeanInfo.addOperationInfo(new GeronimoOperationInfo("getTargets", + new GeronimoParameterInfo[] {}, + 0, + "Gets a list of the targets available for deployment")); + mbeanInfo.addOperationInfo(new GeronimoOperationInfo("getRunningModules", + new GeronimoParameterInfo[] { + new GeronimoParameterInfo("moduleTypeCode", Integer.TYPE.getName(), "The module type to search for, from ModuleType"), + new GeronimoParameterInfo("targetList", "[L"+Target.class.getName()+";", "The list of targets to search"), + }, + 0, + "Gets a list of the modules running in the server")); + mbeanInfo.addOperationInfo(new GeronimoOperationInfo("getNonRunningModules", + new GeronimoParameterInfo[] { + new GeronimoParameterInfo("moduleTypeCode", Integer.TYPE.getName(), "The module type to search for, from ModuleType"), + new GeronimoParameterInfo("targetList", "[L"+Target.class.getName()+";", "The list of targets to search"), + }, + 0, + "Gets a list of the modules distributed but not running in the server")); + mbeanInfo.addOperationInfo(new GeronimoOperationInfo("getAvailableModules", + new GeronimoParameterInfo[] { + new GeronimoParameterInfo("moduleTypeCode", Integer.TYPE.getName(), "The module type to search for, from ModuleType"), + new GeronimoParameterInfo("targetList", "[L"+Target.class.getName()+";", "The list of targets to search"), + }, + 0, + "Gets a list of the all the modules in the server, whether running or not")); + mbeanInfo.addOperationInfo(new GeronimoOperationInfo("prepareDistribute", + new GeronimoParameterInfo[] { + new GeronimoParameterInfo("targets", "[L"+Target.class.getName()+";", "The list of targets to distribute to"), + new GeronimoParameterInfo("moduleArchive", URL.class.getName(), "A URL to the module to distribute"), + new GeronimoParameterInfo("deploymentPlan", URL.class.getName(), "A URL to the deployment plan of the module in question"), + }, + 0, + "Begins the process of distributing a new module. You must start the deployment job with the returned ID.")); + mbeanInfo.addOperationInfo(new GeronimoOperationInfo("prepareDistribute", + new GeronimoParameterInfo[] { + new GeronimoParameterInfo("targets", "[L"+Target.class.getName()+";", "The list of targets to distribute to"), + new GeronimoParameterInfo("name", String.class.getName(), "The name of the module"), + new GeronimoParameterInfo("moduleArchive", "[B", "The content of the module to distribute"), + new GeronimoParameterInfo("deploymentPlan", "[B", "The content of the deployment plan of the module in question"), + }, + 0, + "Begins the process of distributing a new module. You must start the deployment job with the returned ID.")); + mbeanInfo.addOperationInfo(new GeronimoOperationInfo("prepareStart", + new GeronimoParameterInfo[] { + new GeronimoParameterInfo("modules", "[L"+TargetModuleID.class.getName()+";", "The list of modules to start"), + }, + 0, + "Begins the process of starting one or more modules. You must start the deployment job with the returned ID.")); + mbeanInfo.addOperationInfo(new GeronimoOperationInfo("prepareStop", + new GeronimoParameterInfo[] { + new GeronimoParameterInfo("modules", "[L"+TargetModuleID.class.getName()+";", "The list of modules to stop"), + }, + 0, + "Begins the process of stopping one or more modules. You must start the deployment job with the returned ID.")); + mbeanInfo.addOperationInfo(new GeronimoOperationInfo("prepareUndeploy", + new GeronimoParameterInfo[] { + new GeronimoParameterInfo("modules", "[L"+TargetModuleID.class.getName()+";", "The list of modules to undeploy"), + }, + 0, + "Begins the process of undeploying one or more modules. You must start the deployment job with the returned ID.")); + mbeanInfo.addOperationInfo(new GeronimoOperationInfo("prepareRedeploy", + new GeronimoParameterInfo[] { + new GeronimoParameterInfo("moduleIDList", "[L"+TargetModuleID.class.getName()+";", "The list of modules to redeploy"), + new GeronimoParameterInfo("moduleArchive", URL.class.getName(), "A URL to the module to distribute"), + new GeronimoParameterInfo("deploymentPlan", URL.class.getName(), "A URL to the deployment plan of the module in question"), + }, + 0, + "Begins the process of stopping one or more modules. You must start the deployment job with the returned ID.")); + mbeanInfo.addOperationInfo(new GeronimoOperationInfo("prepareRedeploy", + new GeronimoParameterInfo[] { + new GeronimoParameterInfo("moduleIDList", "[L"+TargetModuleID.class.getName()+";", "The list of modules to redeploy"), + new GeronimoParameterInfo("moduleArchive", "[B", "The content of the module to distribute"), + new GeronimoParameterInfo("deploymentPlan", "[B", "The content of the deployment plan of the module in question"), + }, + 0, + "Begins the process of stopping one or more modules. You must start the deployment job with the returned ID.")); return mbeanInfo; } @@ -251,22 +329,26 @@ //todo: Create and start an MBean for the deployment, use that later to check status of the deployment GeronimoTargetModule tm = new GeronimoTargetModule(localServerTarget, name); //todo: specify URL for web apps try { - Integer id = (Integer)context.getServer().invoke(DEPLOYER_NAME, "prepareDeploymentJob", new Object[]{ - new DistributeURL(tm, module.toURL(), URLType.PACKED_ARCHIVE)}, new String[]{ + Integer id = (Integer)context.getServer().invoke(DEPLOYER_NAME, "prepareDeploymentJob", new Object[]{new DeploymentGoal[]{ + new DistributeURL(tm, module.toURL(), URLType.PACKED_ARCHIVE)}}, new String[]{ "[L"+DeploymentGoal.class.getName()+";"}); return id.intValue(); // if(!deployments.contains(tm)) { // deployments.add(tm); // } - } catch(Exception e) { + } catch(Throwable e) { log.error("Unable to prepare a deployment job", e); + while(e.getCause() != null) { + e = e.getCause(); + log.error("Unable to prepare a deployment job", e); + } return -1; } } /** */ - public int start(TargetModuleID[] modules) { + public int prepareStart(TargetModuleID[] modules) { validateModules(modules, false); //todo: implement me return -1; @@ -274,7 +356,7 @@ /** */ - public int stop(TargetModuleID[] modules) { + public int prepareStop(TargetModuleID[] modules) { validateModules(modules, true); //todo: implement me return -1; @@ -282,7 +364,7 @@ /** */ - public int undeploy(TargetModuleID[] modules) { + public int prepareUndeploy(TargetModuleID[] modules) { validateModules(modules, false); //todo: implement me return -1; @@ -290,14 +372,14 @@ /** */ - public int redeploy(TargetModuleID[] moduleIDList, URL moduleArchive, URL deploymentPlan) { + public int prepareRedeploy(TargetModuleID[] moduleIDList, URL moduleArchive, URL deploymentPlan) { //todo: implement me return -1; } /** */ - public int redeploy(TargetModuleID[] moduleIDList, byte[] moduleArchive, byte[] deploymentPlan) { + public int prepareRedeploy(TargetModuleID[] moduleIDList, byte[] moduleArchive, byte[] deploymentPlan) { //todo: implement me return -1; }