Fields Summary |
---|
protected static final String | EJB_JAR_1_1_PUBLIC_IDPublic Id of the standard deployment descriptor DTD. |
protected static final String | EJB_JAR_2_0_PUBLIC_ID |
protected static final String | JONAS_EJB_JAR_2_4_PUBLIC_IDPublic Id of the JOnAS-specific deployment descriptor DTD. |
protected static final String | JONAS_EJB_JAR_2_5_PUBLIC_ID |
protected static final String | RMI_ORBRMI ORB. |
protected static final String | JEREMIE_ORBJEREMIE ORB. |
protected static final String | DAVID_ORBDAVID ORB. |
protected static final String | EJB_JAR_1_1_DTDName of the standard deployment descriptor DTD (these files are stored in
the ${JONAS_ROOT}/xml directory). |
protected static final String | EJB_JAR_2_0_DTD |
protected static final String | JONAS_EJB_JAR_2_4_DTDName of the JOnAS-specific deployment descriptor DTD (these files are
stored in the ${JONAS_ROOT}/xml directory). |
protected static final String | JONAS_EJB_JAR_2_5_DTD |
protected static final String | JONAS_DDDefault JOnAS deployment descriptor name. |
protected static final String | GENIC_CLASSGenIC class name (JOnAS 2.5) |
protected static final String | OLD_GENIC_CLASS_1Old GenIC class name (JOnAS 2.4.x). |
protected static final String | OLD_GENIC_CLASS_2Old GenIC class name. |
private String | descriptorNameFilename of the standard EJB descriptor (which is passed to this class
from the parent "ejbjar" task). This file is relative to the directory
specified by the "srcdir" attribute in the ejbjar task. |
private String | jonasDescriptorNameFilename of the JOnAS-specific EJB descriptor (which is passed to this
class from the parent "ejbjar" task). This file is relative to the
directory specified by the "srcdir" attribute in the ejbjar task. |
private File | outputdirTemporary output directory used by GenIC. |
private boolean | keepgeneratedtrue if the intermediate Java source files generated by
GenIC must be deleted or not. The default is false |
private boolean | nocompiltrue if the generated source files must not be compiled via
the java and rmi compilers. The default is false . |
private boolean | novalidationtrue if the XML deployment descriptors must be parsed
without validation. The default is false . |
private String | javacJava compiler to use. The default is the value of
build.compiler property. |
private String | javacoptsOptions to pass to the java compiler. |
private String | rmicoptsOptions to pass to the rmi compiler. |
private boolean | secpropagWhether or not the RMI skeleton and stub must be modified to
implement the implicit propagation of the security context (the
transactional context is always provided). The default is
false . |
private boolean | verbosetrue if the GenIC call must be verbose. The default
is false . |
private String | additionalargsAdditional args to send to GenIC. |
private File | jonasrootJOnAS root directory. |
private boolean | keepgenerictrue if the generic JAR file used as input to GenIC must be
retained. The default is false . |
private String | suffixStores the suffix for the JOnAS JAR file. The default is '.jar'. |
private String | orbORB to use (RMI, JEREMIE or DAVID). If omitted, it defaults to the one
present in classpath. If specified, the corresponding JOnAS JAR is
automatically added to the classpath. |
private boolean | nogenictrue if GenIC must not be run on the EJB JAR.
The default is false . |
Methods Summary |
---|
private void | addAllFiles(java.io.File file, java.lang.String rootDir, java.util.Hashtable hashtable)Add a file to the a given hashtable. If the file is a directory, add
recursivly all the files inside to the hashtable.
if (!file.exists()) {
throw new IllegalArgumentException();
}
String newRootDir;
if (file.isDirectory()) {
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
if (rootDir.length() > 0) {
newRootDir = rootDir + File.separator + files[i].getName();
} else {
newRootDir = files[i].getName();
}
addAllFiles(files[i], newRootDir, hashtable);
}
} else {
hashtable.put(rootDir, file);
}
|
private void | addGenICGeneratedFiles(java.io.File genericJarFile, java.util.Hashtable ejbFiles)Add to the given hashtable all the file generated by GenIC.
Java genicTask = null; // GenIC task
String genicClass = null; // GenIC class (3 are supported for various
// versions
if (nogenic) {
return;
}
genicTask = new Java(getTask());
genicTask.setTaskName("genic");
genicTask.setFork(true);
// jonasroot
genicTask.createJvmarg().setValue("-Dinstall.root=" + jonasroot);
// java policy file
String jonasConfigDir = jonasroot + File.separator + "config";
File javaPolicyFile = new File(jonasConfigDir, "java.policy");
if (javaPolicyFile.exists()) {
genicTask.createJvmarg().setValue("-Djava.security.policy="
+ javaPolicyFile.toString());
}
// outputdir
try {
outputdir = createTempDir();
} catch (IOException aIOException) {
String msg = "Cannot create temp dir: " + aIOException.getMessage();
throw new BuildException(msg, aIOException);
}
log("Using temporary output directory: " + outputdir, Project.MSG_VERBOSE);
genicTask.createArg().setValue("-d");
genicTask.createArg().setFile(outputdir);
// work around a bug of GenIC 2.5
String key;
File f;
Enumeration keys = ejbFiles.keys();
while (keys.hasMoreElements()) {
key = (String) keys.nextElement();
f = new File(outputdir + File.separator + key);
f.getParentFile().mkdirs();
}
log("Worked around a bug of GenIC 2.5.", Project.MSG_VERBOSE);
// classpath
Path classpath = getCombinedClasspath();
if (classpath == null) {
classpath = new Path(getTask().getProject());
}
classpath.append(new Path(classpath.getProject(), jonasConfigDir));
classpath.append(new Path(classpath.getProject(), outputdir.toString()));
// try to create the classpath for the correct ORB
if (orb != null) {
String orbJar = jonasroot + File.separator + "lib"
+ File.separator + orb + "_jonas.jar";
classpath.append(new Path(classpath.getProject(), orbJar));
}
log("Using classpath: " + classpath.toString(), Project.MSG_VERBOSE);
genicTask.setClasspath(classpath);
// class name (search in the classpath provided for the ejbjar element)
genicClass = getGenicClassName(classpath);
if (genicClass == null) {
log("Cannot find GenIC class in classpath.", Project.MSG_ERR);
throw new BuildException("GenIC class not found, please check the classpath.");
} else {
log("Using '" + genicClass + "' GenIC class." , Project.MSG_VERBOSE);
genicTask.setClassname(genicClass);
}
// keepgenerated
if (keepgenerated) {
genicTask.createArg().setValue("-keepgenerated");
}
// nocompil
if (nocompil) {
genicTask.createArg().setValue("-nocompil");
}
// novalidation
if (novalidation) {
genicTask.createArg().setValue("-novalidation");
}
// javac
if (javac != null) {
genicTask.createArg().setValue("-javac");
genicTask.createArg().setLine(javac);
}
// javacopts
if (javacopts != null && !javacopts.equals("")) {
genicTask.createArg().setValue("-javacopts");
genicTask.createArg().setLine(javacopts);
}
// rmicopts
if (rmicopts != null && !rmicopts.equals("")) {
genicTask.createArg().setValue("-rmicopts");
genicTask.createArg().setLine(rmicopts);
}
// secpropag
if (secpropag) {
genicTask.createArg().setValue("-secpropag");
}
// verbose
if (verbose) {
genicTask.createArg().setValue("-verbose");
}
// additionalargs
if (additionalargs != null) {
genicTask.createArg().setValue(additionalargs);
}
// the generated classes must not be added in the generic JAR!
// is that buggy on old JOnAS (2.4) ??
genicTask.createArg().setValue("-noaddinjar");
// input file to process by GenIC
genicTask.createArg().setValue(genericJarFile.getPath());
// calling GenIC task
log("Calling " + genicClass + " for " + getConfig().descriptorDir
+ File.separator + descriptorName + ".", Project.MSG_VERBOSE);
if (genicTask.executeJava() != 0) {
// the method deleteOnExit() do not work because the directory is not empty
log("Deleting temp output directory '" + outputdir + "'.", Project.MSG_VERBOSE);
deleteAllFiles(outputdir);
if (!keepgeneric) {
log("Deleting generic JAR " + genericJarFile.toString(),
Project.MSG_VERBOSE);
genericJarFile.delete();
}
throw new BuildException("GenIC reported an error.");
}
// add the generated files to the ejbFiles
addAllFiles(outputdir, "", ejbFiles);
|
protected void | addVendorFiles(java.util.Hashtable ejbFiles, java.lang.String ddPrefix){@inheritDoc}.
// JOnAS-specific descriptor deployment
jonasDescriptorName = getJonasDescriptorName();
File jonasDD = new File(getConfig().descriptorDir, jonasDescriptorName);
if (jonasDD.exists()) {
ejbFiles.put(META_DIR + JONAS_DD, jonasDD);
} else {
log("Unable to locate the JOnAS deployment descriptor. It was expected to be in: "
+ jonasDD.getPath() + ".", Project.MSG_WARN);
}
|
protected void | checkConfiguration(java.lang.String descriptorFileName, javax.xml.parsers.SAXParser saxParser)Verify the configuration.
// jonasroot
if (jonasroot == null) {
throw new BuildException("The jonasroot attribut is not set.");
} else if (!jonasroot.isDirectory()) {
throw new BuildException("The jonasroot attribut '" + jonasroot
+ "' is not a valid directory.");
}
// orb
if (orb != null && !orb.equals(RMI_ORB) && !orb.equals(JEREMIE_ORB)
&& !orb.equals(DAVID_ORB)) {
throw new BuildException("The orb attribut '" + orb
+ "' is not valid (must be either "
+ RMI_ORB + ", " + JEREMIE_ORB + " or " + DAVID_ORB + ").");
}
// additionalargs
if (additionalargs != null && additionalargs.equals("")) {
throw new BuildException("Empty additionalargs attribut.");
}
// javac
if (javac != null && javac.equals("")) {
throw new BuildException("Empty javac attribut.");
}
|
private java.io.File | createTempDir()Create a temporary directory for GenIC output.
File tmpDir = File.createTempFile("genic", null, null);
tmpDir.delete();
if (!tmpDir.mkdir()) {
throw new IOException("Cannot create the temporary directory '" + tmpDir + "'.");
}
return tmpDir;
|
private void | deleteAllFiles(java.io.File aFile)Delete a file. If the file is a directory, delete recursivly all the
files inside.
if (aFile.isDirectory()) {
File[] someFiles = aFile.listFiles();
for (int i = 0; i < someFiles.length; i++) {
deleteAllFiles(someFiles[i]);
}
}
aFile.delete();
|
java.lang.String | getGenicClassName(org.apache.tools.ant.types.Path classpath)Get the GenIC class name to use in the given classpath.
log("Looking for GenIC class in classpath: "
+ classpath.toString(), Project.MSG_VERBOSE);
AntClassLoader cl = classpath.getProject().createClassLoader(classpath);
try {
cl.loadClass(JonasDeploymentTool.GENIC_CLASS);
log("Found GenIC class '" + JonasDeploymentTool.GENIC_CLASS
+ "' in classpath.", Project.MSG_VERBOSE);
return JonasDeploymentTool.GENIC_CLASS;
} catch (ClassNotFoundException cnf1) {
log("GenIC class '" + JonasDeploymentTool.GENIC_CLASS
+ "' not found in classpath.",
Project.MSG_VERBOSE);
}
try {
cl.loadClass(JonasDeploymentTool.OLD_GENIC_CLASS_1);
log("Found GenIC class '" + JonasDeploymentTool.OLD_GENIC_CLASS_1
+ "' in classpath.", Project.MSG_VERBOSE);
return JonasDeploymentTool.OLD_GENIC_CLASS_1;
} catch (ClassNotFoundException cnf2) {
log("GenIC class '" + JonasDeploymentTool.OLD_GENIC_CLASS_1
+ "' not found in classpath.",
Project.MSG_VERBOSE);
}
try {
cl.loadClass(JonasDeploymentTool.OLD_GENIC_CLASS_2);
log("Found GenIC class '" + JonasDeploymentTool.OLD_GENIC_CLASS_2
+ "' in classpath.", Project.MSG_VERBOSE);
return JonasDeploymentTool.OLD_GENIC_CLASS_2;
} catch (ClassNotFoundException cnf3) {
log("GenIC class '" + JonasDeploymentTool.OLD_GENIC_CLASS_2
+ "' not found in classpath.",
Project.MSG_VERBOSE);
}
return null;
|
protected java.lang.String | getJarBaseName(java.lang.String descriptorFileName){@inheritDoc}.
String baseName = null;
if (getConfig().namingScheme.getValue().equals(EjbJar.NamingScheme.DESCRIPTOR)) {
// try to find JOnAS specific convention name
if (descriptorFileName.indexOf(getConfig().baseNameTerminator) == -1) {
// baseNameTerminator not found: the descriptor use the
// JOnAS naming convention, ie [Foo.xml,jonas-Foo.xml] and
// not [Foo<baseNameTerminator>-ejb-jar.xml,
// Foo<baseNameTerminator>-jonas-ejb-jar.xml].
String aCanonicalDescriptor = descriptorFileName.replace('\\", '/");
int lastSeparatorIndex = aCanonicalDescriptor.lastIndexOf('/");
int endOfBaseName;
if (lastSeparatorIndex != -1) {
endOfBaseName = descriptorFileName.indexOf(".xml", lastSeparatorIndex);
} else {
endOfBaseName = descriptorFileName.indexOf(".xml");
}
if (endOfBaseName != -1) {
baseName = descriptorFileName.substring(0, endOfBaseName);
}
}
}
if (baseName == null) {
// else get standard baseName
baseName = super.getJarBaseName(descriptorFileName);
}
log("JAR base name: " + baseName, Project.MSG_VERBOSE);
return baseName;
|
private java.lang.String | getJonasDescriptorName()Determines the name of the JOnAS-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]-jonas-ejb-jar.xml" or "jonas-[basename].xml"
// descriptorName = <path><basename><basenameterminator><remainder>
// examples = /org/objectweb/fooAppli/foo/Foo-ejb-jar.xml
// examples = /org/objectweb/fooAppli/foo/Foo.xml (JOnAS convention)
String jonasDN; // JOnAS-specific DD
boolean jonasConvention = false; // true if the JOnAS convention is used for the DD
String path; // Directory path of the EJB descriptor
String fileName; // EJB descriptor file name
String baseName; // Filename appearing before name terminator
String remainder; // Filename appearing after the name terminator
int startOfFileName = descriptorName.lastIndexOf(File.separatorChar);
if (startOfFileName != -1) {
// extract path info
path = descriptorName.substring(0, startOfFileName + 1);
fileName = descriptorName.substring(startOfFileName + 1);
} else {
// descriptorName is just a file without path
path = "";
fileName = descriptorName;
}
if (fileName.startsWith(EJB_DD)) {
return path + JONAS_DD;
}
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 "jonas-" appears at the
* end of the name and before the '.' (if present).
*/
if (endOfBaseName < 0) {
// baseNameTerminator not found: the descriptor use the
// JOnAS naming convention, ie [Foo.xml,jonas-Foo.xml] and
// not [Foo<baseNameTerminator>-ejb-jar.xml,
// Foo<baseNameTerminator>-jonas-ejb-jar.xml].
endOfBaseName = descriptorName.lastIndexOf('.") - 1;
if (endOfBaseName < 0) {
// no . found
endOfBaseName = descriptorName.length() - 1;
}
jonasConvention = true;
}
baseName = descriptorName.substring(startOfFileName + 1, endOfBaseName + 1);
remainder = descriptorName.substring(endOfBaseName + 1);
if (jonasConvention) {
jonasDN = path + "jonas-" + baseName + ".xml";
} else {
jonasDN = path + baseName + "jonas-" + remainder;
}
log("Standard EJB descriptor name: " + descriptorName, Project.MSG_VERBOSE);
log("JOnAS-specific descriptor name: " + jonasDN, Project.MSG_VERBOSE);
return jonasDN;
|
protected java.io.File | getVendorOutputJarFile(java.lang.String baseName){@inheritDoc}.
return new File(getDestDir(), baseName + suffix);
|
public void | processDescriptor(java.lang.String aDescriptorName, javax.xml.parsers.SAXParser saxParser){@inheritDoc}.
descriptorName = aDescriptorName;
log("JOnAS Deployment Tool processing: " + descriptorName,
Project.MSG_VERBOSE);
super.processDescriptor(descriptorName, saxParser);
if (outputdir != null) {
// the method deleteOnExit() do not work because the directory is not empty
log("Deleting temp output directory '" + outputdir + "'.", Project.MSG_VERBOSE);
deleteAllFiles(outputdir);
}
|
protected void | registerKnownDTDs(DescriptorHandler handler){@inheritDoc}.
handler.registerDTD(EJB_JAR_1_1_PUBLIC_ID,
jonasroot + File.separator + "xml" + File.separator + EJB_JAR_1_1_DTD);
handler.registerDTD(EJB_JAR_2_0_PUBLIC_ID,
jonasroot + File.separator + "xml" + File.separator + EJB_JAR_2_0_DTD);
handler.registerDTD(JONAS_EJB_JAR_2_4_PUBLIC_ID,
jonasroot + File.separator + "xml" + File.separator + JONAS_EJB_JAR_2_4_DTD);
handler.registerDTD(JONAS_EJB_JAR_2_5_PUBLIC_ID,
jonasroot + File.separator + "xml" + File.separator + JONAS_EJB_JAR_2_5_DTD);
|
public void | setAdditionalargs(java.lang.String aString)Sets the additional arguments.
additionalargs = aString;
|
public void | setJarsuffix(java.lang.String aString)Sets the jar suffix.
suffix = aString;
|
public void | setJavac(java.lang.String aString)Sets the java compiler to use.
javac = aString;
|
public void | setJavacopts(java.lang.String aString)Set the options to pass to the java compiler.
javacopts = aString;
|
public void | setJonasroot(java.io.File aFile)Set the JOnAS root directory.
jonasroot = aFile;
|
public void | setKeepgenerated(boolean aBoolean)Sets the keepgenerated flag.
/* -------------------- */
/* GenIC options setter */
/* -------------------- */
keepgenerated = aBoolean;
|
public void | setKeepgeneric(boolean aBoolean)Sets the keepgeneric flag.
keepgeneric = aBoolean;
|
public void | setNocompil(boolean aBoolean)Sets the nocompil flag.
nocompil = aBoolean;
|
public void | setNogenic(boolean aBoolean)Sets the nogenic flag.
nogenic = aBoolean;
|
public void | setNovalidation(boolean aBoolean)Sets the novalidation flag.
novalidation = aBoolean;
|
public void | setOrb(java.lang.String aString)Sets the orb to construct classpath.
orb = aString;
|
public void | setRmicopts(java.lang.String aString)Set the options to pass to the rmi compiler.
rmicopts = aString;
|
public void | setSecpropag(boolean aBoolean)Sets the secpropag flag.
secpropag = aBoolean;
|
public void | setVerbose(boolean aBoolean)Sets the verbose flag.
verbose = aBoolean;
|
protected void | writeJar(java.lang.String baseName, java.io.File jarfile, java.util.Hashtable ejbFiles, java.lang.String publicId){@inheritDoc}.
// create the generic jar first
File genericJarFile = super.getVendorOutputJarFile(baseName);
super.writeJar(baseName, genericJarFile, ejbFiles, publicId);
// GenIC call on generic jar
addGenICGeneratedFiles(genericJarFile, ejbFiles);
// create the real jar
super.writeJar(baseName, getVendorOutputJarFile(baseName), ejbFiles, publicId);
if (!keepgeneric) {
log("Deleting generic JAR " + genericJarFile.toString(), Project.MSG_VERBOSE);
genericJarFile.delete();
}
|