FileDocCategorySizeDatePackage
JarNotFound.javaAPI DocGlassfish v2 API7960Thu Jul 19 11:30:28 BST 2007com.sun.enterprise.tools.verifier.tests.persistence

JarNotFound

public class JarNotFound extends com.sun.enterprise.tools.verifier.tests.VerifierTest implements com.sun.enterprise.tools.verifier.tests.VerifierCheck
jar files specified using element in persistence.xml should be present in the archive.
author
Sanjeeb.Sahoo@Sun.COM

Fields Summary
Constructors Summary
Methods Summary
public com.sun.enterprise.tools.verifier.Resultcheck(com.sun.enterprise.deployment.Descriptor descriptor)

        Result result = getInitializedResult();
        result.setStatus(Result.PASSED);
        addErrorDetails(result,
                getVerifierContext().getComponentNameConstructor());
        PersistenceUnitDescriptor pu = PersistenceUnitDescriptor.class.cast(
                descriptor);
        File absolutePURootFile = getAbsolutePuRootFile(pu);
        logger.fine("Absolute PU Root: " + absolutePURootFile);
        String absolutePuRoot = absolutePURootFile.getAbsolutePath();
        List<String> jarFileNames = new ArrayList<String>(pu.getJarFiles());
        for (String jarFileName : jarFileNames) {
            // ASSUMPTION:
            // Because of the way deployment changes names of directories etc.
            // it is very difficult to back calculate path names. So,
            // the following code assumes user is specifying valid URIs.

            // in the xml, names always use '/'
            String nativeJarFileName = jarFileName.replace('/",
                    File.separatorChar);
            final File parentFile = new File(absolutePuRoot).getParentFile();
            // only components are exploded, hence first look for original archives.
            File jarFile = new File(parentFile, nativeJarFileName);
            if (!jarFile.exists()) {
                // if the referenced jar is itself a component, then
                // it might have been exploded, hence let's see
                // if that is the case.

                // let's calculate the name component and path component from this URI
                // e.g. if URI is ../../foo_bar/my-ejb.jar,
                // name component is foo_bar/my-ejb.jar and
                // path component is ../../
                // These are my own notions used here.
                String pathComponent = "";
                String nameComponent = jarFileName;
                if(jarFileName.lastIndexOf("../") != -1) {
                    final int separatorIndex = jarFileName.lastIndexOf("../")+3;
                    pathComponent = jarFileName.substring(0,separatorIndex);
                    nameComponent = jarFileName.substring(separatorIndex);
                }
                logger.fine("For jar-file="+ jarFileName+ ", " +
                        "pathComponent=" +pathComponent +
                        ", nameComponent=" + nameComponent);
                File parentPath = new File(parentFile, pathComponent);
                jarFile = new File(parentPath, DeploymentUtils.
                        getRelativeEmbeddedModulePath(parentPath.
                        getAbsolutePath(), nameComponent));

                if (!jarFile.exists()) {
                    result.failed(smh.getLocalString(
                            getClass().getName() + "failed",
                            "[ {0} ] specified in persistence.xml does not exist in the application.",
                            new Object[]{jarFileName}));
                }
            }
        }
        return result;
    
private java.lang.StringgetAbsolutePuRoot(java.lang.String applicationLocation, com.sun.enterprise.deployment.PersistenceUnitDescriptor persistenceUnitDescriptor)
This method calculates the absolute path of the root of a PU. Absolute path is not the path with regards to root of file system. It is the path from the root of the Java EE application this persistence unit belongs to. Returned path always uses '/' as path separator.

param
applicationLocation absolute path of application root
param
persistenceUnitDescriptor
return
the absolute path of the root of this persistence unit

        RootDeploymentDescriptor rootDD = persistenceUnitDescriptor.getParent().                getParent();        
        String puRoot = persistenceUnitDescriptor.getPuRoot();
        if(rootDD.isApplication()){
            return puRoot;
        } else {
            ModuleDescriptor module = BundleDescriptor.class.cast(rootDD).
                    getModuleDescriptor();
            if(module.isStandalone()) {
                return puRoot;
            } else {
                final String moduleLocation =
                        DeploymentUtils.getRelativeEmbeddedModulePath(
                        applicationLocation, module.getArchiveUri());
                return moduleLocation + '/" + puRoot; // see we always '/'
            }
        }
    
private java.io.FilegetAbsolutePuRootFile(com.sun.enterprise.deployment.PersistenceUnitDescriptor persistenceUnitDescriptor)

        final String applicationLocation =
                getVerifierContext().getAbstractArchive().getArchiveUri();
        File absolutePuRootFile = new File(applicationLocation,
                getAbsolutePuRoot(applicationLocation, 
                persistenceUnitDescriptor).replace('/", File.separatorChar));
        if (!absolutePuRootFile.exists()) {
            throw new RuntimeException(
                    absolutePuRootFile.getAbsolutePath() + " does not exist!");
        }
        return absolutePuRootFile;