org.ow2.jonas.ant.JonasHotDeploymentTool Maven / Gradle / Ivy
/**
* JOnAS: Java(TM) Open Application Server
* Copyright (C) 2004 Bull S.A.
* Contact: [email protected]
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* Initial developer: Florent BENOIT
* --------------------------------------------------------------------------
* $Id: JonasHotDeploymentTool.java 15428 2008-10-07 11:20:29Z sauthieg $
* --------------------------------------------------------------------------
*/
package org.ow2.jonas.ant;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.Java;
/**
* Class used to manage deployment on JOnAS (with ant and ServerDeploy task)
* @author Florent Benoit
*/
public class JonasHotDeploymentTool extends BootstrapTask implements HotDeploymentTool {
/**
* Admin class (JonasAdmin class)
*/
private static final String ADMIN_CLASS = "org.ow2.jonas.commands.admin.ClientAdmin";
/**
* The parent task
*/
private ServerDeploy task;
/**
* All actions supported by JOnAS
*/
private static final String[] VALID_ACTIONS = {ACTION_DELETE, ACTION_DEPLOY, ACTION_LIST, ACTION_UNDEPLOY,
ACTION_UPDATE};
/**
* Validates the passed in attributes. Subclasses should chain to this
* super-method to insure validation of boilerplate attributes. Only the
* "action" attribute is required in the base class. Subclasses should check
* attributes accordingly.
* @throws BuildException if the attributes are
* invalid or incomplete.
*/
public void validateAttributes() throws BuildException {
if (task.getAction() == null) {
throw new BuildException("The \"action\" attribute must be set");
}
if (!isActionValid()) {
throw new BuildException("Invalid action \"" + task.getAction() + "\" passed");
}
}
/**
* Sets the parent task.
* @param task a ServerDeploy object representing the parent task.
* @ant.attribute ignore="true"
*/
public void setTask(ServerDeploy task) {
this.task = task;
}
/**
* Returns the task field, a ServerDeploy object.
* @return An ServerDeploy representing the parent task.
*/
protected ServerDeploy getTask() {
return task;
}
/**
* Determines if the "action" attribute defines a valid action.
* Subclasses should determine if the action passed in is supported by the
* vendor's deployment tool.
Actions may by "deploy", "delete", etc...
* It all depends on the tool.
* @return true if the "action" attribute is valid, false if not.
*/
protected boolean isActionValid() {
String action = getTask().getAction();
for (int i = 0; i < VALID_ACTIONS.length; i++) {
if (action.equals(VALID_ACTIONS[i])) {
return true;
}
}
return false;
}
/**
* Perform the actual deployment. It's up to the subclasses to implement the
* actual behavior.
* @exception org.apache.tools.ant.BuildException if the attributes are
* invalid or incomplete.
*/
public void deploy() throws BuildException {
String action = getTask().getAction();
Java bootstrapTask = getBootstraptask(ADMIN_CLASS);
String fileName = getTask().getSource().getPath();
if (action.equals(ACTION_DEPLOY) || action.equals(ACTION_UPDATE)) {
bootstrapTask.setTaskName("JOnAS/Deploy");
bootstrapTask.createArg().setValue("-a");
bootstrapTask.createArg().setValue(fileName);
bootstrapTask.log("Deploying '" + fileName + "'...", Project.MSG_INFO);
} else if (action.equals(ACTION_DELETE) || action.equals(ACTION_UNDEPLOY)) {
bootstrapTask.setTaskName("JOnAS/Undeploy");
bootstrapTask.createArg().setValue("-r");
bootstrapTask.createArg().setValue(fileName);
bootstrapTask.log("Undeploying '" + fileName + "'...", Project.MSG_INFO);
} else if (action.equals(ACTION_LIST)) {
bootstrapTask.setTaskName("JOnAS/List");
bootstrapTask.createArg().setValue("-l");
getTask().log("Listing beans ...", Project.MSG_INFO);
} else {
throw new BuildException("Invalid action \"" + action + "\" passed");
}
bootstrapTask.createArg().setValue("-n");
bootstrapTask.createArg().setValue(getServerName());
bootstrapTask.executeJava();
}
}