FileDocCategorySizeDatePackage
EjbJar.javaAPI DocApache Ant 1.7021410Wed Dec 13 06:16:20 GMT 2006org.apache.tools.ant.taskdefs.optional.ejb

EjbJar

public class EjbJar extends org.apache.tools.ant.taskdefs.MatchingTask
Provides automated EJB JAR file creation.

Extends the MatchingTask class provided in the default ant distribution to provide a directory scanning EJB jarfile generator.

The task works by taking the deployment descriptors one at a time and parsing them to locate the names of the classes which should be placed in the jar. The classnames are translated to java.io.Files by replacing periods with File.separatorChar and resolving the generated filename as a relative path under the srcDir attribute. All necessary files are then assembled into a jarfile. One jarfile is constructed for each deployment descriptor found.

Fields Summary
private Config
config
The config which is built by this task and used by the various deployment tools to access the configuration of the ejbjar task
private File
destDir
Stores a handle to the directory to put the Jar files in. This is only used by the generic deployment descriptor tool which is created if no other deployment descriptor tools are provided. Normally each deployment tool will specify the desitination dir itself.
private String
genericJarSuffix
Instance variable that stores the suffix for the generated jarfile.
private String
cmpVersion
Instance variable that stores the CMP version for the jboss jarfile.
private ArrayList
deploymentTools
The list of deployment tools we are going to run.
Constructors Summary
Methods Summary
protected voidaddDeploymentTool(EJBDeploymentTool deploymentTool)
Add a deployment tool to the list of deployment tools that will be processed

param
deploymentTool a deployment tool instance to which descriptors will be passed for processing.


                                            
        
        deploymentTool.setTask(this);
        deploymentTools.add(deploymentTool);
    
public BorlandDeploymentToolcreateBorland()
Adds a deployment tool for Borland server.

return
the deployment tool instance to be configured.

        log("Borland deployment tools",  Project.MSG_VERBOSE);

        BorlandDeploymentTool tool = new BorlandDeploymentTool();
        tool.setTask(this);
        deploymentTools.add(tool);
        return tool;
    
public org.apache.tools.ant.types.PathcreateClasspath()
Adds to the classpath used to locate the super classes and interfaces of the classes that will make up the EJB JAR.

return
the path to be configured.

        if (config.classpath == null) {
            config.classpath = new Path(getProject());
        }
        return config.classpath.createPath();
    
public org.apache.tools.ant.taskdefs.optional.ejb.EjbJar$DTDLocationcreateDTD()
Create a DTD location record. This stores the location of a DTD. The DTD is identified by its public Id. The location may either be a file location or a resource location.

return
the DTD location object to be configured by Ant

        DTDLocation dtdLocation = new DTDLocation();
        config.dtdLocations.add(dtdLocation);

        return dtdLocation;
    
public IPlanetDeploymentToolcreateIplanet()
Adds a deployment tool for iPlanet Application Server.

return
the deployment tool instance to be configured.

        log("iPlanet Application Server deployment tools", Project.MSG_VERBOSE);

        IPlanetDeploymentTool tool = new IPlanetDeploymentTool();
        addDeploymentTool(tool);
        return tool;
    
public JbossDeploymentToolcreateJboss()
Adds a deployment tool for JBoss server.

return
the deployment tool instance to be configured.

        JbossDeploymentTool tool = new JbossDeploymentTool();
        addDeploymentTool(tool);
        return tool;
    
public JonasDeploymentToolcreateJonas()
Adds a deployment tool for JOnAS server.

return
the deployment tool instance to be configured.

        log("JOnAS deployment tools",  Project.MSG_VERBOSE);

        JonasDeploymentTool tool = new JonasDeploymentTool();
        addDeploymentTool(tool);
        return tool;
    
public org.apache.tools.ant.types.FileSetcreateSupport()
Adds a fileset for support elements.

return
a fileset which can be populated with support files.

        FileSet supportFileSet = new FileSet();
        config.supportFileSets.add(supportFileSet);
        return supportFileSet;
    
public WeblogicDeploymentToolcreateWeblogic()
Adds a deployment tool for Weblogic server.

return
the deployment tool instance to be configured.

        WeblogicDeploymentTool tool = new WeblogicDeploymentTool();
        addDeploymentTool(tool);
        return tool;
    
public WeblogicTOPLinkDeploymentToolcreateWeblogictoplink()
Adds a deployment tool for Weblogic when using the Toplink Object-Relational mapping.

return
the deployment tool instance to be configured.

        log("The <weblogictoplink> element is no longer required. Please use "
            + "the <weblogic> element and set newCMP=\"true\"",
            Project.MSG_INFO);
        WeblogicTOPLinkDeploymentTool tool
            = new WeblogicTOPLinkDeploymentTool();
        addDeploymentTool(tool);
        return tool;
    
public WebsphereDeploymentToolcreateWebsphere()
Adds a deployment tool for Websphere 4.0 server.

return
the deployment tool instance to be configured.

        WebsphereDeploymentTool tool = new WebsphereDeploymentTool();
        addDeploymentTool(tool);
        return tool;
    
public voidexecute()
Invoked by Ant after the task is prepared, when it is ready to execute this task. This will configure all of the nested deployment tools to allow them to process the jar. If no deployment tools have been configured a generic tool is created to handle the jar. A parser is configured and then each descriptor found is passed to all the deployment tool elements for processing.

exception
BuildException thrown whenever a problem is encountered that cannot be recovered from, to signal to ant that a major problem occurred within this task.

        validateConfig();

        if (deploymentTools.size() == 0) {
            GenericDeploymentTool genericTool = new GenericDeploymentTool();
            genericTool.setTask(this);
            genericTool.setDestdir(destDir);
            genericTool.setGenericJarSuffix(genericJarSuffix);
            deploymentTools.add(genericTool);
        }

        for (Iterator i = deploymentTools.iterator(); i.hasNext();) {
            EJBDeploymentTool tool = (EJBDeploymentTool) i.next();
            tool.configure(config);
            tool.validateConfigured();
        }

        try {
            // Create the parser using whatever parser the system dictates
            SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
            saxParserFactory.setValidating(true);
            SAXParser saxParser = saxParserFactory.newSAXParser();


            DirectoryScanner ds = getDirectoryScanner(config.descriptorDir);
            ds.scan();
            String[] files = ds.getIncludedFiles();

            log(files.length + " deployment descriptors located.",
                Project.MSG_VERBOSE);

            // Loop through the files. Each file represents one deployment
            // descriptor, and hence one bean in our model.
            for (int index = 0; index < files.length; ++index) {
                // process the deployment descriptor in each tool
                for (Iterator i = deploymentTools.iterator(); i.hasNext();) {
                    EJBDeploymentTool tool = (EJBDeploymentTool) i.next();
                    tool.processDescriptor(files[index], saxParser);
                }
            }
        } catch (SAXException se) {
            String msg = "SAXException while creating parser."
                + "  Details: "
                + se.getMessage();
            throw new BuildException(msg, se);
        } catch (ParserConfigurationException pce) {
            String msg = "ParserConfigurationException while creating parser. "
                       + "Details: " + pce.getMessage();
            throw new BuildException(msg, pce);
        }
    
public java.lang.StringgetCmpversion()
Gets the CMP version.

return
CMP version
since
ant 1.6

        return this.cmpVersion;
    
public java.io.FilegetDestdir()
Gets the destination directory.

return
destination directory
since
ant 1.6

        return this.destDir;
    
public voidsetBasejarname(java.lang.String inValue)
Set the base name of the EJB JAR that is to be created if it is not to be determined from the name of the deployment descriptor files.

param
inValue the basename that will be used when writing the jar file containing the EJB

        config.baseJarName = inValue;
        if (config.namingScheme == null) {
            config.namingScheme = new NamingScheme();
            config.namingScheme.setValue(NamingScheme.BASEJARNAME);
        } else if (!config.namingScheme.getValue().equals(NamingScheme.BASEJARNAME)) {
            throw new BuildException("The basejarname attribute is not "
                + "compatible with the "
                + config.namingScheme.getValue() + " naming scheme");
        }
    
public voidsetBasenameterminator(java.lang.String inValue)
The string which terminates the bean name. The convention used by this task is that bean descriptors are named as the BeanName with some suffix. The baseNameTerminator string separates the bean name and the suffix and is used to determine the bean name.

param
inValue a string which marks the end of the basename.

        config.baseNameTerminator = inValue;
    
public voidsetClasspath(org.apache.tools.ant.types.Path classpath)
Set the classpath to use when resolving classes for inclusion in the jar.

param
classpath the classpath to use.

        config.classpath = classpath;
    
public voidsetCmpversion(org.apache.tools.ant.taskdefs.optional.ejb.EjbJar$CMPVersion version)
Sets the CMP version.

param
version CMP version. Must be either 1.0 or 2.0.
Default is 1.0.
Initially, only the JBoss implementation does something specific for CMP 2.0.
since
ant 1.6

        this.cmpVersion = version.getValue();
    
public voidsetDependency(java.lang.String analyzer)
Set the analyzer to use when adding in dependencies to the JAR.

param
analyzer the name of the dependency analyzer or a class.

        config.analyzer = analyzer;
    
public voidsetDescriptordir(java.io.File inDir)
Set the descriptor directory. The descriptor directory contains the EJB deployment descriptors. These are XML files that declare the properties of a bean in a particular deployment scenario. Such properties include, for example, the transactional nature of the bean and the security access control to the bean's methods.

param
inDir the directory containing the deployment descriptors.

        config.descriptorDir = inDir;
    
public voidsetDestdir(java.io.File inDir)
Set the destination directory. The EJB jar files will be written into this directory. The jar files that exist in this directory are also used when determining if the contents of the jar file have changed. Note that this parameter is only used if no deployment tools are specified. Typically each deployment tool will specify its own destination directory.

param
inDir the destination directory in which to generate jars

        this.destDir = inDir;
    
public voidsetFlatdestdir(boolean inValue)
Controls whether the destination JARs are written out in the destination directory with the same hierarchical structure from which the deployment descriptors have been read. If this is set to true the generated EJB jars are written into the root of the destination directory, otherwise they are written out in the same relative position as the deployment descriptors in the descriptor directory.

param
inValue the new value of the flatdestdir flag.

        config.flatDestDir = inValue;
    
public voidsetGenericjarsuffix(java.lang.String inString)
Set the suffix for the generated jar file. When generic jars are generated, they have a suffix which is appended to the the bean name to create the name of the jar file. Note that this suffix includes the extension fo te jar file and should therefore end with an appropriate extension such as .jar or .ear

param
inString the string to use as the suffix.

        this.genericJarSuffix = inString;
    
public voidsetManifest(java.io.File manifest)
Set the Manifest file to use when jarring. As of EJB 1.1, manifest files are no longer used to configure the EJB. However, they still have a vital importance if the EJB is intended to be packaged in an EAR file. By adding "Class-Path" settings to a Manifest file, the EJB can look for classes inside the EAR file itself, allowing for easier deployment. This is outlined in the J2EE specification, and all J2EE components are meant to support it.

param
manifest the manifest to be used in the EJB jar

         config.manifest = manifest;
     
public voidsetNaming(org.apache.tools.ant.taskdefs.optional.ejb.EjbJar$NamingScheme namingScheme)
Set the naming scheme used to determine the name of the generated jars from the deployment descriptor

param
namingScheme the naming scheme to be used

        config.namingScheme = namingScheme;
        if (!config.namingScheme.getValue().equals(NamingScheme.BASEJARNAME)
            && config.baseJarName != null) {
            throw new BuildException("The basejarname attribute is not "
                + "compatible with the "
                + config.namingScheme.getValue() + " naming scheme");
        }
    
public voidsetSrcdir(java.io.File inDir)
Sets the source directory, which is the directory that contains the classes that will be added to the EJB jar. Typically this will include the home and remote interfaces and the bean class.

param
inDir the source directory.

        config.srcDir = inDir;
    
private voidvalidateConfig()
Validate the config that has been configured from the build file

throws
BuildException if the config is not valid

        if (config.srcDir == null) {
            throw new BuildException("The srcDir attribute must be specified");
        }

        if (config.descriptorDir == null) {
            config.descriptorDir = config.srcDir;
        }

        if (config.namingScheme == null) {
            config.namingScheme = new NamingScheme();
            config.namingScheme.setValue(NamingScheme.DESCRIPTOR);
        } else if (config.namingScheme.getValue().equals(NamingScheme.BASEJARNAME)
                    && config.baseJarName == null) {
            throw new BuildException("The basejarname attribute must "
                + "be specified with the basejarname naming scheme");
        }