From ae030e51f42c55320ca562382941a157988b2b63 Mon Sep 17 00:00:00 2001 From: Conor MacNeill Date: Sun, 24 Jun 2001 13:26:53 +0000 Subject: [PATCH] First steps on reforming the ejbjar naming conventions. This installment make the basejarname attribute actually do something useful git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269221 13f79535-47bb-0310-9956-ffa450edef68 --- .../optional/ejb/BorlandDeploymentTool.java | 2 +- .../optional/ejb/DescriptorHandler.java | 2 + .../ant/taskdefs/optional/ejb/EjbJar.java | 7 + .../optional/ejb/GenericDeploymentTool.java | 373 ++++++------- .../optional/ejb/IPlanetDeploymentTool.java | 491 +++++++++--------- .../optional/ejb/JbossDeploymentTool.java | 2 +- .../optional/ejb/WeblogicDeploymentTool.java | 18 +- .../ejb/WeblogicTOPLinkDeploymentTool.java | 4 +- 8 files changed, 462 insertions(+), 437 deletions(-) diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandDeploymentTool.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandDeploymentTool.java index 49af28f18..13d244882 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandDeploymentTool.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandDeploymentTool.java @@ -240,7 +240,7 @@ public class BorlandDeploymentTool extends GenericDeploymentTool * Add any vendor specific files which should be included in the * EJB Jar. */ - protected void addVendorFiles(Hashtable ejbFiles, String baseName) { + protected void addVendorFiles(Hashtable ejbFiles, String baseName, String descriptorFileName) { File borlandDD = new File(getConfig().descriptorDir,META_DIR+BAS_DD); if (borlandDD.exists()) { diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DescriptorHandler.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DescriptorHandler.java index 2c625d64c..04b8f09a8 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DescriptorHandler.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DescriptorHandler.java @@ -131,6 +131,7 @@ public class DescriptorHandler extends org.xml.sax.HandlerBase { if (fileDTD.exists()) { if (publicId != null) { fileDTDs.put(publicId, fileDTD); + owningTask.log("Mapped publicId " + publicId + " to file " + fileDTD, Project.MSG_VERBOSE); } return; } @@ -138,6 +139,7 @@ public class DescriptorHandler extends org.xml.sax.HandlerBase { if (getClass().getResource(location) != null) { if (publicId != null) { resourceDTDs.put(publicId, location); + owningTask.log("Mapped publicId " + publicId + " to resource " + location, Project.MSG_VERBOSE); } } } diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EjbJar.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EjbJar.java index 2506f2ac7..96389f4a2 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EjbJar.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EjbJar.java @@ -469,6 +469,13 @@ public class EjbJar extends MatchingTask { throw new BuildException(msg, pce); } } // end of execute() + + public static class NamignScheme extends EnumeratedAttribute { + public String[] getValues() { + return new String[] {"ejb-name", "directory", "descriptor"}; + } + } + } diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/GenericDeploymentTool.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/GenericDeploymentTool.java index fcb8de496..0fae7a74e 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/GenericDeploymentTool.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/GenericDeploymentTool.java @@ -113,10 +113,10 @@ public class GenericDeploymentTool implements EJBDeploymentTool { */ private List addedfiles; - /** - * Handler used to parse the EJB XML descriptor - */ - private DescriptorHandler handler; + /** + * Handler used to parse the EJB XML descriptor + */ + private DescriptorHandler handler; /** * Setter used to store the value of destination directory prior to execute() @@ -210,9 +210,9 @@ public class GenericDeploymentTool implements EJBDeploymentTool { getTask().log(message, level); } - protected Location getLocation() { - return getTask().getLocation(); - } + protected Location getLocation() { + return getTask().getLocation(); + } /** @@ -303,24 +303,24 @@ public class GenericDeploymentTool implements EJBDeploymentTool { public void processDescriptor(String descriptorFileName, SAXParser saxParser) { - checkConfiguration(descriptorFileName, saxParser); + checkConfiguration(descriptorFileName, saxParser); try { - // Retrive the files to be added to JAR from EJB descriptor - Hashtable ejbFiles = parseEjbFiles(descriptorFileName, saxParser); + // Retrive the files to be added to JAR from EJB descriptor + Hashtable ejbFiles = parseEjbFiles(descriptorFileName, saxParser); - // Add any support classes specified in the build file - addSupportClasses(ejbFiles); + // Add any support classes specified in the build file + addSupportClasses(ejbFiles); - // Determine the JAR filename (without filename extension) - String baseName = getJarBaseName(descriptorFileName); + // Determine the JAR filename (without filename extension) + String baseName = getJarBaseName(descriptorFileName); // First the regular deployment descriptor ejbFiles.put(META_DIR + EJB_DD, new File(config.descriptorDir, descriptorFileName)); // now the vendor specific files, if any - addVendorFiles(ejbFiles, baseName); + addVendorFiles(ejbFiles, baseName, descriptorFileName); // add any inherited files checkAndAddInherited(ejbFiles); @@ -351,7 +351,7 @@ public class GenericDeploymentTool implements EJBDeploymentTool { Project.MSG_INFO); // Use helper method to write the jarfile - String publicId = getPublicId(); + String publicId = getPublicId(); writeJar(baseName, jarFile, ejbFiles, publicId); } @@ -380,59 +380,59 @@ public class GenericDeploymentTool implements EJBDeploymentTool { } } - /** - * This method is called as the first step in the processDescriptor method - * to allow vendor-specific subclasses to validate the task configuration - * prior to processing the descriptor. If the configuration is invalid, - * a BuildException should be thrown. - * - * @param descriptorFileName String representing the file name of an EJB - * descriptor to be processed - * @param saxParser SAXParser which may be used to parse the XML - * descriptor - * @thows BuildException Thrown if the configuration is invalid - */ - protected void checkConfiguration(String descriptorFileName, - SAXParser saxParser) throws BuildException { - - /* - * For the GenericDeploymentTool, do nothing. Vendor specific - * subclasses should throw a BuildException if the configuration is - * invalid for their server. - */ - } - - /** - * This method returns a list of EJB files found when the specified EJB - * descriptor is parsed and processed. - * - * @param descriptorFileName String representing the file name of an EJB - * descriptor to be processed - * @param saxParser SAXParser which may be used to parse the XML - * descriptor - * @return Hashtable of EJB class (and other) files to be - * added to the completed JAR file - * @throws SAXException Any SAX exception, possibly wrapping another - * exception + /** + * This method is called as the first step in the processDescriptor method + * to allow vendor-specific subclasses to validate the task configuration + * prior to processing the descriptor. If the configuration is invalid, + * a BuildException should be thrown. + * + * @param descriptorFileName String representing the file name of an EJB + * descriptor to be processed + * @param saxParser SAXParser which may be used to parse the XML + * descriptor + * @thows BuildException Thrown if the configuration is invalid + */ + protected void checkConfiguration(String descriptorFileName, + SAXParser saxParser) throws BuildException { + + /* + * For the GenericDeploymentTool, do nothing. Vendor specific + * subclasses should throw a BuildException if the configuration is + * invalid for their server. + */ + } + + /** + * This method returns a list of EJB files found when the specified EJB + * descriptor is parsed and processed. + * + * @param descriptorFileName String representing the file name of an EJB + * descriptor to be processed + * @param saxParser SAXParser which may be used to parse the XML + * descriptor + * @return Hashtable of EJB class (and other) files to be + * added to the completed JAR file + * @throws SAXException Any SAX exception, possibly wrapping another + * exception * @throws IOException An IOException from the parser, possibly from a - * the byte stream or character stream - */ - protected Hashtable parseEjbFiles(String descriptorFileName, SAXParser saxParser) - throws IOException, SAXException { - FileInputStream descriptorStream = null; - Hashtable ejbFiles = null; - - try { - handler = getDescriptorHandler(config.srcDir); - - /* Parse the ejb deployment descriptor. While it may not - * look like much, we use a SAXParser and an inner class to - * get hold of all the classfile names for the descriptor. - */ - descriptorStream = new FileInputStream(new File(config.descriptorDir, descriptorFileName)); - saxParser.parse(new InputSource(descriptorStream), handler); - - ejbFiles = handler.getFiles(); + * the byte stream or character stream + */ + protected Hashtable parseEjbFiles(String descriptorFileName, SAXParser saxParser) + throws IOException, SAXException { + FileInputStream descriptorStream = null; + Hashtable ejbFiles = null; + + try { + handler = getDescriptorHandler(config.srcDir); + + /* Parse the ejb deployment descriptor. While it may not + * look like much, we use a SAXParser and an inner class to + * get hold of all the classfile names for the descriptor. + */ + descriptorStream = new FileInputStream(new File(config.descriptorDir, descriptorFileName)); + saxParser.parse(new InputSource(descriptorStream), handler); + + ejbFiles = handler.getFiles(); } finally { if (descriptorStream != null) { @@ -443,74 +443,79 @@ public class GenericDeploymentTool implements EJBDeploymentTool { } } - return ejbFiles; - } - - /** - * Adds any classes the user specifies using support nested elements - * to the ejbFiles Hashtable. - * - * @param ejbFiles Hashtable of EJB classes (and other) files that will be - * added to the completed JAR file - */ - protected void addSupportClasses(Hashtable ejbFiles) { - // add in support classes if any - Project project = task.getProject(); - for (Iterator i = config.supportFileSets.iterator(); i.hasNext();) { - FileSet supportFileSet = (FileSet)i.next(); - File supportBaseDir = supportFileSet.getDir(project); - DirectoryScanner supportScanner = supportFileSet.getDirectoryScanner(project); - supportScanner.scan(); - String[] supportFiles = supportScanner.getIncludedFiles(); - for (int j = 0; j < supportFiles.length; ++j) { - ejbFiles.put(supportFiles[j], new File(supportBaseDir, supportFiles[j])); - } - } - } - - - /** - * Using the EJB descriptor file name passed from the ejbjar - * task, this method returns the "basename" which will be used to name the - * completed JAR file. - * - * @param descriptorFileName String representing the file name of an EJB - * descriptor to be processed - * @return The "basename" which will be used to name the - * completed JAR file - */ - protected String getJarBaseName(String descriptorFileName) { - - String baseName = ""; - - // Work out what the base name is - if (config.baseJarName != null) { - baseName = config.baseJarName; - } else { - int lastSeparatorIndex = descriptorFileName.lastIndexOf(File.separator); - int endBaseName = -1; - if (lastSeparatorIndex != -1) { - endBaseName = descriptorFileName.indexOf(config.baseNameTerminator, - lastSeparatorIndex); - } else { - endBaseName = descriptorFileName.indexOf(config.baseNameTerminator); - } - - if (endBaseName != -1) { - baseName = descriptorFileName.substring(0, endBaseName); - } - baseName = descriptorFileName.substring(0, endBaseName); - } - - return baseName; - } + return ejbFiles; + } + + /** + * Adds any classes the user specifies using support nested elements + * to the ejbFiles Hashtable. + * + * @param ejbFiles Hashtable of EJB classes (and other) files that will be + * added to the completed JAR file + */ + protected void addSupportClasses(Hashtable ejbFiles) { + // add in support classes if any + Project project = task.getProject(); + for (Iterator i = config.supportFileSets.iterator(); i.hasNext();) { + FileSet supportFileSet = (FileSet)i.next(); + File supportBaseDir = supportFileSet.getDir(project); + DirectoryScanner supportScanner = supportFileSet.getDirectoryScanner(project); + supportScanner.scan(); + String[] supportFiles = supportScanner.getIncludedFiles(); + for (int j = 0; j < supportFiles.length; ++j) { + ejbFiles.put(supportFiles[j], new File(supportBaseDir, supportFiles[j])); + } + } + } + + + /** + * Using the EJB descriptor file name passed from the ejbjar + * task, this method returns the "basename" which will be used to name the + * completed JAR file. + * + * @param descriptorFileName String representing the file name of an EJB + * descriptor to be processed + * @return The "basename" which will be used to name the + * completed JAR file + */ + protected String getJarBaseName(String descriptorFileName) { + + String baseName = ""; + + // Work out what the base name is + if (config.baseJarName != null) { + String canonicalDescriptor = descriptorFileName.replace('\\', '/'); + int index = canonicalDescriptor.lastIndexOf('/'); + if (index != -1) { + baseName = descriptorFileName.substring(0, index + 1); + } + baseName += config.baseJarName; + } else { + int lastSeparatorIndex = descriptorFileName.lastIndexOf(File.separator); + int endBaseName = -1; + if (lastSeparatorIndex != -1) { + endBaseName = descriptorFileName.indexOf(config.baseNameTerminator, + lastSeparatorIndex); + } else { + endBaseName = descriptorFileName.indexOf(config.baseNameTerminator); + } + + if (endBaseName != -1) { + baseName = descriptorFileName.substring(0, endBaseName); + } + baseName = descriptorFileName.substring(0, endBaseName); + } + + return baseName; + } /** * Add any vendor specific files which should be included in the * EJB Jar. */ - protected void addVendorFiles(Hashtable ejbFiles, String baseName) { + protected void addVendorFiles(Hashtable ejbFiles, String baseName, String descriptorFileName) { // nothing to add for generic tool. } @@ -523,55 +528,55 @@ public class GenericDeploymentTool implements EJBDeploymentTool { return new File(destDir, baseName + genericJarSuffix); } - /** - * This method checks the timestamp on each file listed in the - * ejbFiles and compares them to the timestamp on the jarFile - * . If the jarFile's timestamp is more recent than - * each EJB file, false is returned. Otherwise, true - * is returned. - * - * @param ejbFiles Hashtable of EJB classes (and other) files that will be - * added to the completed JAR file - * @param jarFile JAR file which will contain all of the EJB classes (and - * other) files - * @return boolean indicating whether or not the jarFile - * is up to date - */ - protected boolean needToRebuild(Hashtable ejbFiles, File jarFile) { - // By default we assume we need to build. - boolean needBuild = true; - - if (jarFile.exists()) { - long lastBuild = jarFile.lastModified(); - Iterator fileIter = ejbFiles.values().iterator(); - // Set the need build to false until we find out otherwise. - needBuild = false; - - // Loop through the files seeing if any has been touched - // more recently than the destination jar. - while( (needBuild == false) && (fileIter.hasNext()) ) { - File currentFile = (File) fileIter.next(); - needBuild = ( lastBuild < currentFile.lastModified() ); - if (needBuild) { - log("Build needed because " + currentFile.getPath() + " is out of date", - Project.MSG_VERBOSE); - } - } - } - - return needBuild; - } - - /** - * Returns the Public ID of the DTD specified in the EJB descriptor. Not - * every vendor-specific DeploymentTool will need to reference - * this value or may want to determine this value in a vendor-specific way. - * - * @return Public ID of the DTD specified in the EJB descriptor. - */ - protected String getPublicId() { - return handler.getPublicId(); - } + /** + * This method checks the timestamp on each file listed in the + * ejbFiles and compares them to the timestamp on the jarFile + * . If the jarFile's timestamp is more recent than + * each EJB file, false is returned. Otherwise, true + * is returned. + * + * @param ejbFiles Hashtable of EJB classes (and other) files that will be + * added to the completed JAR file + * @param jarFile JAR file which will contain all of the EJB classes (and + * other) files + * @return boolean indicating whether or not the jarFile + * is up to date + */ + protected boolean needToRebuild(Hashtable ejbFiles, File jarFile) { + // By default we assume we need to build. + boolean needBuild = true; + + if (jarFile.exists()) { + long lastBuild = jarFile.lastModified(); + Iterator fileIter = ejbFiles.values().iterator(); + // Set the need build to false until we find out otherwise. + needBuild = false; + + // Loop through the files seeing if any has been touched + // more recently than the destination jar. + while( (needBuild == false) && (fileIter.hasNext()) ) { + File currentFile = (File) fileIter.next(); + needBuild = ( lastBuild < currentFile.lastModified() ); + if (needBuild) { + log("Build needed because " + currentFile.getPath() + " is out of date", + Project.MSG_VERBOSE); + } + } + } + + return needBuild; + } + + /** + * Returns the Public ID of the DTD specified in the EJB descriptor. Not + * every vendor-specific DeploymentTool will need to reference + * this value or may want to determine this value in a vendor-specific way. + * + * @return Public ID of the DTD specified in the EJB descriptor. + */ + protected String getPublicId() { + return handler.getPublicId(); + } /** * Method used to encapsulate the writing of the JAR file. Iterates over the @@ -785,14 +790,14 @@ public class GenericDeploymentTool implements EJBDeploymentTool { /** * Called to validate that the tool parameters have been configured. * - * @throws BuildException If the Deployment Tool's configuration isn't - * valid + * @throws BuildException If the Deployment Tool's configuration isn't + * valid */ public void validateConfigured() throws BuildException { if ((destDir == null) || (!destDir.isDirectory())) { - String msg = "A valid destination directory must be specified " - + "using the \"destdir\" attribute."; - throw new BuildException(msg, getLocation()); + String msg = "A valid destination directory must be specified " + + "using the \"destdir\" attribute."; + throw new BuildException(msg, getLocation()); } } } diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/IPlanetDeploymentTool.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/IPlanetDeploymentTool.java index 6e8db54dc..d97a5ea0a 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/IPlanetDeploymentTool.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/IPlanetDeploymentTool.java @@ -122,302 +122,301 @@ import org.apache.tools.ant.BuildException; */ public class IPlanetDeploymentTool extends GenericDeploymentTool { - /* Attributes set by the Ant build file */ - private File iashome; - private String jarSuffix = ".jar"; - private boolean keepgenerated = false; - private boolean debug = false; - - /* - * Filenames of the standard EJB descriptor (which is passed to this class - * from the parent "ejbjar" task) and the iAS-specific EJB descriptor - * (whose name is determined by this class). Both filenames are relative - * to the directory specified by the "srcdir" attribute in the ejbjar task. - */ - private String descriptorName; - private String iasDescriptorName; - - /* - * The displayName variable stores the value of the "display-name" element - * from the standard EJB descriptor. As a future enhancement to this task, - * we may determine the name of the EJB JAR file using this display-name, - * but this has not be implemented yet. - */ - private String displayName; - - /* - * Regardless of the name of the iAS-specific EJB descriptor file, it will - * written in the completed JAR file as "ias-ejb-jar.xml". This is the - * naming convention implemented by iAS. - */ + /* Attributes set by the Ant build file */ + private File iashome; + private String jarSuffix = ".jar"; + private boolean keepgenerated = false; + private boolean debug = false; + + /* + * Filenames of the standard EJB descriptor (which is passed to this class + * from the parent "ejbjar" task) and the iAS-specific EJB descriptor + * (whose name is determined by this class). Both filenames are relative + * to the directory specified by the "srcdir" attribute in the ejbjar task. + */ + private String descriptorName; + private String iasDescriptorName; + + /* + * The displayName variable stores the value of the "display-name" element + * from the standard EJB descriptor. As a future enhancement to this task, + * we may determine the name of the EJB JAR file using this display-name, + * but this has not be implemented yet. + */ + private String displayName; + + /* + * Regardless of the name of the iAS-specific EJB descriptor file, it will + * written in the completed JAR file as "ias-ejb-jar.xml". This is the + * naming convention implemented by iAS. + */ private static final String IAS_DD = "ias-ejb-jar.xml"; /** * Setter method used to store the "home" directory of the user's iAS - * installation. The directory specified should typically be - * [install-location]/iplanet/ias6/ias. - * + * installation. The directory specified should typically be + * [install-location]/iplanet/ias6/ias. + * * @param iashome The home directory for the user's iAS installation. */ - public void setIashome(File iashome) { - this.iashome = iashome; - } + public void setIashome(File iashome) { + this.iashome = iashome; + } /** * Setter method used to specify whether the Java source files generated by * the ejbc utility should be saved or automatically deleted. - * + * * @param keepgenerated boolean which, if true, indicates that - * Java source files generated by ejbc for the stubs - * and skeletons should be kept. + * Java source files generated by ejbc for the stubs + * and skeletons should be kept. */ - public void setKeepgenerated(boolean keepgenerated) { - this.keepgenerated = keepgenerated; - } + public void setKeepgenerated(boolean keepgenerated) { + this.keepgenerated = keepgenerated; + } /** * Sets whether or not debugging output will be generated when ejbc is - * executed. - * - * @param debug A boolean indicating if debugging output should be generated + * executed. + * + * @param debug A boolean indicating if debugging output should be generated */ - public void setDebug(boolean debug) { - this.debug = debug; - } + public void setDebug(boolean debug) { + this.debug = debug; + } /** * Setter method used to specify the filename suffix (for example, ".jar") - * for the JAR files to be created. - * + * for the JAR files to be created. + * * @param jarSuffix The string to use as the JAR filename suffix. */ public void setSuffix(String jarSuffix) { this.jarSuffix = jarSuffix; } - /** + /** * Since iAS doesn't generate a "generic" JAR as part of its processing, - * this attribute is ignored and a warning message is displayed to the user. - * + * this attribute is ignored and a warning message is displayed to the user. + * * @param inString the string to use as the suffix. This parameter is - * ignored. + * ignored. */ public void setGenericJarSuffix(String inString) { log("Since a generic JAR file is not created during processing, the " - + "iPlanet Deployment Tool does not support the " - + "\"genericjarsuffix\" attribute. It will be ignored.", - Project.MSG_WARN); + + "iPlanet Deployment Tool does not support the " + + "\"genericjarsuffix\" attribute. It will be ignored.", + Project.MSG_WARN); } - public void processDescriptor(String descriptorName, SAXParser saxParser) { - this.descriptorName = descriptorName; + public void processDescriptor(String descriptorName, SAXParser saxParser) { + this.descriptorName = descriptorName; - log("iPlanet Deployment Tool processing: " + descriptorName + " (and " - + getIasDescriptorName() + ")", Project.MSG_VERBOSE); + log("iPlanet Deployment Tool processing: " + descriptorName + " (and " + + getIasDescriptorName() + ")", Project.MSG_VERBOSE); - super.processDescriptor(descriptorName, saxParser); - } + super.processDescriptor(descriptorName, saxParser); + } /** * Verifies that the user selections are valid. - * - * @param descriptorFileName String representing the file name of an EJB - * descriptor to be processed - * @param saxParser SAXParser which may be used to parse the XML - * descriptor - * @throws BuildException If the user selections are invalid. + * + * @param descriptorFileName String representing the file name of an EJB + * descriptor to be processed + * @param saxParser SAXParser which may be used to parse the XML + * descriptor + * @throws BuildException If the user selections are invalid. */ - protected void checkConfiguration(String descriptorFileName, - SAXParser saxParser) throws BuildException { - - int startOfName = descriptorFileName.lastIndexOf(File.separatorChar) + 1; - String stdXml = descriptorFileName.substring(startOfName); - if (stdXml.equals(EJB_DD) && (getConfig().baseJarName == null)) { - String msg = "No name specified for the completed JAR file. The EJB" - + " descriptor should be prepended with the JAR " - + "name or it should be specified using the " - + "attribute \"basejarname\" in the \"ejbjar\" task."; - throw new BuildException(msg, getLocation()); - } - - File iasDescriptor = new File(getConfig().descriptorDir, - getIasDescriptorName()); - if ((!iasDescriptor.exists()) || (!iasDescriptor.isFile())) { - String msg = "The iAS-specific EJB descriptor (" - + iasDescriptor + ") was not found."; - throw new BuildException(msg, getLocation()); - } - - if ((iashome != null) && (!iashome.isDirectory())) { - String msg = "If \"iashome\" is specified, it must be a valid " - + "directory (it was set to " + iashome + ")."; - throw new BuildException(msg, getLocation()); - } - } - - /** - * This method returns a list of EJB files found when the specified EJB - * descriptor is parsed and processed. - * - * @param descriptorFileName String representing the file name of an EJB - * descriptor to be processed - * @param saxParser SAXParser which may be used to parse the XML - * descriptor - * @return Hashtable of EJB class (and other) files to be - * added to the completed JAR file + protected void checkConfiguration(String descriptorFileName, + SAXParser saxParser) throws BuildException { + + int startOfName = descriptorFileName.lastIndexOf(File.separatorChar) + 1; + String stdXml = descriptorFileName.substring(startOfName); + if (stdXml.equals(EJB_DD) && (getConfig().baseJarName == null)) { + String msg = "No name specified for the completed JAR file. The EJB" + + " descriptor should be prepended with the JAR " + + "name or it should be specified using the " + + "attribute \"basejarname\" in the \"ejbjar\" task."; + throw new BuildException(msg, getLocation()); + } + + File iasDescriptor = new File(getConfig().descriptorDir, + getIasDescriptorName()); + if ((!iasDescriptor.exists()) || (!iasDescriptor.isFile())) { + String msg = "The iAS-specific EJB descriptor (" + + iasDescriptor + ") was not found."; + throw new BuildException(msg, getLocation()); + } + + if ((iashome != null) && (!iashome.isDirectory())) { + String msg = "If \"iashome\" is specified, it must be a valid " + + "directory (it was set to " + iashome + ")."; + throw new BuildException(msg, getLocation()); + } + } + + /** + * This method returns a list of EJB files found when the specified EJB + * descriptor is parsed and processed. + * + * @param descriptorFileName String representing the file name of an EJB + * descriptor to be processed + * @param saxParser SAXParser which may be used to parse the XML + * descriptor + * @return Hashtable of EJB class (and other) files to be + * added to the completed JAR file * @throws IOException An IOException from the parser, possibly from - * the byte stream or character stream - * @throws SAXException Any SAX exception, possibly wrapping another - * exception - */ - protected Hashtable parseEjbFiles(String descriptorFileName, - SAXParser saxParser) throws IOException, SAXException { - - Hashtable files; - - /* Build and populate an instance of the ejbc utility */ - IPlanetEjbc ejbc = new IPlanetEjbc( - new File(getConfig().descriptorDir, - descriptorFileName), - new File(getConfig().descriptorDir, - getIasDescriptorName()), - getConfig().srcDir, - getCombinedClasspath().toString(), - saxParser); - ejbc.setRetainSource(keepgenerated); - ejbc.setDebugOutput(debug); - if (iashome != null) { - ejbc.setIasHomeDir(iashome); - } - - /* Execute the ejbc utility -- stubs/skeletons are rebuilt, if needed */ - try { - ejbc.execute(); - } catch (IPlanetEjbc.EjbcException e) { - throw new BuildException("An error has occurred while trying to " - + "execute the iAS ejbc utility", e, getLocation()); - } - - displayName = ejbc.getDisplayName(); - files = ejbc.getEjbFiles(); - - /* Add CMP descriptors to the list of EJB files */ - String[] cmpDescriptors = ejbc.getCmpDescriptors(); - if (cmpDescriptors.length > 0) { - File baseDir = getConfig().descriptorDir; - - int endOfPath = descriptorFileName.lastIndexOf(File.separator); - String relativePath = descriptorFileName.substring(0, endOfPath + 1); - - for (int i = 0; i < cmpDescriptors.length; i++) { - int endOfCmp = cmpDescriptors[i].lastIndexOf('/'); - String cmpDescriptor = cmpDescriptors[i].substring(endOfCmp + 1); - - File cmpFile = new File(baseDir, relativePath + cmpDescriptor); - if (!cmpFile.exists()) { - throw new BuildException("The CMP descriptor file (" - + cmpFile + ") could not be found.", getLocation()); - } - files.put(cmpDescriptors[i], cmpFile); - } - } - - return files; - } + * the byte stream or character stream + * @throws SAXException Any SAX exception, possibly wrapping another + * exception + */ + protected Hashtable parseEjbFiles(String descriptorFileName, + SAXParser saxParser) throws IOException, SAXException { + + Hashtable files; + + /* Build and populate an instance of the ejbc utility */ + IPlanetEjbc ejbc = new IPlanetEjbc( + new File(getConfig().descriptorDir, + descriptorFileName), + new File(getConfig().descriptorDir, + getIasDescriptorName()), + getConfig().srcDir, + getCombinedClasspath().toString(), + saxParser); + ejbc.setRetainSource(keepgenerated); + ejbc.setDebugOutput(debug); + if (iashome != null) { + ejbc.setIasHomeDir(iashome); + } + + /* Execute the ejbc utility -- stubs/skeletons are rebuilt, if needed */ + try { + ejbc.execute(); + } catch (IPlanetEjbc.EjbcException e) { + throw new BuildException("An error has occurred while trying to " + + "execute the iAS ejbc utility", e, getLocation()); + } + + displayName = ejbc.getDisplayName(); + files = ejbc.getEjbFiles(); + + /* Add CMP descriptors to the list of EJB files */ + String[] cmpDescriptors = ejbc.getCmpDescriptors(); + if (cmpDescriptors.length > 0) { + File baseDir = getConfig().descriptorDir; + + int endOfPath = descriptorFileName.lastIndexOf(File.separator); + String relativePath = descriptorFileName.substring(0, endOfPath + 1); + + for (int i = 0; i < cmpDescriptors.length; i++) { + int endOfCmp = cmpDescriptors[i].lastIndexOf('/'); + String cmpDescriptor = cmpDescriptors[i].substring(endOfCmp + 1); + + File cmpFile = new File(baseDir, relativePath + cmpDescriptor); + if (!cmpFile.exists()) { + throw new BuildException("The CMP descriptor file (" + + cmpFile + ") could not be found.", getLocation()); + } + files.put(cmpDescriptors[i], cmpFile); + } + } + + return files; + } /** * Add the iAS-specific EJB descriptor to the list of files which will be - * written to the JAR file. - * - * @param ejbFiles Hashtable of EJB class (and other) files to be added to - * the completed JAR file. - * @param baseName String name of the EJB JAR file to be written (without - * a filename extension). + * written to the JAR file. + * + * @param ejbFiles Hashtable of EJB class (and other) files to be added to + * the completed JAR file. + * @param baseName String name of the EJB JAR file to be written (without + * a filename extension). */ - protected void addVendorFiles(Hashtable ejbFiles, String baseName) { - - ejbFiles.put(META_DIR + IAS_DD, new File(getConfig().descriptorDir, - getIasDescriptorName())); - } + protected void addVendorFiles(Hashtable ejbFiles, String baseName, String descriptorFileName) { + ejbFiles.put(META_DIR + IAS_DD, new File(getConfig().descriptorDir, + getIasDescriptorName())); + } /** * Get the name of the Jar that will be written. The modification date * of this jar will be checked against the dependent bean classes. - * - * @param baseName String name of the EJB JAR file to be written (without - * a filename extension). - * - * @return File representing the JAR file which will be written. + * + * @param baseName String name of the EJB JAR file to be written (without + * a filename extension). + * + * @return File representing the JAR file which will be written. */ File getVendorOutputJarFile(String baseName) { - File jarFile = new File(getDestDir(), baseName + jarSuffix); - log("JAR file name: " + jarFile.toString(), Project.MSG_VERBOSE); + File jarFile = new File(getDestDir(), baseName + jarSuffix); + log("JAR file name: " + jarFile.toString(), Project.MSG_VERBOSE); return jarFile; } - /** - * The iAS ejbc utility doesn't require the Public ID of the descriptor's - * DTD for it to process correctly--this method always returns null - * . - * - * @return null. - */ - protected String getPublicId() { - return null; - } - - /** - * Determines the name of the iAS-specific EJB descriptor using the - * specified standard EJB descriptor name. In general, the standard - * descriptor will be named "[basename]-ejb-jar.xml", and this method will - * return "[basename]-ias-ejb-jar.xml". - * - * @return The name of the iAS-specific EJB descriptor file. - */ - private String getIasDescriptorName() { - - /* Only calculate the descriptor name once */ - if (iasDescriptorName != null) { - return iasDescriptorName; - } - - String path = ""; // Directory path of the EJB descriptor - String basename; // Filename appearing before name terminator - String remainder; // Filename appearing after the name terminator - - /* Find the end of the standard descriptor's relative path */ - int startOfFileName = descriptorName.lastIndexOf(File.separatorChar); - if (startOfFileName != -1) { - path = descriptorName.substring(0, startOfFileName + 1); - } - - /* Check to see if the standard name is used (there's no basename) */ - if (descriptorName.substring(startOfFileName + 1).equals(EJB_DD)) { - basename = ""; - remainder = EJB_DD; - - } else { - int endOfBaseName = descriptorName.indexOf( - getConfig().baseNameTerminator, - startOfFileName); - /* - * Check for the odd case where the terminator and/or filename - * extension aren't found. These will ensure "ias-" appears at the - * end of the name and before the '.' (if present). - */ - if (endOfBaseName < 0) { - endOfBaseName = descriptorName.lastIndexOf('.') - 1; - if (endOfBaseName < 0) { - endOfBaseName = descriptorName.length() - 1; - } - } - - basename = descriptorName.substring(startOfFileName + 1, - endOfBaseName + 1); - remainder = descriptorName.substring(endOfBaseName + 1); - } - - iasDescriptorName = path + basename + "ias-" + remainder; - return iasDescriptorName; - } + /** + * The iAS ejbc utility doesn't require the Public ID of the descriptor's + * DTD for it to process correctly--this method always returns null + * . + * + * @return null. + */ + protected String getPublicId() { + return null; + } + + /** + * Determines the name of the iAS-specific EJB descriptor using the + * specified standard EJB descriptor name. In general, the standard + * descriptor will be named "[basename]-ejb-jar.xml", and this method will + * return "[basename]-ias-ejb-jar.xml". + * + * @return The name of the iAS-specific EJB descriptor file. + */ + private String getIasDescriptorName() { + + /* Only calculate the descriptor name once */ + if (iasDescriptorName != null) { + return iasDescriptorName; + } + + String path = ""; // Directory path of the EJB descriptor + String basename; // Filename appearing before name terminator + String remainder; // Filename appearing after the name terminator + + /* Find the end of the standard descriptor's relative path */ + int startOfFileName = descriptorName.lastIndexOf(File.separatorChar); + if (startOfFileName != -1) { + path = descriptorName.substring(0, startOfFileName + 1); + } + + /* Check to see if the standard name is used (there's no basename) */ + if (descriptorName.substring(startOfFileName + 1).equals(EJB_DD)) { + basename = ""; + remainder = EJB_DD; + + } else { + int endOfBaseName = descriptorName.indexOf( + getConfig().baseNameTerminator, + startOfFileName); + /* + * Check for the odd case where the terminator and/or filename + * extension aren't found. These will ensure "ias-" appears at the + * end of the name and before the '.' (if present). + */ + if (endOfBaseName < 0) { + endOfBaseName = descriptorName.lastIndexOf('.') - 1; + if (endOfBaseName < 0) { + endOfBaseName = descriptorName.length() - 1; + } + } + + basename = descriptorName.substring(startOfFileName + 1, + endOfBaseName + 1); + remainder = descriptorName.substring(endOfBaseName + 1); + } + + iasDescriptorName = path + basename + "ias-" + remainder; + return iasDescriptorName; + } } diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/JbossDeploymentTool.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/JbossDeploymentTool.java index 224666bb3..3cd1d7620 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/JbossDeploymentTool.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/JbossDeploymentTool.java @@ -77,7 +77,7 @@ public class JbossDeploymentTool extends GenericDeploymentTool { * Add any vendor specific files which should be included in the * EJB Jar. */ - protected void addVendorFiles(Hashtable ejbFiles, String baseName) { + protected void addVendorFiles(Hashtable ejbFiles, String baseName, String descriptorFileName) { String ddPrefix = (usingBaseJarName() ? "" : baseName + getConfig().baseNameTerminator); File jbossDD = new File(getConfig().descriptorDir, ddPrefix + JBOSS_DD); diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WeblogicDeploymentTool.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WeblogicDeploymentTool.java index 7346b9ab0..6d508d387 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WeblogicDeploymentTool.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WeblogicDeploymentTool.java @@ -297,9 +297,21 @@ public class WeblogicDeploymentTool extends GenericDeploymentTool { * Add any vendor specific files which should be included in the * EJB Jar. */ - protected void addVendorFiles(Hashtable ejbFiles, String baseName) { - String ddPrefix = (usingBaseJarName() ? "" : baseName + getConfig().baseNameTerminator); - + protected void addVendorFiles(Hashtable ejbFiles, String baseName, String descriptorFileName) { + String ddPrefix = null; + if (!usingBaseJarName()) { + ddPrefix = baseName + getConfig().baseNameTerminator; + } + else { + String canonicalDescriptor = descriptorFileName.replace('\\', '/'); + int index = canonicalDescriptor.lastIndexOf('/'); + if (index == -1) { + ddPrefix = ""; + } + else { + ddPrefix = descriptorFileName.substring(0, index + 1); + } + } File weblogicDD = new File(getConfig().descriptorDir, ddPrefix + WL_DD); if (weblogicDD.exists()) { diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WeblogicTOPLinkDeploymentTool.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WeblogicTOPLinkDeploymentTool.java index 02aa7dd66..e65e6a03d 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WeblogicTOPLinkDeploymentTool.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WeblogicTOPLinkDeploymentTool.java @@ -102,8 +102,8 @@ public class WeblogicTOPLinkDeploymentTool extends WeblogicDeploymentTool { * Add any vendor specific files which should be included in the * EJB Jar. */ - protected void addVendorFiles(Hashtable ejbFiles, String baseName) { - super.addVendorFiles(ejbFiles, baseName); + protected void addVendorFiles(Hashtable ejbFiles, String baseName, String descriptorFileName) { + super.addVendorFiles(ejbFiles, baseName, descriptorFileName); // Then the toplink deployment descriptor // Setup a naming standard here?.