⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jonasdeploymenttool.java

📁 Use the links below to download a source distribution of Ant from one of our mirrors. It is good pra
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            // 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;    }    /** {@inheritDoc}. */    protected String getJarBaseName(String descriptorFileName) {        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;    }    /** {@inheritDoc}. */    protected void registerKnownDTDs(DescriptorHandler handler) {        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);    }    /**     * Add to the given hashtable all the file generated by GenIC.     *     * @param genericJarFile jar file.     * @param ejbFiles the hashtable.     */    private void addGenICGeneratedFiles(        File genericJarFile, Hashtable ejbFiles) {        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);    }    /**     * Get the GenIC class name to use in the given classpath.     *     * @param classpath classpath where the GenIC class must be searched.     * @return the GenIC class name. Return <code>null</code> if the class name     * cannot be found.     */    String getGenicClassName(Path 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;    }    /**     * Verify the configuration.     * @param descriptorFileName the name of the descriptor file.     * @param saxParser          not used.     * @throws BuildException if there is an error.     */    protected void checkConfiguration(String descriptorFileName,                      SAXParser saxParser) throws BuildException {        // 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.");        }    }    /* ----------------------------------------------------------------------------------- */    /* utilitary methods */    /* ----------------------------------------------------------------------------------- */    /**     * Create a temporary directory for GenIC output.     *     * @return the temp directory.     * @throws BuildException if a temp directory cannot be created.     */    private File createTempDir() throws IOException {        File tmpDir = File.createTempFile("genic", null, null);        tmpDir.delete();        if (!tmpDir.mkdir()) {            throw new IOException("Cannot create the temporary directory '" + tmpDir + "'.");        }        return tmpDir;    }    /**     * Delete a file. If the file is a directory, delete recursivly all the     * files inside.     *     * @param aFile file to delete.     */    private void deleteAllFiles(File aFile) {        if (aFile.isDirectory()) {            File[] someFiles = aFile.listFiles();            for (int i = 0; i < someFiles.length; i++) {                deleteAllFiles(someFiles[i]);            }        }        aFile.delete();    }    /**     * Add a file to the a given hashtable. If the file is a directory, add     * recursivly all the files inside to the hashtable.     *     * @param file the file to add.     * @param rootDir the current sub-directory to scan.     * @param hashtable the hashtable where to add the files.     */    private void addAllFiles(File file, String rootDir, Hashtable 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);        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -