costin      2003/03/11 22:33:37

  Modified:    catalina/src/share/org/apache/catalina/loader
                        WebappLoader.java
  Log:
  Few getters ( Remy: don't panic, I'm not changing the loader ! ).
  
  The array will collect the loaders that are set into the class loader
  and allow JMX to view the actual classpath ( if the loader is registered ).
  
  I also added a bit more info in case something is missing.
  
  Knowing the exact classpath of a webapp can be extremely usefull when debugging
  strange bugs...
  
  Revision  Changes    Path
  1.9       +48 -10    
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappLoader.java
  
  Index: WebappLoader.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappLoader.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- WebappLoader.java 8 Mar 2003 17:01:20 -0000       1.8
  +++ WebappLoader.java 12 Mar 2003 06:33:37 -0000      1.9
  @@ -1,7 +1,4 @@
   /*
  - * $Header$
  - * $Revision$
  - * $Date$
    *
    * ====================================================================
    *
  @@ -82,6 +79,7 @@
   import java.net.URLStreamHandlerFactory;
   import java.security.Permission;
   import java.util.jar.JarFile;
  +import java.util.ArrayList;
   import javax.servlet.ServletContext;
   import javax.naming.NamingException;
   import javax.naming.Binding;
  @@ -103,6 +101,8 @@
   import org.apache.catalina.Logger;
   import org.apache.catalina.util.LifecycleSupport;
   import org.apache.catalina.util.StringManager;
  +import org.apache.commons.logging.Log;
  +import org.apache.commons.logging.LogFactory;
   
   
   /**
  @@ -126,7 +126,6 @@
   public class WebappLoader
       implements Lifecycle, Loader, PropertyChangeListener, Runnable {
   
  -
       // ----------------------------------------------------------- Constructors
   
   
  @@ -271,6 +270,11 @@
       private String threadName = "WebappLoader";
   
   
  +    // Classpath set in the loader
  +    private String classpath=null;
  +
  +    // repositories that are set in the loader, for jmx
  +    private ArrayList loaderRepositories;
       // ------------------------------------------------------------- Properties
   
   
  @@ -347,6 +351,7 @@
   
       /**
        * Return the DefaultContext with which this Loader is associated.
  +     * XXX What is that ???
        */
       public DefaultContext getDefaultContext() {
   
  @@ -527,6 +532,7 @@
   
           if (started && (classLoader != null)) {
               classLoader.addRepository(repository);
  +            if( loaderRepositories != null ) loaderRepositories.add(repository);
               setClassPath();
           }
   
  @@ -549,6 +555,8 @@
           return ((String[])repositories.clone());
       }
   
  +    /** Extra repositories for this loader
  +     */
       public String getRepositoriesString() {
           StringBuffer sb=new StringBuffer();
           for( int i=0; i<repositories.length ; i++ ) {
  @@ -557,6 +565,30 @@
           return sb.toString();
       }
   
  +    public String[] getLoaderRepositories() {
  +        if( loaderRepositories==null ) return  null;
  +        String res[]=new String[ loaderRepositories.size()];
  +        loaderRepositories.toArray(res);
  +        return res;
  +    }
  +
  +    public String getLoaderRepositoriesString() {
  +        String repositories[]=getLoaderRepositories();
  +        StringBuffer sb=new StringBuffer();
  +        for( int i=0; i<repositories.length ; i++ ) {
  +            sb.append( repositories[i]).append(":");
  +        }
  +        return sb.toString();
  +    }
  +
  +    /** Classpath, as set in org.apache.catalina.jsp_classpath context
  +     * property
  +     *
  +     * @return
  +     */
  +    public String getClasspath() {
  +        return classpath;
  +    }
   
       /**
        * Has the internal repository associated with this Loader been modified,
  @@ -639,7 +671,6 @@
        * @exception LifecycleException if a lifecycle error occurs
        */
       public void start() throws LifecycleException {
  -
           // Validate and update our current component state
           if (started)
               throw new LifecycleException
  @@ -649,9 +680,10 @@
           lifecycle.fireLifecycleEvent(START_EVENT, null);
           started = true;
   
  -        if (container.getResources() == null)
  +        if (container.getResources() == null) {
  +            log.info("No resources for " + container);
               return;
  -
  +        }
           // Register a stream handler factory for the JNDI protocol
           URLStreamHandlerFactory streamHandlerFactory =
               new DirContextURLStreamHandlerFactory();
  @@ -964,11 +996,13 @@
           if (servletContext == null)
               return;
   
  +        loaderRepositories=new ArrayList();
           // Loading the work directory
           File workDir =
               (File) servletContext.getAttribute(Globals.WORK_DIR_ATTR);
  -        if (workDir == null)
  -            return;
  +        if (workDir == null) {
  +            log.info("No work dir for " + servletContext);
  +        }
   
           if( log.isDebugEnabled()) 
               log.debug(sm.getString("webappLoader.deploy", 
workDir.getAbsolutePath()));
  @@ -1016,6 +1050,7 @@
   
               // Adding the repository to the class loader
               classLoader.addRepository(classesPath + "/", classRepository);
  +            loaderRepositories.add(classesPath + "/" );
   
           }
   
  @@ -1079,6 +1114,7 @@
   
                       JarFile jarFile = new JarFile(destFile);
                       classLoader.addJar(filename, jarFile, destFile);
  +                    loaderRepositories.add( filename );
   
                   }
               } catch (NamingException e) {
  @@ -1151,6 +1187,8 @@
               loader = loader.getParent();
               layers++;
           }
  +
  +        this.classpath=classpath.toString();
   
           // Store the assembled class path as a servlet context attribute
           servletContext.setAttribute(Globals.CLASS_PATH_ATTR,
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to