|
|
@@ -1,7 +1,7 @@ |
|
|
|
/* |
|
|
|
* The Apache Software License, Version 1.1 |
|
|
|
* |
|
|
|
* Copyright (c) 2000-2001 The Apache Software Foundation. All rights |
|
|
|
* Copyright (c) 2000-2002 The Apache Software Foundation. All rights |
|
|
|
* reserved. |
|
|
|
* |
|
|
|
* Redistribution and use in source and binary forms, with or without |
|
|
@@ -106,7 +106,7 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
protected final static String EJB_DD = "ejb-jar.xml"; |
|
|
|
|
|
|
|
/** |
|
|
|
* The configuration from the containing task. This config combined with the |
|
|
|
* The configuration from the containing task. This config combined with the |
|
|
|
* settings of the individual attributes here constitues the complete config for |
|
|
|
* this deployment tool. |
|
|
|
*/ |
|
|
@@ -114,8 +114,8 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
|
|
|
|
/** Stores a handle to the directory to put the Jar files in */ |
|
|
|
private File destDir; |
|
|
|
|
|
|
|
/** The classpath to use with this deployment tool. This is appended to |
|
|
|
|
|
|
|
/** The classpath to use with this deployment tool. This is appended to |
|
|
|
any paths from the ejbjar task itself.*/ |
|
|
|
private Path classpath; |
|
|
|
|
|
|
@@ -127,13 +127,13 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
* by the ant core, such as logging. |
|
|
|
*/ |
|
|
|
private Task task; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* The classloader generated from the given classpath to load |
|
|
|
* the super classes and super interfaces. |
|
|
|
*/ |
|
|
|
private ClassLoader classpathLoader = null; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* List of files have been loaded into the EJB jar |
|
|
|
*/ |
|
|
@@ -159,7 +159,7 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
protected File getDestDir() { |
|
|
|
return destDir; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* Set the task which owns this tool |
|
|
@@ -167,7 +167,7 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
public void setTask(Task task) { |
|
|
|
this.task = task; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* Get the task for this tool. |
|
|
|
*/ |
|
|
@@ -181,14 +181,14 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
protected EjbJar.Config getConfig() { |
|
|
|
return config; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* Returns true, if the meta-inf dir is being explicitly set, false otherwise. |
|
|
|
*/ |
|
|
|
protected boolean usingBaseJarName() { |
|
|
|
return config.baseJarName != null; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* Setter used to store the suffix for the generated jar file. |
|
|
|
* @param inString the string to use as the suffix. |
|
|
@@ -228,10 +228,10 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
combinedPath.append(config.classpath); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return combinedPath; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
protected void log(String message, int level) { |
|
|
|
getTask().log(message, level); |
|
|
|
} |
|
|
@@ -246,7 +246,7 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
*/ |
|
|
|
public void configure(EjbJar.Config config) { |
|
|
|
this.config = config; |
|
|
|
|
|
|
|
|
|
|
|
classpathLoader = null; |
|
|
|
} |
|
|
|
|
|
|
@@ -273,7 +273,7 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
// Create the zip entry and add it to the jar file |
|
|
|
ZipEntry zipEntry = new ZipEntry(logicalFilename.replace('\\','/')); |
|
|
|
jStream.putNextEntry(zipEntry); |
|
|
|
|
|
|
|
|
|
|
|
// Create the file input stream, and buffer everything over |
|
|
|
// to the jar output stream |
|
|
|
byte[] byteBuffer = new byte[2 * 1024]; |
|
|
@@ -282,14 +282,14 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
jStream.write(byteBuffer, 0, count); |
|
|
|
count = iStream.read(byteBuffer, 0, byteBuffer.length); |
|
|
|
} while (count != -1); |
|
|
|
|
|
|
|
|
|
|
|
//add it to list of files in jar |
|
|
|
addedfiles.add(logicalFilename); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
catch (IOException ioe) { |
|
|
|
log("WARNING: IOException while adding entry " + |
|
|
|
logicalFilename + " to jarfile from " + inputFile.getPath() + " " + |
|
|
|
log("WARNING: IOException while adding entry " + |
|
|
|
logicalFilename + " to jarfile from " + inputFile.getPath() + " " + |
|
|
|
ioe.getClass().getName() + "-" + ioe.getMessage(), Project.MSG_WARN); |
|
|
|
} |
|
|
|
finally { |
|
|
@@ -303,19 +303,19 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
protected DescriptorHandler getDescriptorHandler(File srcDir) { |
|
|
|
DescriptorHandler handler = new DescriptorHandler(getTask(), srcDir); |
|
|
|
|
|
|
|
protected DescriptorHandler getDescriptorHandler(File srcDir) { |
|
|
|
DescriptorHandler handler = new DescriptorHandler(getTask(), srcDir); |
|
|
|
|
|
|
|
registerKnownDTDs(handler); |
|
|
|
|
|
|
|
|
|
|
|
// register any DTDs supplied by the user |
|
|
|
for (Iterator i = getConfig().dtdLocations.iterator(); i.hasNext();) { |
|
|
|
EjbJar.DTDLocation dtdLocation = (EjbJar.DTDLocation)i.next(); |
|
|
|
handler.registerDTD(dtdLocation.getPublicId(), dtdLocation.getLocation()); |
|
|
|
} |
|
|
|
return handler; |
|
|
|
} |
|
|
|
|
|
|
|
for (Iterator i = getConfig().dtdLocations.iterator(); i.hasNext();) { |
|
|
|
EjbJar.DTDLocation dtdLocation = (EjbJar.DTDLocation)i.next(); |
|
|
|
handler.registerDTD(dtdLocation.getPublicId(), dtdLocation.getLocation()); |
|
|
|
} |
|
|
|
return handler; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Register the locations of all known DTDs. |
|
|
|
* |
|
|
@@ -329,7 +329,7 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
public void processDescriptor(String descriptorFileName, SAXParser saxParser) { |
|
|
|
|
|
|
|
checkConfiguration(descriptorFileName, saxParser); |
|
|
|
|
|
|
|
|
|
|
|
try { |
|
|
|
handler = getDescriptorHandler(config.srcDir); |
|
|
|
|
|
|
@@ -347,8 +347,8 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
// First the regular deployment descriptor |
|
|
|
ejbFiles.put(META_DIR + EJB_DD, |
|
|
|
new File(config.descriptorDir, descriptorFileName)); |
|
|
|
|
|
|
|
// now the vendor specific files, if any |
|
|
|
|
|
|
|
// now the vendor specific files, if any |
|
|
|
addVendorFiles(ejbFiles, ddPrefix); |
|
|
|
|
|
|
|
// add any dependent files |
|
|
@@ -361,14 +361,14 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
if (startName == -1) { |
|
|
|
startName = 0; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
int endName = baseName.length(); |
|
|
|
baseName = baseName.substring(startName, endName); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
File jarFile = getVendorOutputJarFile(baseName); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Check to see if we need a build and start doing the work! |
|
|
|
if (needToRebuild(ejbFiles, jarFile)) { |
|
|
|
// Log that we are going to build... |
|
|
@@ -378,7 +378,7 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
+ String.valueOf(ejbFiles.size()) |
|
|
|
+ " files", |
|
|
|
Project.MSG_INFO); |
|
|
|
|
|
|
|
|
|
|
|
// Use helper method to write the jarfile |
|
|
|
String publicId = getPublicId(); |
|
|
|
writeJar(baseName, jarFile, ejbFiles, publicId); |
|
|
@@ -408,7 +408,7 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
throw new BuildException(msg, ioe); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* This method is called as the first step in the processDescriptor method |
|
|
|
* to allow vendor-specific subclasses to validate the task configuration |
|
|
@@ -421,12 +421,12 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
* descriptor |
|
|
|
* @thows BuildException Thrown if the configuration is invalid |
|
|
|
*/ |
|
|
|
protected void checkConfiguration(String descriptorFileName, |
|
|
|
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 |
|
|
|
/* |
|
|
|
* For the GenericDeploymentTool, do nothing. Vendor specific |
|
|
|
* subclasses should throw a BuildException if the configuration is |
|
|
|
* invalid for their server. |
|
|
|
*/ |
|
|
|
} |
|
|
@@ -441,10 +441,10 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
* 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 |
|
|
|
* @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 |
|
|
|
* the byte stream or character stream |
|
|
|
*/ |
|
|
|
protected Hashtable parseEjbFiles(String descriptorFileName, SAXParser saxParser) |
|
|
|
throws IOException, SAXException { |
|
|
@@ -459,7 +459,7 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
*/ |
|
|
|
descriptorStream = new FileInputStream(new File(config.descriptorDir, descriptorFileName)); |
|
|
|
saxParser.parse(new InputSource(descriptorStream), handler); |
|
|
|
|
|
|
|
|
|
|
|
ejbFiles = handler.getFiles(); |
|
|
|
|
|
|
|
} finally { |
|
|
@@ -493,7 +493,7 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
for (int j = 0; j < supportFiles.length; ++j) { |
|
|
|
ejbFiles.put(supportFiles[j], new File(supportBaseDir, supportFiles[j])); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@@ -523,7 +523,7 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
int lastSeparatorIndex = descriptorFileName.lastIndexOf(File.separator); |
|
|
|
int endBaseName = -1; |
|
|
|
if (lastSeparatorIndex != -1) { |
|
|
|
endBaseName = descriptorFileName.indexOf(config.baseNameTerminator, |
|
|
|
endBaseName = descriptorFileName.indexOf(config.baseNameTerminator, |
|
|
|
lastSeparatorIndex); |
|
|
|
} else { |
|
|
|
endBaseName = descriptorFileName.indexOf(config.baseNameTerminator); |
|
|
@@ -540,7 +540,7 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
if (dirSeparatorIndex != -1) { |
|
|
|
dirName = dirName.substring(dirSeparatorIndex + 1); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
baseName = dirName; |
|
|
|
} else if (config.namingScheme.getValue().equals(EjbJar.NamingScheme.EJB_NAME)) { |
|
|
|
baseName = handler.getEjbName(); |
|
|
@@ -551,7 +551,7 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
/** |
|
|
|
* Get the prefix for vendor deployment descriptors. |
|
|
|
* |
|
|
|
* This will contain the path and the start of the descriptor name, |
|
|
|
* This will contain the path and the start of the descriptor name, |
|
|
|
* depending on the naming scheme |
|
|
|
*/ |
|
|
|
public String getVendorDDPrefix(String baseName, String descriptorFileName) { |
|
|
@@ -575,7 +575,7 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Add any vendor specific files which should be included in the |
|
|
|
* Add any vendor specific files which should be included in the |
|
|
|
* EJB Jar. |
|
|
|
*/ |
|
|
|
protected void addVendorFiles(Hashtable ejbFiles, String ddPrefix) { |
|
|
@@ -616,8 +616,8 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
Project.MSG_VERBOSE); |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Iterator fileIter = ejbFiles.values().iterator(); |
|
|
|
|
|
|
|
// Loop through the files seeing if any has been touched |
|
|
@@ -627,12 +627,12 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
if (lastBuild < currentFile.lastModified()) { |
|
|
|
log("Build needed because " + currentFile.getPath() + " is out of date", |
|
|
|
Project.MSG_VERBOSE); |
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
@@ -652,12 +652,12 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
* filenames/java.io.Files in the Hashtable stored on the instance variable |
|
|
|
* ejbFiles. |
|
|
|
*/ |
|
|
|
protected void writeJar(String baseName, File jarfile, Hashtable files, |
|
|
|
protected void writeJar(String baseName, File jarfile, Hashtable files, |
|
|
|
String publicId) throws BuildException{ |
|
|
|
|
|
|
|
JarOutputStream jarStream = null; |
|
|
|
try { |
|
|
|
// clean the addedfiles Vector |
|
|
|
// clean the addedfiles Vector |
|
|
|
addedfiles = new ArrayList(); |
|
|
|
|
|
|
|
/* If the jarfile already exists then whack it and recreate it. |
|
|
@@ -670,7 +670,7 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
} |
|
|
|
jarfile.getParentFile().mkdirs(); |
|
|
|
jarfile.createNewFile(); |
|
|
|
|
|
|
|
|
|
|
|
InputStream in = null; |
|
|
|
Manifest manifest = null; |
|
|
|
try { |
|
|
@@ -681,7 +681,7 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
else if (config.manifest != null) { |
|
|
|
in = new FileInputStream(config.manifest); |
|
|
|
if ( in == null ) { |
|
|
|
throw new BuildException("Could not find manifest file: " + config.manifest, |
|
|
|
throw new BuildException("Could not find manifest file: " + config.manifest, |
|
|
|
getLocation()); |
|
|
|
} |
|
|
|
} |
|
|
@@ -693,7 +693,7 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
getLocation()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
manifest = new Manifest(in); |
|
|
|
} |
|
|
|
catch (IOException e) { |
|
|
@@ -704,17 +704,17 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
in.close(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Create the streams necessary to write the jarfile |
|
|
|
|
|
|
|
|
|
|
|
jarStream = new JarOutputStream(new FileOutputStream(jarfile), manifest); |
|
|
|
jarStream.setMethod(JarOutputStream.DEFLATED); |
|
|
|
|
|
|
|
|
|
|
|
// Loop through all the class files found and add them to the jar |
|
|
|
for (Iterator entryIterator = files.keySet().iterator(); entryIterator.hasNext(); ) { |
|
|
|
String entryName = (String) entryIterator.next(); |
|
|
|
File entryFile = (File) files.get(entryName); |
|
|
|
|
|
|
|
|
|
|
|
log("adding file '" + entryName + "'", |
|
|
|
Project.MSG_VERBOSE); |
|
|
|
|
|
|
@@ -724,24 +724,26 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
InnerClassFilenameFilter flt = new InnerClassFilenameFilter(entryFile.getName()); |
|
|
|
File entryDir = entryFile.getParentFile(); |
|
|
|
String[] innerfiles = entryDir.list(flt); |
|
|
|
for (int i = 0, n = innerfiles.length; i < n; i++) { |
|
|
|
|
|
|
|
//get and clean up innerclass name |
|
|
|
int entryIndex = entryName.lastIndexOf(entryFile.getName()) -1; |
|
|
|
if ( entryIndex < 0) { |
|
|
|
entryName = innerfiles[i]; |
|
|
|
} |
|
|
|
else { |
|
|
|
entryName = entryName.substring(0, entryIndex) + File.separatorChar + innerfiles[i]; |
|
|
|
if (innerfiles != null) { |
|
|
|
for (int i = 0, n = innerfiles.length; i < n; i++) { |
|
|
|
|
|
|
|
//get and clean up innerclass name |
|
|
|
int entryIndex = entryName.lastIndexOf(entryFile.getName()) -1; |
|
|
|
if ( entryIndex < 0) { |
|
|
|
entryName = innerfiles[i]; |
|
|
|
} |
|
|
|
else { |
|
|
|
entryName = entryName.substring(0, entryIndex) + File.separatorChar + innerfiles[i]; |
|
|
|
} |
|
|
|
// link the file |
|
|
|
entryFile = new File(config.srcDir, entryName); |
|
|
|
|
|
|
|
log("adding innerclass file '" + entryName + "'", |
|
|
|
Project.MSG_VERBOSE); |
|
|
|
|
|
|
|
addFileToJar(jarStream, entryFile, entryName); |
|
|
|
|
|
|
|
} |
|
|
|
// link the file |
|
|
|
entryFile = new File(config.srcDir, entryName); |
|
|
|
|
|
|
|
log("adding innerclass file '" + entryName + "'", |
|
|
|
Project.MSG_VERBOSE); |
|
|
|
|
|
|
|
addFileToJar(jarStream, entryFile, entryName); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@@ -820,21 +822,21 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* Returns a Classloader object which parses the passed in generic EjbJar classpath. |
|
|
|
* The loader is used to dynamically load classes from javax.ejb.* and the classes |
|
|
|
* The loader is used to dynamically load classes from javax.ejb.* and the classes |
|
|
|
* being added to the jar. |
|
|
|
* |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
protected ClassLoader getClassLoaderForBuild() |
|
|
|
{ |
|
|
|
if (classpathLoader != null) { |
|
|
|
return classpathLoader; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Path combinedClasspath = getCombinedClasspath(); |
|
|
|
|
|
|
|
|
|
|
|
// only generate a new ClassLoader if we have a classpath |
|
|
|
if (combinedClasspath == null) { |
|
|
|
classpathLoader = getClass().getClassLoader(); |
|
|
@@ -842,10 +844,10 @@ public class GenericDeploymentTool implements EJBDeploymentTool { |
|
|
|
else { |
|
|
|
classpathLoader = new AntClassLoader(getTask().getProject(), combinedClasspath); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return classpathLoader; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* Called to validate that the tool parameters have been configured. |
|
|
|
* |
|
|
|