- /*
- * Copyright 2000-2002,2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
- package org.apache.tools.ant.taskdefs.optional.ejb;
-
-
- import java.io.File;
- import org.apache.tools.ant.BuildException;
- import org.apache.tools.ant.Task;
- import org.apache.tools.ant.taskdefs.Java;
- import org.apache.tools.ant.types.Path;
-
- /**
- * Starts a WebLogic server.
- * A number of parameters are used to control the operation of the weblogic
- * instance. Note that the task, and hence ant, will not complete until the
- * weblogic instance is stopped.</p>
- *
- */
- public class WLRun extends Task {
- protected static final String DEFAULT_WL51_POLICY_FILE = "weblogic.policy";
- protected static final String DEFAULT_WL60_POLICY_FILE = "lib/weblogic.policy";
- protected static final String DEFAULT_PROPERTIES_FILE = "weblogic.properties";
-
- /**
- * The classpath to be used when running the Java VM. It must contain the
- * weblogic classes <b>and</b> the implementation classes of the home and
- * remote interfaces.
- */
- private Path classpath;
-
- /**
- * The weblogic classpath to the be used when running weblogic.
- */
- private Path weblogicClasspath;
-
- private String weblogicMainClass = "weblogic.Server";
-
- /**
- * Addional arguments to pass to the JVM used to run weblogic
- */
- private String additionalArgs = "";
-
- /**
- * The security policy to use when running the weblogic server
- */
- private String securityPolicy;
-
- /**
- * The weblogic system home directory
- */
- private File weblogicSystemHome;
-
- /**
- * The weblogic domain
- */
- private String weblogicDomainName;
-
- /**
- * The name of the weblogic server - used to select the server's directory in the
- * weblogic home directory.
- */
- private String weblogicSystemName = "myserver";
-
- /**
- * The file containing the weblogic properties for this server.
- */
- private String weblogicPropertiesFile = null;
-
- /**
- * additional args to pass to the spawned jvm
- */
- private String additionalJvmArgs = "";
-
- /**
- * The location of the BEA Home under which this server is run.
- * WL6 only
- */
- private File beaHome = null;
-
- /**
- * The management username
- */
- private String managementUsername = "system";
-
- /**
- * The management password
- */
- private String managementPassword = null;
-
- /**
- * The provate key password - used for SSL
- */
- private String pkPassword = null;
-
- /**
- * Add the classpath for the user classes
- */
- public Path createClasspath() {
- if (classpath == null) {
- classpath = new Path(getProject());
- }
- return classpath.createPath();
- }
-
- /**
- * Get the classpath to the weblogic classpaths
- */
- public Path createWLClasspath() {
- if (weblogicClasspath == null) {
- weblogicClasspath = new Path(getProject());
- }
- return weblogicClasspath.createPath();
- }
-
- /**
- * Do the work.
- *
- * The work is actually done by creating a separate JVM to run a helper task.
- * This approach allows the classpath of the helper task to be set. Since the
- * weblogic tools require the class files of the project's home and remote
- * interfaces to be available in the classpath, this also avoids having to
- * start ant with the class path of the project it is building.
- *
- * @exception BuildException if someting goes wrong with the build
- */
- public void execute() throws BuildException {
- if (weblogicSystemHome == null) {
- throw new BuildException("weblogic home must be set");
- }
- if (!weblogicSystemHome.isDirectory()) {
- throw new BuildException("weblogic home directory "
- + weblogicSystemHome.getPath() + " is not valid");
- }
-
- if (beaHome != null) {
- executeWLS6();
- } else {
- executeWLS();
- }
- }
-
- private File findSecurityPolicyFile(String defaultSecurityPolicy) {
- String securityPolicy = this.securityPolicy;
- if (securityPolicy == null) {
- securityPolicy = defaultSecurityPolicy;
- }
- File securityPolicyFile = new File(weblogicSystemHome, securityPolicy);
- // If an explicit securityPolicy file was specified, it maybe an
- // absolute path. Use the project to resolve it.
- if (this.securityPolicy != null && !securityPolicyFile.exists()) {
- securityPolicyFile = getProject().resolveFile(securityPolicy);
- }
- // If we still can't find it, complain
- if (!securityPolicyFile.exists()) {
- throw new BuildException("Security policy " + securityPolicy
- + " was not found.");
- }
- return securityPolicyFile;
- }
-
- private void executeWLS6() {
- File securityPolicyFile
- = findSecurityPolicyFile(DEFAULT_WL60_POLICY_FILE);
- if (!beaHome.isDirectory()) {
- throw new BuildException("BEA home " + beaHome.getPath()
- + " is not valid");
- }
-
- File configFile = new File(weblogicSystemHome, "config/"
- + weblogicDomainName + "/config.xml");
- if (!configFile.exists()) {
- throw new BuildException("Server config file " + configFile
- + " not found.");
- }
-
- if (managementPassword == null) {
- throw new BuildException("You must supply a management password "
- + "to start the server");
- }
-
- Java weblogicServer = (Java) getProject().createTask("java");
- weblogicServer.setTaskName(getTaskName());
- weblogicServer.setFork(true);
- weblogicServer.setDir(weblogicSystemHome);
- weblogicServer.setClassname(weblogicMainClass);
-
- String jvmArgs = additionalJvmArgs;
-
- jvmArgs += " -Dweblogic.Domain=" + weblogicDomainName;
- jvmArgs += " -Dweblogic.Name=" + weblogicSystemName;
- jvmArgs += " -Dweblogic.system.home=" + weblogicSystemHome;
-
- jvmArgs += " -Dbea.home=" + beaHome;
- jvmArgs += " -Djava.security.policy==" + securityPolicyFile;
-
- jvmArgs += " -Dweblogic.management.username=" + managementUsername;
- jvmArgs += " -Dweblogic.management.password=" + managementPassword;
- if (pkPassword != null) {
- jvmArgs += " -Dweblogic.pkpassword=" + pkPassword;
- }
-
-
- weblogicServer.createJvmarg().setLine(jvmArgs);
- weblogicServer.createArg().setLine(additionalArgs);
-
- if (classpath != null) {
- weblogicServer.setClasspath(classpath);
- }
-
- if (weblogicServer.executeJava() != 0) {
- throw new BuildException("Execution of weblogic server failed");
- }
- }
-
- private void executeWLS() {
- File securityPolicyFile
- = findSecurityPolicyFile(DEFAULT_WL51_POLICY_FILE);
- File propertiesFile = null;
-
-
- if (weblogicPropertiesFile == null) {
- weblogicPropertiesFile = DEFAULT_PROPERTIES_FILE;
- }
- propertiesFile = new File(weblogicSystemHome, weblogicPropertiesFile);
- if (!propertiesFile.exists()) {
- // OK, properties file may be absolute
- propertiesFile = getProject().resolveFile(weblogicPropertiesFile);
- if (!propertiesFile.exists()) {
- throw new BuildException("Properties file "
- + weblogicPropertiesFile
- + " not found in weblogic home " + weblogicSystemHome
- + " or as absolute file");
- }
- }
-
- Java weblogicServer = (Java) getProject().createTask("java");
- weblogicServer.setTaskName(getTaskName());
- weblogicServer.setFork(true);
- weblogicServer.setClassname(weblogicMainClass);
-
- String jvmArgs = additionalJvmArgs;
-
- if (weblogicClasspath != null) {
- jvmArgs += " -Dweblogic.class.path=" + weblogicClasspath;
- }
-
- jvmArgs += " -Djava.security.manager -Djava.security.policy==" + securityPolicyFile;
- jvmArgs += " -Dweblogic.system.home=" + weblogicSystemHome;
- jvmArgs += " -Dweblogic.system.name=" + weblogicSystemName;
- jvmArgs += " -Dweblogic.system.propertiesFile=" + weblogicPropertiesFile;
-
- weblogicServer.createJvmarg().setLine(jvmArgs);
- weblogicServer.createArg().setLine(additionalArgs);
-
- if (classpath != null) {
- weblogicServer.setClasspath(classpath);
- }
- if (weblogicServer.executeJava() != 0) {
- throw new BuildException("Execution of weblogic server failed");
- }
- }
-
-
- /**
- * The classpath to be used with the Java Virtual Machine that runs the Weblogic
- * Server; required. Prior to Weblogic 6.0, this is typically set to the Weblogic
- * boot classpath. Under Weblogic 6.0 this should include all the
- * weblogic jars
- *
- * @param classpath the classpath to use when executing the weblogic server.
- */
- public void setClasspath(Path classpath) {
- this.classpath = classpath;
- }
-
- /**
- * Set the weblogic classpath used by the Weblogic Server;
- * optional, and only applicable to WL4.5.1
- *
- * The weblogic classpath is used by weblogic to support dynamic class loading.
- *
- * @param weblogicClasspath the weblogic classpath
- */
- public void setWlclasspath(Path weblogicClasspath) {
- this.weblogicClasspath = weblogicClasspath;
- }
-
- /**
- * The name of the security policy file within the weblogic home directory that
- * is to be used. If not specified, the default policy file <code>weblogic.policy</code>
- * is used.
- *
- * @param securityPolicy the security policy to use.
- */
- public void setPolicy(String securityPolicy) {
- this.securityPolicy = securityPolicy;
- }
-
- /**
- * The location where weblogic lives.
- * Required. This is the absolute location, not relative to
- * BEA home.
- * @param weblogicHome the home directory of weblogic.
- *
- */
- public void setHome(File weblogicHome) {
- weblogicSystemHome = weblogicHome;
- }
-
- /**
- * The location of the BEA Home; implicitly
- * selects Weblogic 6.0; optional.
- *
- * @param beaHome the BEA Home directory.
- *
- */
- public void setBEAHome(File beaHome) {
- this.beaHome = beaHome;
- }
-
- /**
- * The name of the weblogic server within the weblogic home which is to be run.
- * Optiona, defaults to "myserver"
- *
- * @param serverName the name of the server.
- */
- public void setName(String serverName) {
- this.weblogicSystemName = serverName;
- }
-
- /**
- * Set the Domain to run in; required for WL6.0
- *
- * @param domain the domain
- */
- public void setDomain(String domain) {
- this.weblogicDomainName = domain;
- }
-
- /**
- * The name of the server's properties file within the weblogic home directory
- * used to control the weblogic instance;
- * required for WL4.5.1
- *
- *
- * @param propertiesFilename the properties file name
- */
- public void setProperties(String propertiesFilename) {
- this.weblogicPropertiesFile = propertiesFilename;
- }
-
- /**
- * Set the additional arguments to pass to the weblogic JVM
- * @param args the arguments to be passed to the JVM
- */
- public void setJvmargs(String args) {
- this.additionalJvmArgs = args;
- }
-
- /**
- * Set the management username to run the server;
- * optional and only applicable to WL6.0.
- *
- * @param username the management username of the server.
- */
- public void setUsername(String username) {
- this.managementUsername = username;
- }
-
-
- /**
- * Set the management password of the server;
- * optional and only applicable to WL6.0.
- * @param password the management pasword of the server.
- */
- public void setPassword(String password) {
- this.managementPassword = password;
- }
-
- /**
- * Set the private key password so the server can decrypt the SSL private key file;
- * optional and only applicable to WL6.0.
- * @param pkpassword the private key password,
- */
- public void setPKPassword(String pkpassword) {
- this.pkPassword = pkpassword;
- }
-
- /**
- * Additional argument string passed to the Weblogic instance;
- * optional.
- */
- public void setArgs(String args) {
- additionalArgs = args;
- }
-
- /**
- * name of the main class for weblogic; optional.
- */
- public void setWeblogicMainClass(String c) {
- weblogicMainClass = c;
- }
- }