FileDocCategorySizeDatePackage
WebVerifier.javaAPI DocGlassfish v2 API9695Fri May 04 22:34:18 BST 2007com.sun.enterprise.tools.verifier.web

WebVerifier

public class WebVerifier extends com.sun.enterprise.tools.verifier.BaseVerifier
Responsible for verfying the j2ee war archive.
author
Vikas Awasthi

Fields Summary
private com.sun.enterprise.deployment.WebBundleDescriptor
webd
private String
classPath
private boolean
isASMode
private File
jspOutDir
Constructors Summary
public WebVerifier(com.sun.enterprise.tools.verifier.FrameworkContext frameworkContext, com.sun.enterprise.deployment.WebBundleDescriptor webd)


      
                         
        this.frameworkContext = frameworkContext;
        this.webd = webd;
        this.isASMode = !frameworkContext.isPortabilityMode();
    
Methods Summary
protected java.lang.ClassLoadercreateClassLoader()
Creates the ClassLoader for the war archive.

return
ClassLoader
throws
IOException

        EJBClassLoader ejbClassLoader = new EJBClassLoader(webd.getClassLoader());
        ejbClassLoader.appendURL(jspOutDir);
        return ejbClassLoader;
    
protected voidcreateClosureCompiler()
creates the ClosureCompiler for the web module and sets it to the verifier context. This is used to compute the closure on the classes used in the web archive.

throws
IOException

        String specVer = SpecVersionMapper.getWebAppVersion(
                frameworkContext.getJavaEEVersion());
        Object arg = (isASMode)?context.getClassLoader():(Object)getClassPath();
        WebClosureCompiler cc = new WebClosureCompiler(specVer,
                ClassFileLoaderFactory.newInstance(new Object[]{arg}));
        context.setClosureCompiler(cc);
    
protected java.lang.StringgetArchiveUri()

return
name of the war archive

        return FileUtils.makeFriendlyFileName(webd.getModuleDescriptor().getArchiveUri());
    
protected java.lang.StringgetClassPath()
Creates and returns the class path associated with the web archive. Uses the exploded location of the archive for generating the classpath.

return
entire classpath string
throws
IOException

        if (classPath != null) return classPath;

        if(isASMode)
            return (classPath = getClassPath(frameworkContext.getClassPath()) + 
                                File.pathSeparator + 
                                jspOutDir.getAbsolutePath());

        String cp;
        if (!webd.getModuleDescriptor().isStandalone()) {
            //take the cp from the enclosing ear file
            String ear_uri = frameworkContext.getExplodedArchivePath();
            File ear = new File(ear_uri);
            assert(ear.isDirectory());
            String earCP = ClassPathBuilder.buildClassPathForEar(ear);
            String libdir = webd.getApplication().getLibraryDirectory();
            if (libdir!=null) {
                earCP = getLibdirClasspath(ear_uri, libdir) + earCP;
            }
            String module_uri = webd.getModuleDescriptor().getArchiveUri();//this is a relative path
            File module = new File(module_uri);
            assert(module.isFile() && !module.isAbsolute());
            // exploder creates the directory replacing all dots by '_'
            File explodedModuleDir = new File(ear_uri,
                    FileUtils.makeFriendlyFileName(module_uri));
            String moduleCP = ClassPathBuilder.buildClassPathForWar(
                    explodedModuleDir);
            cp = moduleCP + File.pathSeparator + earCP;
        } else {
            String module_uri = frameworkContext.getExplodedArchivePath();//this is an absolute path
            File module = new File(module_uri);
            assert(module.isDirectory() && module.isAbsolute());
            cp = ClassPathBuilder.buildClassPathForWar(module);
        }
        String as_lib_root=System.getProperty("com.sun.aas.installRoot")+File.separator+"lib"+File.separator;
        if (frameworkContext.getJavaEEVersion().compareTo("5") >= 0) { // NOI18N
            cp += File.pathSeparator+as_lib_root+"jsf-impl.jar"+File.pathSeparator+ // NOI18N
                  as_lib_root+"appserv-jstl.jar"+File.pathSeparator; // NOI18N
        }
        cp = cp + File.pathSeparator + jspOutDir.getAbsolutePath();
        return (classPath = cp);
    
protected java.lang.String[]getDDString()

return
the array of deployment descriptor names

        String dd[] = {"WEB-INF/sun-web.xml", "WEB-INF/web.xml", // NOI18N
                       "WEB-INF/webservices.xml"}; // NOI18N
        return dd;
    
public com.sun.enterprise.deployment.DescriptorgetDescriptor()

return
web bundle descriptor

        return webd;
    
private java.io.FilegetJspOutDir()
If precompilejsp is set in the backend then return the jspOutput directory set in the frameworkContext. Otherwise create a new unique directory and return it.

return
the output directory where compiled JSPs will be put.

        // frameworkContext.getJspOutDir() will be non-null only when the 
        // call is from deployment backend and precompilejsp is set
        File jspOutDir = frameworkContext.getJspOutDir();
        if(jspOutDir != null) {
            ModuleDescriptor moduleDescriptor = webd.getModuleDescriptor();
            if(moduleDescriptor.isStandalone())
                return jspOutDir;
            return new File(jspOutDir, FileUtils.makeFriendlyFilename(moduleDescriptor.getArchiveUri()));
        }
        Random random=new Random();
        String prefix=System.getProperty("java.io.tmpdir")+File.separator+".jspc";
        do{
            float f=random.nextFloat();
            String outDirPath=new String(prefix+f);
            File out=new File(outDirPath);
            if(out.mkdirs()) 
                return out;
        }while(true);
    
public voidverify()
Responsible for running web based verifier tests on the the web archive. Called from runVerifier in {@link BaseVerifier} class.

throws
Exception

        if (areTestsNotRequired(frameworkContext.isWeb()) &&
                areTestsNotRequired(frameworkContext.isWebServices()) &&
                areTestsNotRequired(frameworkContext.isWebServicesClient()) &&
                areTestsNotRequired(frameworkContext.isPersistenceUnits()))
            return;

        jspOutDir = getJspOutDir();
        try {
            preVerification();
            context.setOutDir(jspOutDir);
            createClosureCompiler();
            verify(webd, new WebCheckMgrImpl(frameworkContext));
        } finally {
            // frameworkContext.getJspOutDir() will be non-null only when the 
            // call is from deployment backend and precompilejsp is set
            if(frameworkContext.getJspOutDir()==null)
                FileUtil.deleteDir(jspOutDir);
        }