|
@@ -0,0 +1,281 @@ |
|
|
|
|
|
/* |
|
|
|
|
|
* The Apache Software License, Version 1.1 |
|
|
|
|
|
* |
|
|
|
|
|
* Copyright (c) 2002 The Apache Software Foundation. All rights |
|
|
|
|
|
* reserved. |
|
|
|
|
|
* |
|
|
|
|
|
* Redistribution and use in source and binary forms, with or without |
|
|
|
|
|
* modification, are permitted provided that the following conditions |
|
|
|
|
|
* are met: |
|
|
|
|
|
* |
|
|
|
|
|
* 1. Redistributions of source code must retain the above copyright |
|
|
|
|
|
* notice, this list of conditions and the following disclaimer. |
|
|
|
|
|
* |
|
|
|
|
|
* 2. Redistributions in binary form must reproduce the above copyright |
|
|
|
|
|
* notice, this list of conditions and the following disclaimer in |
|
|
|
|
|
* the documentation and/or other materials provided with the |
|
|
|
|
|
* distribution. |
|
|
|
|
|
* |
|
|
|
|
|
* 3. The end-user documentation included with the redistribution, if |
|
|
|
|
|
* any, must include the following acknowlegement: |
|
|
|
|
|
* "This product includes software developed by the |
|
|
|
|
|
* Apache Software Foundation (http://www.apache.org/)." |
|
|
|
|
|
* Alternately, this acknowlegement may appear in the software itself, |
|
|
|
|
|
* if and wherever such third-party acknowlegements normally appear. |
|
|
|
|
|
* |
|
|
|
|
|
* 4. The names "The Jakarta Project", "Ant", and "Apache Software |
|
|
|
|
|
* Foundation" must not be used to endorse or promote products derived |
|
|
|
|
|
* from this software without prior written permission. For written |
|
|
|
|
|
* permission, please contact apache@apache.org. |
|
|
|
|
|
* |
|
|
|
|
|
* 5. Products derived from this software may not be called "Apache" |
|
|
|
|
|
* nor may "Apache" appear in their names without prior written |
|
|
|
|
|
* permission of the Apache Group. |
|
|
|
|
|
* |
|
|
|
|
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED |
|
|
|
|
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
|
|
|
|
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
|
|
|
|
|
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR |
|
|
|
|
|
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
|
|
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
|
|
|
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
|
|
|
|
|
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
|
|
|
|
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
|
|
|
|
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |
|
|
|
|
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
|
|
|
|
|
* SUCH DAMAGE. |
|
|
|
|
|
* ==================================================================== |
|
|
|
|
|
* |
|
|
|
|
|
* This software consists of voluntary contributions made by many |
|
|
|
|
|
* individuals on behalf of the Apache Software Foundation. For more |
|
|
|
|
|
* information on the Apache Software Foundation, please see |
|
|
|
|
|
* <http://www.apache.org/>. |
|
|
|
|
|
*/ |
|
|
|
|
|
package org.apache.tools.ant.taskdefs.optional.j2ee; |
|
|
|
|
|
|
|
|
|
|
|
import java.io.File; |
|
|
|
|
|
|
|
|
|
|
|
import org.apache.tools.ant.BuildException; |
|
|
|
|
|
import org.apache.tools.ant.taskdefs.Java; |
|
|
|
|
|
import org.apache.tools.ant.taskdefs.optional.j2ee.AbstractHotDeploymentTool; |
|
|
|
|
|
import org.apache.tools.ant.taskdefs.optional.j2ee.HotDeploymentTool; |
|
|
|
|
|
import org.apache.tools.ant.taskdefs.optional.j2ee.ServerDeploy; |
|
|
|
|
|
import org.apache.tools.ant.types.Path; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* An Ant wrapper task for the weblogic.deploy tool. This is used |
|
|
|
|
|
* to hot-deploy J2EE applications to a running WebLogic server. |
|
|
|
|
|
* This is <b>not</b> the same as creating the application |
|
|
|
|
|
* archive. This task assumes the archive (EAR, JAR, or WAR) file |
|
|
|
|
|
* has been assembled and is supplied as the "source" attribute. |
|
|
|
|
|
* <p> |
|
|
|
|
|
* |
|
|
|
|
|
* In the end, this task assembles the commadline parameters and |
|
|
|
|
|
* runs the weblogic.deploy tool in a seperate JVM. |
|
|
|
|
|
* |
|
|
|
|
|
*@author Cyrille Morvan |
|
|
|
|
|
*@created March 30, 2002 |
|
|
|
|
|
*@see org.apache.tools.ant.taskdefs.optional.j2ee.HotDeploymentTool |
|
|
|
|
|
*@see org.apache.tools.ant.taskdefs.optional.j2ee.AbstractHotDeploymentTool |
|
|
|
|
|
*@see org.apache.tools.ant.taskdefs.optional.j2ee.ServerDeploy |
|
|
|
|
|
*/ |
|
|
|
|
|
public class JonasHotDeploymentTool extends GenericHotDeploymentTool implements HotDeploymentTool { |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* Description of the Field |
|
|
|
|
|
*/ |
|
|
|
|
|
protected final static String DEFAULT_ORB = "RMI"; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* The classname of the tool to run * |
|
|
|
|
|
*/ |
|
|
|
|
|
private final static String JONAS_DEPLOY_CLASS_NAME = "org.objectweb.jonas.adm.JonasAdmin"; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* All the valid actions that weblogic.deploy permits * |
|
|
|
|
|
*/ |
|
|
|
|
|
private final static String[] VALID_ACTIONS = |
|
|
|
|
|
{ACTION_DELETE, ACTION_DEPLOY, ACTION_LIST, ACTION_UNDEPLOY, ACTION_UPDATE}; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* Description of the Field |
|
|
|
|
|
*/ |
|
|
|
|
|
private File jonasroot; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* Description of the Field |
|
|
|
|
|
*/ |
|
|
|
|
|
private String orb = null; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* Description of the Field |
|
|
|
|
|
*/ |
|
|
|
|
|
private String davidHost; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* Description of the Field |
|
|
|
|
|
*/ |
|
|
|
|
|
private int davidPort; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* Set the host for the David ORB. |
|
|
|
|
|
* |
|
|
|
|
|
*@param inValue The new davidhost value |
|
|
|
|
|
*/ |
|
|
|
|
|
public void setDavidhost(final String inValue) { |
|
|
|
|
|
davidHost = inValue; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* Set the port for the David ORB. |
|
|
|
|
|
* |
|
|
|
|
|
*@param inValue The new davidport value |
|
|
|
|
|
*/ |
|
|
|
|
|
public void setDavidport(final int inValue) { |
|
|
|
|
|
davidPort = inValue; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* set the jonas root directory (-Dinstall.root=). This |
|
|
|
|
|
* element is required. |
|
|
|
|
|
* |
|
|
|
|
|
*@param inValue The new jonasroot value |
|
|
|
|
|
*/ |
|
|
|
|
|
public void setJonasroot(final File inValue) { |
|
|
|
|
|
jonasroot = inValue; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* Set the ORB to construct classpath. |
|
|
|
|
|
* |
|
|
|
|
|
*@param inValue RMI, JEREMIE, DAVID,... |
|
|
|
|
|
*/ |
|
|
|
|
|
public void setOrb(final String inValue) { |
|
|
|
|
|
orb = inValue; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* gets the classpath field. |
|
|
|
|
|
* |
|
|
|
|
|
*@return A Path representing the "classpath" attribute. |
|
|
|
|
|
*/ |
|
|
|
|
|
public Path getClasspath() { |
|
|
|
|
|
|
|
|
|
|
|
Path aClassPath = super.getClasspath(); |
|
|
|
|
|
|
|
|
|
|
|
if (aClassPath == null) { |
|
|
|
|
|
aClassPath = new Path(getTask().getProject()); |
|
|
|
|
|
} |
|
|
|
|
|
if (orb != null) { |
|
|
|
|
|
String aOrbJar = new File(jonasroot, "lib/" + orb + "_jonas.jar").toString(); |
|
|
|
|
|
String aConfigDir = new File(jonasroot, "config/").toString(); |
|
|
|
|
|
Path aJOnASOrbPath = new Path(aClassPath.getProject(), |
|
|
|
|
|
aOrbJar + File.pathSeparator + aConfigDir); |
|
|
|
|
|
aClassPath.append(aJOnASOrbPath); |
|
|
|
|
|
} |
|
|
|
|
|
return aClassPath; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* Validates the passed in attributes. <p> |
|
|
|
|
|
* |
|
|
|
|
|
* The rules are: |
|
|
|
|
|
* <ol> |
|
|
|
|
|
* <li> If action is "deploy" or "update" the "application" |
|
|
|
|
|
* and "source" attributes must be supplied. |
|
|
|
|
|
* <li> If action is "delete" or "undeploy" the |
|
|
|
|
|
* "application" attribute must be supplied. |
|
|
|
|
|
* |
|
|
|
|
|
*@exception BuildException Description |
|
|
|
|
|
* of Exception |
|
|
|
|
|
*/ |
|
|
|
|
|
public void validateAttributes() throws BuildException { |
|
|
|
|
|
// super.validateAttributes(); // don't want to call this method |
|
|
|
|
|
|
|
|
|
|
|
Java java = getJava(); |
|
|
|
|
|
|
|
|
|
|
|
String action = getTask().getAction(); |
|
|
|
|
|
if (action == null) { |
|
|
|
|
|
throw new BuildException("The \"action\" attribute must be set"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (!isActionValid()) { |
|
|
|
|
|
throw new BuildException("Invalid action \"" + action + "\" passed"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (getClassName() == null) { |
|
|
|
|
|
setClassName(JONAS_DEPLOY_CLASS_NAME); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (jonasroot == null || jonasroot.isDirectory()) { |
|
|
|
|
|
java.createJvmarg().setValue("-Dinstall.root=" + jonasroot); |
|
|
|
|
|
java.createJvmarg().setValue("-Djava.security.policy=" + jonasroot + "/config/java.policy"); |
|
|
|
|
|
|
|
|
|
|
|
if ("DAVID".equals(orb)) { |
|
|
|
|
|
java.createJvmarg().setValue("-Dorg.omg.CORBA.ORBClass=org.objectweb.david.libs.binding.orbs.iiop.IIOPORB"); |
|
|
|
|
|
java.createJvmarg().setValue("-Dorg.omg.CORBA.ORBSingletonClass=org.objectweb.david.libs.binding.orbs.ORBSingletonClass"); |
|
|
|
|
|
java.createJvmarg().setValue("-Djavax.rmi.CORBA.StubClass=org.objectweb.david.libs.stub_factories.rmi.StubDelegate"); |
|
|
|
|
|
java.createJvmarg().setValue("-Djavax.rmi.CORBA.PortableRemoteObjectClass=org.objectweb.david.libs.binding.rmi.ORBPortableRemoteObjectDelegate"); |
|
|
|
|
|
java.createJvmarg().setValue("-Djavax.rmi.CORBA.UtilClass=org.objectweb.david.libs.helpers.RMIUtilDelegate"); |
|
|
|
|
|
java.createJvmarg().setValue("-Ddavid.CosNaming.default_method=0"); |
|
|
|
|
|
java.createJvmarg().setValue("-Ddavid.rmi.ValueHandlerClass=com.sun.corba.se.internal.io.ValueHandlerImpl"); |
|
|
|
|
|
if (davidHost != null) { |
|
|
|
|
|
java.createJvmarg().setValue("-Ddavid.CosNaming.default_host=" + davidHost); |
|
|
|
|
|
} |
|
|
|
|
|
if (davidPort != 0) { |
|
|
|
|
|
java.createJvmarg().setValue("-Ddavid.CosNaming.default_port=" + davidPort); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
String anAction = getTask().getAction(); |
|
|
|
|
|
|
|
|
|
|
|
if (getServer() != null) { |
|
|
|
|
|
java.createArg().setLine("-n " + getServer()); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (action.equals(ACTION_DEPLOY) || |
|
|
|
|
|
action.equals(ACTION_UPDATE) || |
|
|
|
|
|
action.equals("redeploy")) { |
|
|
|
|
|
java.createArg().setLine("-a " + getTask().getSource()); |
|
|
|
|
|
} |
|
|
|
|
|
else if (action.equals(ACTION_DELETE) || action.equals(ACTION_UNDEPLOY)) { |
|
|
|
|
|
java.createArg().setLine("-r " + getTask().getSource()); |
|
|
|
|
|
} |
|
|
|
|
|
else if (action.equals(ACTION_LIST)) { |
|
|
|
|
|
java.createArg().setValue("-l"); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* Determines if the action supplied is valid. <p> |
|
|
|
|
|
* |
|
|
|
|
|
* Valid actions are contained in the static array |
|
|
|
|
|
* VALID_ACTIONS |
|
|
|
|
|
* |
|
|
|
|
|
*@return true if the action attribute is valid, false if |
|
|
|
|
|
* not. |
|
|
|
|
|
*/ |
|
|
|
|
|
protected boolean isActionValid() { |
|
|
|
|
|
boolean valid = false; |
|
|
|
|
|
|
|
|
|
|
|
String action = getTask().getAction(); |
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < VALID_ACTIONS.length; i++) { |
|
|
|
|
|
if (action.equals(VALID_ACTIONS[i])) { |
|
|
|
|
|
valid = true; |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return valid; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|