Class GenericDeploymentTool
java.lang.Object
org.apache.tools.ant.taskdefs.optional.ejb.GenericDeploymentTool
- All Implemented Interfaces:
EJBDeploymentTool
- Direct Known Subclasses:
BorlandDeploymentTool
,IPlanetDeploymentTool
,JbossDeploymentTool
,JonasDeploymentTool
,OrionDeploymentTool
,WeblogicDeploymentTool
,WebsphereDeploymentTool
public class GenericDeploymentTool extends java.lang.Object implements EJBDeploymentTool
A deployment tool which creates generic EJB jars. Generic jars contains
only those classes and META-INF entries specified in the EJB 1.1 standard
This class is also used as a framework for the creation of vendor specific
deployment tools. A number of template methods are provided through which the
vendor specific tool can hook into the EJB creation process.
-
Field Summary
Fields Modifier and Type Field Description static java.lang.String
ANALYZER_CLASS_FULL
The analyzer class for the super analyzerstatic java.lang.String
ANALYZER_CLASS_SUPER
The analyzer class for the super analyzerstatic java.lang.String
ANALYZER_FULL
A dependency analyzer name to find all related classesstatic java.lang.String
ANALYZER_NONE
A dependency analyzer name for no analyzerstatic java.lang.String
ANALYZER_SUPER
A dependency analyzer name to find ancestor classesstatic java.lang.String
DEFAULT_ANALYZER
The default analyzerstatic int
DEFAULT_BUFFER_SIZE
The default buffer byte size to use for IOprotected static java.lang.String
EJB_DD
Name for EJB Deployment descriptor within EJB jarsstatic int
JAR_COMPRESS_LEVEL
The level to use for compressionprotected static java.lang.String
MANIFEST
The standard MANIFEST fileprotected static java.lang.String
META_DIR
The standard META-INF directory in jar files -
Constructor Summary
Constructors Constructor Description GenericDeploymentTool()
-
Method Summary
Modifier and Type Method Description protected void
addFileToJar(java.util.jar.JarOutputStream jStream, java.io.File inputFile, java.lang.String logicalFilename)
Utility method that encapsulates the logic of adding a file entry to a .jar file.protected void
addSupportClasses(java.util.Hashtable<java.lang.String,java.io.File> ejbFiles)
Adds any classes the user specifies using support nested elements to theejbFiles
Hashtable.protected void
addVendorFiles(java.util.Hashtable<java.lang.String,java.io.File> ejbFiles, java.lang.String ddPrefix)
Add any vendor specific files which should be included in the EJB Jar.protected void
checkAndAddDependants(java.util.Hashtable<java.lang.String,java.io.File> checkEntries)
Add all available classes, that depend on Remote, Home, Bean, PKprotected void
checkConfiguration(java.lang.String descriptorFileName, javax.xml.parsers.SAXParser saxParser)
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.void
configure(org.apache.tools.ant.taskdefs.optional.ejb.EjbJar.Config config)
Configure this tool for use in the ejbjar task.Path
createClasspath()
Add the classpath for the user classesprotected java.lang.ClassLoader
getClassLoaderForBuild()
Returns a Classloader object which parses the passed in generic EjbJar classpath.protected Path
getCombinedClasspath()
Get the classpath by combining the one from the surrounding task, if any and the one from this tool.protected org.apache.tools.ant.taskdefs.optional.ejb.EjbJar.Config
getConfig()
Get the basename terminator.protected DescriptorHandler
getDescriptorHandler(java.io.File srcDir)
Get a descriptionHandler.protected java.io.File
getDestDir()
Get the destination directory.protected java.lang.String
getJarBaseName(java.lang.String descriptorFileName)
Using the EJB descriptor file name passed from theejbjar
task, this method returns the "basename" which will be used to name the completed JAR file.protected Location
getLocation()
Get the build file location associated with this element's task.protected java.io.File
getManifestFile(java.lang.String prefix)
Get the manifest file to use for building the generic jar.protected java.lang.String
getPublicId()
Returns the Public ID of the DTD specified in the EJB descriptor.protected Task
getTask()
Get the task for this tool.java.lang.String
getVendorDDPrefix(java.lang.String baseName, java.lang.String descriptorFileName)
Get the prefix for vendor deployment descriptors.protected void
log(java.lang.String message, int level)
Log a message to the Ant output.protected boolean
needToRebuild(java.util.Hashtable<java.lang.String,java.io.File> ejbFiles, java.io.File jarFile)
This method checks the timestamp on each file listed in theejbFiles
and compares them to the timestamp on thejarFile
.protected java.util.Hashtable<java.lang.String,java.io.File>
parseEjbFiles(java.lang.String descriptorFileName, javax.xml.parsers.SAXParser saxParser)
This method returns a list of EJB files found when the specified EJB descriptor is parsed and processed.void
processDescriptor(java.lang.String descriptorFileName, javax.xml.parsers.SAXParser saxParser)
Process a deployment descriptor, generating the necessary vendor specific deployment files.protected void
registerKnownDTDs(DescriptorHandler handler)
Register the locations of all known DTDs.void
setClasspath(Path classpath)
Set the classpath to be used for this compilation.void
setDestdir(java.io.File inDir)
Set the destination directory; required.void
setGenericJarSuffix(java.lang.String inString)
Set the suffix for the generated jar file.void
setTask(Task task)
Set the task which owns this toolprotected boolean
usingBaseJarName()
Indicate if this build is using the base jar name.void
validateConfigured()
Called to validate that the tool parameters have been configured.protected void
writeJar(java.lang.String baseName, java.io.File jarfile, java.util.Hashtable<java.lang.String,java.io.File> files, java.lang.String publicId)
Method used to encapsulate the writing of the JAR file.
-
Field Details
-
DEFAULT_BUFFER_SIZE
public static final int DEFAULT_BUFFER_SIZEThe default buffer byte size to use for IO- See Also:
- Constant Field Values
-
JAR_COMPRESS_LEVEL
public static final int JAR_COMPRESS_LEVELThe level to use for compression- See Also:
- Constant Field Values
-
META_DIR
protected static final java.lang.String META_DIRThe standard META-INF directory in jar files- See Also:
- Constant Field Values
-
MANIFEST
protected static final java.lang.String MANIFESTThe standard MANIFEST file- See Also:
- Constant Field Values
-
EJB_DD
protected static final java.lang.String EJB_DDName for EJB Deployment descriptor within EJB jars- See Also:
- Constant Field Values
-
ANALYZER_SUPER
public static final java.lang.String ANALYZER_SUPERA dependency analyzer name to find ancestor classes- See Also:
- Constant Field Values
-
ANALYZER_FULL
public static final java.lang.String ANALYZER_FULLA dependency analyzer name to find all related classes- See Also:
- Constant Field Values
-
ANALYZER_NONE
public static final java.lang.String ANALYZER_NONEA dependency analyzer name for no analyzer- See Also:
- Constant Field Values
-
DEFAULT_ANALYZER
public static final java.lang.String DEFAULT_ANALYZERThe default analyzer- See Also:
- Constant Field Values
-
ANALYZER_CLASS_SUPER
public static final java.lang.String ANALYZER_CLASS_SUPERThe analyzer class for the super analyzer- See Also:
- Constant Field Values
-
ANALYZER_CLASS_FULL
public static final java.lang.String ANALYZER_CLASS_FULLThe analyzer class for the super analyzer- See Also:
- Constant Field Values
-
-
Constructor Details
-
GenericDeploymentTool
public GenericDeploymentTool()
-
-
Method Details
-
setDestdir
public void setDestdir(java.io.File inDir)Set the destination directory; required.- Parameters:
inDir
- the destination directory.
-
getDestDir
protected java.io.File getDestDir()Get the destination directory.- Returns:
- the destination directory into which EJB jars are to be written
-
setTask
Set the task which owns this tool- Specified by:
setTask
in interfaceEJBDeploymentTool
- Parameters:
task
- the Task to which this deployment tool is associated.
-
getTask
Get the task for this tool.- Returns:
- the Task instance this tool is associated with.
-
getConfig
protected org.apache.tools.ant.taskdefs.optional.ejb.EjbJar.Config getConfig()Get the basename terminator.- Returns:
- an ejbjar task configuration
-
usingBaseJarName
protected boolean usingBaseJarName()Indicate if this build is using the base jar name.- Returns:
- true if the name of the generated jar is coming from the basejarname attribute
-
setGenericJarSuffix
public void setGenericJarSuffix(java.lang.String inString)Set the suffix for the generated jar file.- Parameters:
inString
- the string to use as the suffix.
-
createClasspath
Add the classpath for the user classes- Returns:
- a Path instance to be configured by Ant.
-
setClasspath
Set the classpath to be used for this compilation.- Parameters:
classpath
- the classpath to be used for this build.
-
getCombinedClasspath
Get the classpath by combining the one from the surrounding task, if any and the one from this tool.- Returns:
- the combined classpath
-
log
protected void log(java.lang.String message, int level)Log a message to the Ant output.- Parameters:
message
- the message to be logged.level
- the severity of this message.
-
getLocation
Get the build file location associated with this element's task.- Returns:
- the task's location instance.
-
configure
public void configure(org.apache.tools.ant.taskdefs.optional.ejb.EjbJar.Config config)Configure this tool for use in the ejbjar task.- Specified by:
configure
in interfaceEJBDeploymentTool
- Parameters:
config
- the configuration from the surrounding ejbjar task.
-
addFileToJar
protected void addFileToJar(java.util.jar.JarOutputStream jStream, java.io.File inputFile, java.lang.String logicalFilename) throws BuildExceptionUtility method that encapsulates the logic of adding a file entry to a .jar file. Used by execute() to add entries to the jar file as it is constructed.- Parameters:
jStream
- A JarOutputStream into which to write the jar entry.inputFile
- A File from which to read the contents the file being added.logicalFilename
- A String representing the name, including all relevant path information, that should be stored for the entry being added.- Throws:
BuildException
- if there is a problem.
-
getDescriptorHandler
Get a descriptionHandler.- Parameters:
srcDir
- the source directory.- Returns:
- a handler.
-
registerKnownDTDs
Register the locations of all known DTDs. vendor-specific subclasses should override this method to define the vendor-specific locations of the EJB DTDs- Parameters:
handler
- no used in this class.
-
processDescriptor
public void processDescriptor(java.lang.String descriptorFileName, javax.xml.parsers.SAXParser saxParser)Process a deployment descriptor, generating the necessary vendor specific deployment files..- Specified by:
processDescriptor
in interfaceEJBDeploymentTool
- Parameters:
descriptorFileName
- the name of the deployment descriptorsaxParser
- a SAX parser which can be used to parse the deployment descriptor.
-
checkConfiguration
protected void checkConfiguration(java.lang.String descriptorFileName, javax.xml.parsers.SAXParser saxParser) throws BuildExceptionThis 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.- Parameters:
descriptorFileName
- String representing the file name of an EJB descriptor to be processedsaxParser
- SAXParser which may be used to parse the XML descriptor- Throws:
BuildException
- if there is a problem.
-
parseEjbFiles
protected java.util.Hashtable<java.lang.String,java.io.File> parseEjbFiles(java.lang.String descriptorFileName, javax.xml.parsers.SAXParser saxParser) throws java.io.IOException, org.xml.sax.SAXExceptionThis method returns a list of EJB files found when the specified EJB descriptor is parsed and processed.- Parameters:
descriptorFileName
- String representing the file name of an EJB descriptor to be processedsaxParser
- SAXParser which may be used to parse the XML descriptor- Returns:
- Hashtable of EJB class (and other) files to be added to the completed JAR file
- Throws:
org.xml.sax.SAXException
- Any SAX exception, possibly wrapping another exceptionjava.io.IOException
- An IOException from the parser, possibly from a the byte stream or character stream
-
addSupportClasses
protected void addSupportClasses(java.util.Hashtable<java.lang.String,java.io.File> ejbFiles)Adds any classes the user specifies using support nested elements to theejbFiles
Hashtable.- Parameters:
ejbFiles
- Hashtable of EJB classes (and other) files that will be added to the completed JAR file
-
getJarBaseName
protected java.lang.String getJarBaseName(java.lang.String descriptorFileName)Using the EJB descriptor file name passed from theejbjar
task, this method returns the "basename" which will be used to name the completed JAR file.- Parameters:
descriptorFileName
- String representing the file name of an EJB descriptor to be processed- Returns:
- The "basename" which will be used to name the completed JAR file
-
getVendorDDPrefix
public java.lang.String getVendorDDPrefix(java.lang.String baseName, java.lang.String descriptorFileName)Get the prefix for vendor deployment descriptors. This will contain the path and the start of the descriptor name, depending on the naming scheme- Parameters:
baseName
- the base name to use.descriptorFileName
- the file name to use.- Returns:
- the prefix.
-
addVendorFiles
protected void addVendorFiles(java.util.Hashtable<java.lang.String,java.io.File> ejbFiles, java.lang.String ddPrefix)Add any vendor specific files which should be included in the EJB Jar.- Parameters:
ejbFiles
- a hashtable entryname -> file.ddPrefix
- a prefix to use.
-
needToRebuild
protected boolean needToRebuild(java.util.Hashtable<java.lang.String,java.io.File> ejbFiles, java.io.File jarFile)This method checks the timestamp on each file listed in theejbFiles
and compares them to the timestamp on thejarFile
. If thejarFile
's timestamp is more recent than each EJB file,true
is returned. Otherwise,false
is returned. TODO: find a way to check the manifest-file, that is found by naming convention- Parameters:
ejbFiles
- Hashtable of EJB classes (and other) files that will be added to the completed JAR filejarFile
- JAR file which will contain all of the EJB classes (and other) files- Returns:
- boolean indicating whether or not the
jarFile
is up to date
-
getPublicId
protected java.lang.String getPublicId()Returns the Public ID of the DTD specified in the EJB descriptor. Not every vendor-specificDeploymentTool
will need to reference this value or may want to determine this value in a vendor-specific way.- Returns:
- Public ID of the DTD specified in the EJB descriptor.
-
getManifestFile
protected java.io.File getManifestFile(java.lang.String prefix)Get the manifest file to use for building the generic jar. If the file does not exist the global manifest from the config is used otherwise the default Ant manifest will be used.- Parameters:
prefix
- the prefix where to llook for the manifest file based on the naming convention.- Returns:
- the manifest file or null if the manifest file does not exist
-
writeJar
protected void writeJar(java.lang.String baseName, java.io.File jarfile, java.util.Hashtable<java.lang.String,java.io.File> files, java.lang.String publicId) throws BuildExceptionMethod used to encapsulate the writing of the JAR file. Iterates over the filenames/java.io.Files in the Hashtable stored on the instance variable ejbFiles.- Parameters:
baseName
- the base name to use.jarfile
- the jar file to write to.files
- the files to write to the jar.publicId
- the id to use.- Throws:
BuildException
- if there is a problem.
-
checkAndAddDependants
protected void checkAndAddDependants(java.util.Hashtable<java.lang.String,java.io.File> checkEntries) throws BuildExceptionAdd all available classes, that depend on Remote, Home, Bean, PK- Parameters:
checkEntries
- files, that are extracted from the deployment descriptor- Throws:
BuildException
- if there is a problem.
-
getClassLoaderForBuild
protected java.lang.ClassLoader getClassLoaderForBuild()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 being added to the jar.- Returns:
- a classloader.
-
validateConfigured
Called to validate that the tool parameters have been configured.- Specified by:
validateConfigured
in interfaceEJBDeploymentTool
- Throws:
BuildException
- If the Deployment Tool's configuration isn't valid
-