Author: peterreilly
Date: Mon Aug 20 08:57:39 2007
New Revision: 567734
URL: http://svn.apache.org/viewvc?rev=567734&view=rev
Log:
initial checkin
Added:
ant/sandbox/antlibs/weblogic/trunk/NOTICE
ant/sandbox/antlibs/weblogic/trunk/build.xml
ant/sandbox/antlibs/weblogic/trunk/src/
ant/sandbox/antlibs/weblogic/trunk/src/main/
ant/sandbox/antlibs/weblogic/trunk/src/main/org/
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/antlib.xml
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DDCreator.java
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DDCreatorHelper.java
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/Ejbc.java
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EjbcHelper.java
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WLRun.java
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WLStop.java
Added: ant/sandbox/antlibs/weblogic/trunk/NOTICE
URL:
http://svn.apache.org/viewvc/ant/sandbox/antlibs/weblogic/trunk/NOTICE?rev=567734&view=auto
==============================================================================
--- ant/sandbox/antlibs/weblogic/trunk/NOTICE (added)
+++ ant/sandbox/antlibs/weblogic/trunk/NOTICE Mon Aug 20 08:57:39 2007
@@ -0,0 +1,11 @@
+ =========================================================================
+ == NOTICE file corresponding to the section 4 d of ==
+ == the Apache License, Version 2.0 ==
+ =========================================================================
+
+ Apache AntLib for weblogic
+ Copyright 2005-2007 The Apache Software Foundation
+
+ This product includes software developed by
+ The Apache Software Foundation (http://www.apache.org/).
+
Added: ant/sandbox/antlibs/weblogic/trunk/build.xml
URL:
http://svn.apache.org/viewvc/ant/sandbox/antlibs/weblogic/trunk/build.xml?rev=567734&view=auto
==============================================================================
--- ant/sandbox/antlibs/weblogic/trunk/build.xml (added)
+++ ant/sandbox/antlibs/weblogic/trunk/build.xml Mon Aug 20 08:57:39 2007
@@ -0,0 +1,44 @@
+<?xml version="1.0"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you 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.
+-->
+<project default="compile" name="weblogic">
+
+ <!-- easy way to override properties -->
+ <property file="build.properties"/>
+
+ <!-- don't fork junit; regexp classes not available -->
+ <property name="junit.fork" value="false" />
+
+ <import file="common/build.xml"/>
+
+ <!-- override compile target -->
+ <target name="compile" depends="setup">
+ <javac
+ srcdir="src/main"
+ destdir="${build.classes}"
+ debug="${javac.debug}"
+ source="${javac.-source}"
+ target="${javac.-target}"
+ >
+ <classpath>
+ <fileset dir="lib/optional" includes="*.jar"/>
+ </classpath>
+ </javac>
+ </target>
+</project>
Added:
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/antlib.xml
URL:
http://svn.apache.org/viewvc/ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/antlib.xml?rev=567734&view=auto
==============================================================================
--- ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/antlib.xml
(added)
+++ ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/antlib.xml
Mon Aug 20 08:57:39 2007
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you 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.
+-->
+<antlib>
+ <taskdef name="wljspc"
+ classname="org.apache.tools.ant.taskdefs.optional.jsp.WLJspc"/>
+ <taskdef name="wlrun"
+ classname="org.apache.tools.ant.taskdefs.optional.ejb.WLRun"/>
+ <taskdef name="wlstop"
+ classname="org.apache.tools.ant.taskdefs.optional.ejb.WLStop"/>
+ <taskdef name="ddcreator"
+ classname="org.apache.tools.ant.taskdefs.optional.ejb.DDCreator"/>
+</antlib>
Added:
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DDCreator.java
URL:
http://svn.apache.org/viewvc/ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DDCreator.java?rev=567734&view=auto
==============================================================================
---
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DDCreator.java
(added)
+++
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DDCreator.java
Mon Aug 20 08:57:39 2007
@@ -0,0 +1,132 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.DirectoryScanner;
+import org.apache.tools.ant.taskdefs.Java;
+import org.apache.tools.ant.taskdefs.MatchingTask;
+import org.apache.tools.ant.types.Commandline;
+import org.apache.tools.ant.types.Path;
+import org.apache.tools.ant.util.FileUtils;
+
+/**
+ * Builds a serialized deployment descriptor given a text file description of
the
+ * descriptor in the format supported by WebLogic.
+ *
+ * This ant task is a front end for the weblogic DDCreator tool.
+ *
+ */
+public class DDCreator extends MatchingTask {
+ /**
+ * The root directory of the tree containing the textual deployment
descriptors. The actual
+ * deployment descriptor files are selected using include and exclude
constructs
+ * on the EJBC task, as supported by the MatchingTask superclass.
+ */
+ private File descriptorDirectory;
+
+ /**
+ * The directory where generated serialised deployment descriptors are
placed.
+ */
+ private File generatedFilesDirectory;
+
+ /**
+ * The classpath to be used in the weblogic ejbc calls. It must contain
the weblogic
+ * classes necessary fro DDCreator <b>and</b> the implementation classes
of the
+ * home and remote interfaces.
+ */
+ private String classpath;
+
+ /**
+ * Do the work.
+ *
+ * The work is actually done by creating 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 something goes wrong with the build
+ */
+ public void execute() throws BuildException {
+ if (descriptorDirectory == null
+ || !descriptorDirectory.isDirectory()) {
+ throw new BuildException("descriptors directory "
+ + descriptorDirectory + " is not valid");
+ }
+ if (generatedFilesDirectory == null
+ || !generatedFilesDirectory.isDirectory()) {
+ throw new BuildException("dest directory "
+ + generatedFilesDirectory + " is not valid");
+ }
+
+ String args = descriptorDirectory + " " + generatedFilesDirectory;
+
+ // get all the files in the descriptor directory
+ DirectoryScanner ds = super.getDirectoryScanner(descriptorDirectory);
+
+ String[] files = ds.getIncludedFiles();
+
+ for (int i = 0; i < files.length; ++i) {
+ args += " " + files[i];
+ }
+
+ String systemClassPath = System.getProperty("java.class.path");
+ String execClassPath = FileUtils.translatePath(systemClassPath + ":" +
classpath);
+ Java ddCreatorTask = new Java(this);
+ ddCreatorTask.setFork(true);
+
ddCreatorTask.setClassname("org.apache.tools.ant.taskdefs.optional.ejb.DDCreatorHelper");
+ Commandline.Argument arguments = ddCreatorTask.createArg();
+ arguments.setLine(args);
+ ddCreatorTask.setClasspath(new Path(getProject(), execClassPath));
+ if (ddCreatorTask.executeJava() != 0) {
+ throw new BuildException("Execution of ddcreator helper failed");
+ }
+ }
+
+ /**
+ * Set the directory from where the text descriptions of the deployment
descriptors are
+ * to be read.
+ *
+ * @param dirName the name of the directory containing the text deployment
descriptor files.
+ */
+ public void setDescriptors(String dirName) {
+ descriptorDirectory = new File(dirName);
+ }
+
+ /**
+ * Set the directory into which the serialized deployment descriptors are
to
+ * be written.
+ *
+ * @param dirName the name of the directory into which the serialised
deployment
+ * descriptors are written.
+ */
+ public void setDest(String dirName) {
+ generatedFilesDirectory = new File(dirName);
+ }
+
+ /**
+ * Set the classpath to be used for this compilation.
+ *
+ * @param s the classpath to use for the ddcreator tool.
+ */
+ public void setClasspath(String s) {
+ this.classpath = FileUtils.translatePath(s);
+ }
+}
Added:
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DDCreatorHelper.java
URL:
http://svn.apache.org/viewvc/ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DDCreatorHelper.java?rev=567734&view=auto
==============================================================================
---
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DDCreatorHelper.java
(added)
+++
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DDCreatorHelper.java
Mon Aug 20 08:57:39 2007
@@ -0,0 +1,145 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 java.io.FileInputStream;
+import java.io.ObjectInputStream;
+import javax.ejb.deployment.DeploymentDescriptor;
+
+/**
+ * A helper class which performs the actual work of the ddcreator task.
+ *
+ * This class is run with a classpath which includes the weblogic tools and
the home and remote
+ * interface class files referenced in the deployment descriptors being built.
+ *
+ */
+public final class DDCreatorHelper {
+ /**
+ * The root directory of the tree containing the textual deployment
descriptors.
+ */
+ private File descriptorDirectory;
+
+ /**
+ * The directory where generated serialised deployment descriptors are
written.
+ */
+ private File generatedFilesDirectory;
+
+ // CheckStyle:VisibilityModifier OFF - bc
+ /**
+ * The descriptor text files for which a serialised descriptor is to be
created.
+ */
+ String[] descriptors;
+ // CheckStyle:VisibilityModifier ON
+
+ /**
+ * The main method.
+ *
+ * The main method creates an instance of the DDCreatorHelper, passing it
the
+ * args which it then processes.
+ * @param args the arguments
+ * @throws Exception on error
+ */
+ public static void main(String[] args) throws Exception {
+ DDCreatorHelper helper = new DDCreatorHelper(args);
+ helper.process();
+ }
+
+ /**
+ * Initialise the helper with the command arguments.
+ *
+ */
+ private DDCreatorHelper(String[] args) {
+ int index = 0;
+ descriptorDirectory = new File(args[index++]);
+ generatedFilesDirectory = new File(args[index++]);
+
+ descriptors = new String[args.length - index];
+ for (int i = 0; index < args.length; ++i) {
+ descriptors[i] = args[index++];
+ }
+ }
+
+ /**
+ * Do the actual work.
+ *
+ * The work proceeds by examining each descriptor given. If the serialised
+ * file does not exist or is older than the text description, the weblogic
+ * DDCreator tool is invoked directly to build the serialised descriptor.
+ */
+ private void process() throws Exception {
+ for (int i = 0; i < descriptors.length; ++i) {
+ String descriptorName = descriptors[i];
+ File descriptorFile = new File(descriptorDirectory,
descriptorName);
+
+ int extIndex = descriptorName.lastIndexOf(".");
+ String serName = null;
+ if (extIndex != -1) {
+ serName = descriptorName.substring(0, extIndex) + ".ser";
+ } else {
+ serName = descriptorName + ".ser";
+ }
+ File serFile = new File(generatedFilesDirectory, serName);
+
+ // do we need to regenerate the file
+ if (!serFile.exists() || serFile.lastModified() <
descriptorFile.lastModified()
+ || regenerateSerializedFile(serFile)) {
+
+ String[] args = {"-noexit",
+ "-d", serFile.getParent(),
+ "-outputfile", serFile.getName(),
+ descriptorFile.getPath()};
+ try {
+ weblogic.ejb.utils.DDCreator.main(args);
+ } catch (Exception e) {
+ // there was an exception - run with no exit to get proper
error
+ String[] newArgs = {"-d",
generatedFilesDirectory.getPath(),
+ "-outputfile", serFile.getName(),
+ descriptorFile.getPath()};
+ weblogic.ejb.utils.DDCreator.main(newArgs);
+ }
+ }
+ }
+ }
+
+ /**
+ * EJBC will fail if the serialized descriptor file does not match the
bean classes.
+ * You can test for this by trying to load the deployment descriptor. If
it fails,
+ * the serialized file needs to be regenerated because the associated
class files
+ * don't match.
+ */
+ private boolean regenerateSerializedFile(File serFile) {
+ try {
+
+ FileInputStream fis = new FileInputStream(serFile);
+ ObjectInputStream ois = new ObjectInputStream(fis);
+ DeploymentDescriptor dd = (DeploymentDescriptor) ois.readObject();
+ fis.close();
+
+ // Since the descriptor read properly, everything should be o.k.
+ return false;
+
+ } catch (Exception e) {
+
+ // Weblogic will throw an error if the deployment descriptor does
+ // not match the class files.
+ return true;
+
+ }
+ }
+}
Added:
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/Ejbc.java
URL:
http://svn.apache.org/viewvc/ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/Ejbc.java?rev=567734&view=auto
==============================================================================
---
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/Ejbc.java
(added)
+++
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/Ejbc.java
Mon Aug 20 08:57:39 2007
@@ -0,0 +1,197 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.DirectoryScanner;
+import org.apache.tools.ant.taskdefs.Java;
+import org.apache.tools.ant.taskdefs.MatchingTask;
+import org.apache.tools.ant.types.Commandline;
+import org.apache.tools.ant.types.Path;
+import org.apache.tools.ant.util.FileUtils;
+
+/**
+ * Builds EJB support classes using WebLogic's ejbc tool from a directory
containing
+ * a set of deployment descriptors.
+ *
+ *
+ */
+public class Ejbc extends MatchingTask {
+ /**
+ * The root directory of the tree containing the serialised deployment
desciptors. The actual
+ * deployment descriptor files are selected using include and exclude
constructs
+ * on the ejbc task provided by the MatchingTask superclass.
+ */
+ private File descriptorDirectory;
+
+ /**
+ * The directory where generated files are placed.
+ */
+ private File generatedFilesDirectory;
+
+ /**
+ * The name of the manifest file generated for the EJB jar.
+ */
+ private File generatedManifestFile;
+
+ /**
+ * The classpath to be used in the weblogic ejbc calls. It must contain
the weblogic
+ * classes <b>and</b> the implementation classes of the home and remote
interfaces.
+ */
+ private String classpath;
+
+ /**
+ * The source directory for the home and remote interfaces. This is used
to determine if
+ * the generated deployment classes are out of date.
+ */
+ private File sourceDirectory;
+
+ // CheckStyle:VisibilityModifier OFF - bc
+ /** Whether to keep the generated files */
+ public boolean keepgenerated;
+ // CheckStyle:VisibilityModifier ON
+
+ /**
+ * 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 (descriptorDirectory == null
+ || !descriptorDirectory.isDirectory()) {
+ throw new BuildException("descriptors directory "
+ + descriptorDirectory + " is not valid");
+ }
+ if (generatedFilesDirectory == null
+ || !generatedFilesDirectory.isDirectory()) {
+ throw new BuildException("dest directory "
+ + generatedFilesDirectory + " is not valid");
+ }
+
+ if (sourceDirectory == null
+ || !sourceDirectory.isDirectory()) {
+ throw new BuildException("src directory "
+ + sourceDirectory + " is not valid");
+ }
+
+ String systemClassPath = System.getProperty("java.class.path");
+ String execClassPath
+ = FileUtils.translatePath(systemClassPath + ":" + classpath
+ + ":" + generatedFilesDirectory);
+ // get all the files in the descriptor directory
+ DirectoryScanner ds = super.getDirectoryScanner(descriptorDirectory);
+
+ String[] files = ds.getIncludedFiles();
+
+ Java helperTask = new Java(this);
+ helperTask.setFork(true);
+
helperTask.setClassname("org.apache.tools.ant.taskdefs.optional.ejb.EjbcHelper");
+ String args = "";
+ args += " " + descriptorDirectory;
+ args += " " + generatedFilesDirectory;
+ args += " " + sourceDirectory;
+ args += " " + generatedManifestFile;
+ args += " " + keepgenerated;
+
+ for (int i = 0; i < files.length; ++i) {
+ args += " " + files[i];
+ }
+
+ Commandline.Argument arguments = helperTask.createArg();
+ arguments.setLine(args);
+ helperTask.setClasspath(new Path(getProject(), execClassPath));
+ if (helperTask.executeJava() != 0) {
+ throw new BuildException("Execution of ejbc helper failed");
+ }
+ }
+
+ /**
+ * get the keep generated attribute.
+ * @return the attribute.
+ */
+ public boolean getKeepgenerated() {
+ return keepgenerated;
+ }
+
+ /**
+ * Set the directory from where the serialized deployment descriptors are
+ * to be read.
+ *
+ * @param dirName the name of the directory containing the serialised
deployment descriptors.
+ */
+ public void setDescriptors(String dirName) {
+ descriptorDirectory = new File(dirName);
+ }
+
+ /**
+ * Set the directory into which the support classes, RMI stubs, etc are to
be written.
+ *
+ * @param dirName the name of the directory into which code is generated
+ */
+ public void setDest(String dirName) {
+ generatedFilesDirectory = new File(dirName);
+ }
+
+ /**
+ * If true, ejbc will keep the
+ * intermediate Java files used to build the class files.
+ * This can be useful when debugging.
+ * @param newKeepgenerated a boolean as a string.
+ */
+ public void setKeepgenerated(String newKeepgenerated) {
+ keepgenerated =
Boolean.valueOf(newKeepgenerated.trim()).booleanValue();
+
+ }
+
+ /**
+ * Set the name of the generated manifest file.
+ *
+ * For each EJB that is processed an entry is created in this file. This
can then be used
+ * to create a jar file for dploying the beans.
+ *
+ * @param manifestFilename the name of the manifest file to be generated.
+ */
+ public void setManifest(String manifestFilename) {
+ generatedManifestFile = new File(manifestFilename);
+ }
+
+ /**
+ * Set the classpath to be used for this compilation.
+ * @param s the classpath (as a string) to use.
+ */
+ public void setClasspath(String s) {
+ this.classpath = FileUtils.translatePath(s);
+ }
+
+ /**
+ * Set the directory containing the source code for the home interface,
remote interface
+ * and public key class definitions.
+ *
+ * @param dirName the directory containg the source tree for the EJB's
interface classes.
+ */
+ public void setSrc(String dirName) {
+ sourceDirectory = new File(dirName);
+ }
+}
Added:
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EjbcHelper.java
URL:
http://svn.apache.org/viewvc/ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EjbcHelper.java?rev=567734&view=auto
==============================================================================
---
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EjbcHelper.java
(added)
+++
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EjbcHelper.java
Mon Aug 20 08:57:39 2007
@@ -0,0 +1,259 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 java.io.FileInputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.PrintWriter;
+import java.util.Vector;
+import javax.ejb.deployment.DeploymentDescriptor;
+import javax.ejb.deployment.EntityDescriptor;
+
+
+/**
+ * A helper class which performs the actual work of the ejbc task.
+ *
+ * This class is run with a classpath which includes the weblogic tools and
the home and remote
+ * interface class files referenced in the deployment descriptors being
processed.
+ *
+ */
+public final class EjbcHelper {
+ /**
+ * The root directory of the tree containing the serialised deployment
desciptors.
+ */
+ private File descriptorDirectory;
+
+ /**
+ * The directory where generated files are placed.
+ */
+ private File generatedFilesDirectory;
+
+ /**
+ * The name of the manifest file generated for the EJB jar.
+ */
+ private File manifestFile;
+
+ /**
+ * The source directory for the home and remote interfaces. This is used
to determine if
+ * the generated deployment classes are out of date.
+ */
+ private File sourceDirectory;
+
+ // CheckStyle:VisibilityModifier OFF - bc
+ /**
+ * The names of the serialised deployment descriptors
+ */
+ String[] descriptors;
+ // CheckStyle:VisibilityModifier ON
+
+ private boolean keepGenerated;
+
+ /**
+ * Command line interface for the ejbc helper task.
+ * @param args command line arguments.
+ * @throws Exception if there is a problem.
+ */
+ public static void main(String[] args) throws Exception {
+ EjbcHelper helper = new EjbcHelper(args);
+ helper.process();
+ }
+
+ /**
+ * Initialise the EjbcHelper by reading the command arguments.
+ */
+ private EjbcHelper(String[] args) {
+ int index = 0;
+ descriptorDirectory = new File(args[index++]);
+ generatedFilesDirectory = new File(args[index++]);
+ sourceDirectory = new File(args[index++]);
+ manifestFile = new File(args[index++]);
+ keepGenerated = Boolean.valueOf(args[index++]).booleanValue();
+
+ descriptors = new String[args.length - index];
+ for (int i = 0; index < args.length; ++i) {
+ descriptors[i] = args[index++];
+ }
+ }
+
+ private String[] getCommandLine(boolean debug, File descriptorFile) {
+ Vector v = new Vector();
+ if (!debug) {
+ v.addElement("-noexit");
+ }
+ if (keepGenerated) {
+ v.addElement("-keepgenerated");
+ }
+ v.addElement("-d");
+ v.addElement(generatedFilesDirectory.getPath());
+ v.addElement(descriptorFile.getPath());
+
+ String[] args = new String[v.size()];
+ v.copyInto(args);
+ return args;
+ }
+
+ /**
+ * Determine if the weblogic EJB support classes need to be regenerated
+ * for a given deployment descriptor.
+ *
+ * This process attempts to determine if the support classes need to be
+ * rebuilt. It does this by examining only some of the support classes
+ * which are typically generated. If the ejbc task is interrupted
generating
+ * the support classes for a bean, all of the support classes should be
removed
+ * to force regeneration of the support classes.
+ *
+ * @param descriptorFile the serialised deployment descriptor
+ *
+ * @return true if the support classes need to be regenerated.
+ *
+ * @throws IOException if the descriptor file cannot be closed.
+ */
+ private boolean isRegenRequired(File descriptorFile) throws IOException {
+ // read in the descriptor. Under weblogic, the descriptor is a weblogic
+ // specific subclass which has references to the implementation
classes.
+ // These classes must, therefore, be in the classpath when the
deployment
+ // descriptor is loaded from the .ser file
+ FileInputStream fis = null;
+ try {
+ fis = new FileInputStream(descriptorFile);
+ ObjectInputStream ois = new ObjectInputStream(fis);
+ DeploymentDescriptor dd = (DeploymentDescriptor) ois.readObject();
+ fis.close();
+
+ String homeInterfacePath
+ = dd.getHomeInterfaceClassName().replace('.', '/') + ".java";
+ String remoteInterfacePath
+ = dd.getRemoteInterfaceClassName().replace('.', '/') + ".java";
+ String primaryKeyClassPath = null;
+ if (dd instanceof EntityDescriptor) {
+ primaryKeyClassPath
+ = ((EntityDescriptor) dd).getPrimaryKeyClassName();
+ primaryKeyClassPath
+ = primaryKeyClassPath.replace('.', '/') + ".java";
+ }
+
+ File homeInterfaceSource = new File(sourceDirectory,
homeInterfacePath);
+ File remoteInterfaceSource = new File(sourceDirectory,
remoteInterfacePath);
+ File primaryKeyClassSource = null;
+ if (primaryKeyClassPath != null) {
+ primaryKeyClassSource = new File(sourceDirectory,
remoteInterfacePath);
+ }
+
+ // are any of the above out of date.
+ // we find the implementation classes and see if they are older
than any
+ // of the above or the .ser file itself.
+ String beanClassBase =
dd.getEnterpriseBeanClassName().replace('.', '/');
+ File ejbImplentationClass
+ = new File(generatedFilesDirectory, beanClassBase +
"EOImpl.class");
+ File homeImplementationClass
+ = new File(generatedFilesDirectory, beanClassBase +
"HomeImpl.class");
+ File beanStubClass
+ = new File(generatedFilesDirectory, beanClassBase +
"EOImpl_WLStub.class");
+
+ // if the implementation classes don;t exist regenerate
+ if (!ejbImplentationClass.exists()
+ || !homeImplementationClass.exists()
+ || !beanStubClass.exists()) {
+ return true;
+ }
+
+ // Is the ser file or any of the source files newer then the class
files.
+ // firstly find the oldest of the two class files.
+ long classModificationTime = ejbImplentationClass.lastModified();
+ if (homeImplementationClass.lastModified() <
classModificationTime) {
+ classModificationTime = homeImplementationClass.lastModified();
+ }
+ if (beanStubClass.lastModified() < classModificationTime) {
+ classModificationTime = beanStubClass.lastModified();
+ }
+
+ if (descriptorFile.lastModified() > classModificationTime
+ || homeInterfaceSource.lastModified() > classModificationTime
+ || remoteInterfaceSource.lastModified() >
classModificationTime) {
+ return true;
+ }
+
+ if (primaryKeyClassSource != null
+ && primaryKeyClassSource.lastModified() >
classModificationTime) {
+ return true;
+ }
+ } catch (Throwable descriptorLoadException) {
+ System.out.println("Exception occurred reading "
+ + descriptorFile.getName() + " - continuing");
+ // any problems - just regenerate
+ return true;
+ } finally {
+ if (fis != null) {
+ fis.close();
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Process the descriptors in turn generating support classes for each and
a manifest
+ * file for all of the beans.
+ */
+ private void process() throws Exception {
+ String manifest = "Manifest-Version: 1.0\n\n";
+ for (int i = 0; i < descriptors.length; ++i) {
+ String descriptorName = descriptors[i];
+ File descriptorFile = new File(descriptorDirectory,
descriptorName);
+
+ if (isRegenRequired(descriptorFile)) {
+ System.out.println("Running ejbc for " +
descriptorFile.getName());
+ regenerateSupportClasses(descriptorFile);
+ } else {
+ System.out.println(descriptorFile.getName() + " is up to
date");
+ }
+ manifest += "Name: " + descriptorName.replace('\\', '/')
+ + "\nEnterprise-Bean: True\n\n";
+ }
+
+ FileWriter fw = new FileWriter(manifestFile);
+ PrintWriter pw = new PrintWriter(fw);
+ pw.print(manifest);
+ fw.flush();
+ fw.close();
+ }
+
+ /**
+ * Perform the weblogic.ejbc call to regenerate the support classes.
+ *
+ * Note that this method relies on an undocumented -noexit option to the
+ * ejbc tool to stop the ejbc tool exiting the VM altogether.
+ */
+ private void regenerateSupportClasses(File descriptorFile) throws
Exception {
+ // create a Java task to do the rebuild
+
+
+ String[] args = getCommandLine(false, descriptorFile);
+
+ try {
+ weblogic.ejbc.main(args);
+ } catch (Exception e) {
+ // run with no exit for better reporting
+ String[] newArgs = getCommandLine(true, descriptorFile);
+ weblogic.ejbc.main(newArgs);
+ }
+ }
+}
Added:
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WLRun.java
URL:
http://svn.apache.org/viewvc/ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WLRun.java?rev=567734&view=auto
==============================================================================
---
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WLRun.java
(added)
+++
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WLRun.java
Mon Aug 20 08:57:39 2007
@@ -0,0 +1,421 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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
+ * @return a path to be configured
+ */
+ public Path createClasspath() {
+ if (classpath == null) {
+ classpath = new Path(getProject());
+ }
+ return classpath.createPath();
+ }
+
+ /**
+ * Get the classpath to the weblogic classpaths
+ * @return a path to be configured
+ */
+ 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 = new Java(this);
+ 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 = new Java(this);
+ 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.
+ * @param args the argument string
+ */
+ public void setArgs(String args) {
+ additionalArgs = args;
+ }
+
+ /**
+ * name of the main class for weblogic; optional.
+ * @param c the name of the class
+ */
+ public void setWeblogicMainClass(String c) {
+ weblogicMainClass = c;
+ }
+}
Added:
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WLStop.java
URL:
http://svn.apache.org/viewvc/ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WLStop.java?rev=567734&view=auto
==============================================================================
---
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WLStop.java
(added)
+++
ant/sandbox/antlibs/weblogic/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WLStop.java
Mon Aug 20 08:57:39 2007
@@ -0,0 +1,175 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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;
+
+/**
+ * Shuts down a WebLogic server.
+ * To shut down an instance you must supply both a username and
+ * a password.
+ *
+ */
+public class WLStop extends Task {
+ /**
+ * The classpath to be used. It must contains the weblogic.Admin class.
+ */
+ private Path classpath;
+
+ /**
+ * The weblogic username to use to request the shutdown.
+ */
+ private String username;
+
+ /**
+ * The password to use to shutdown the weblogic server.
+ */
+ private String password;
+
+ /**
+ * The URL which the weblogic server is listening on.
+ */
+ private String serverURL;
+
+ /**
+ * The delay (in seconds) to wait before shutting down.
+ */
+ private int delay = 0;
+
+ /**
+ * The location of the BEA Home under which this server is run.
+ * WL6 only
+ */
+ private File beaHome = null;
+
+ /**
+ * Do the work.
+ *
+ * The work is actually done by creating a separate JVM to run the
weblogic admin task
+ * This approach allows the classpath of the helper task to be set.
+ *
+ * @exception BuildException if someting goes wrong with the build
+ */
+ public void execute() throws BuildException {
+ if (username == null || password == null) {
+ throw new BuildException("weblogic username and password must both
be set");
+ }
+
+ if (serverURL == null) {
+ throw new BuildException("The url of the weblogic server must be
provided.");
+ }
+
+ Java weblogicAdmin = new Java(this);
+ weblogicAdmin.setFork(true);
+ weblogicAdmin.setClassname("weblogic.Admin");
+ String args;
+
+ if (beaHome == null) {
+ args = serverURL + " SHUTDOWN " + username + " " + password + " "
+ delay;
+ } else {
+ args = " -url " + serverURL
+ + " -username " + username
+ + " -password " + password
+ + " SHUTDOWN " + " " + delay;
+ }
+
+ weblogicAdmin.createArg().setLine(args);
+ weblogicAdmin.setClasspath(classpath);
+ weblogicAdmin.execute();
+ }
+
+ /**
+ * The classpath to be used with the Java Virtual Machine that runs the
Weblogic
+ * Shutdown command;
+ *
+ * @param path the classpath to use when executing the weblogic admin task.
+ */
+ public void setClasspath(Path path) {
+ this.classpath = path;
+ }
+
+ /**
+ * The classpath to be used with the Java Virtual Machine that runs the
Weblogic
+ * Shutdown command;
+ * @return the path to be configured.
+ */
+ public Path createClasspath() {
+ if (classpath == null) {
+ classpath = new Path(getProject());
+ }
+ return classpath.createPath();
+ }
+
+ /**
+ * The username of the account which will be used to shutdown the server;
+ * required.
+ *
+ * @param s the username.
+ */
+ public void setUser(String s) {
+ this.username = s;
+ }
+
+ /**
+ * The password for the account specified in the
+ * user parameter; required
+ *
+ * @param s the password.
+ */
+ public void setPassword(String s) {
+ this.password = s;
+ }
+
+ /**
+ * Set the URL to which the weblogic server is listening
+ * for T3 connections; required.
+ *
+ * @param s the url.
+ */
+ public void setUrl(String s) {
+ this.serverURL = s;
+ }
+
+
+ /**
+ * Set the delay (in seconds) before shutting down the server;
+ * optional.
+ *
+ * @param s the selay.
+ */
+ public void setDelay(String s) {
+ delay = Integer.parseInt(s);
+ }
+
+ /**
+ * The location of the BEA Home; implicitly
+ * selects Weblogic 6.0 shutdown; optional.
+ *
+ * @param beaHome the BEA Home directory.
+ *
+ */
+ public void setBEAHome(File beaHome) {
+ this.beaHome = beaHome;
+ }
+
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]