dblevins    2005/07/24 06:48:53

  Modified:    modules/core/src/java/org/openejb/loader
                        TomcatClassPath.java WebAppClassPath.java
  Log:

  Encapsulated variables in ServerMetaData
  Put in support for guessing Tomcat4 vs Tomcat5
  
  Revision  Changes    Path
  1.3       +44 -40    
openejb1/modules/core/src/java/org/openejb/loader/TomcatClassPath.java
  
  Index: TomcatClassPath.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb1/modules/core/src/java/org/openejb/loader/TomcatClassPath.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TomcatClassPath.java      12 Jul 2005 23:51:16 -0000      1.2
  +++ TomcatClassPath.java      24 Jul 2005 10:48:53 -0000      1.3
  @@ -46,11 +46,11 @@
   package org.openejb.loader;
   
   import java.io.File;
  +import java.lang.reflect.Method;
   import java.net.URL;
   import java.net.URLClassLoader;
   import java.security.AccessController;
   import java.security.PrivilegedAction;
  -import java.lang.reflect.Method;
   
   /**
    * @version $Revision$ $Date$
  @@ -63,17 +63,31 @@
       /**
        * The Tomcat Common ClassLoader
        */
  -    private ClassLoader tomcatLoader;
  +    private final ClassLoader tomcatLoader;
   
       /**
        * The addRepository(String jar) method of the Tomcat Common ClassLoader
        */
  -    private java.lang.reflect.Method addRepositoryMethod;
  +    private Method addRepositoryMethod;
  +    private Method addURLMethod;
  +
  +    public TomcatClassPath() {
  +        tomcatLoader = getCommonLoader(getContextClassLoader()).getParent();
  +        try {
  +            addRepositoryMethod = getAddRepositoryMethod();
  +        } catch (Exception tomcat4Exception) {
  +            // Must be tomcat 5
  +            try {
  +                addURLMethod = getAddURLMethod();
  +            } catch (Exception tomcat5Exception) {
  +                throw new RuntimeException("Failed accessing classloader for 
Tomcat 4 or 5", tomcat5Exception);
  +            }
  +        }
  +    }
   
       public void addJarsToPath(File dir) throws Exception {
           String[] jarNames = dir.list(new java.io.FilenameFilter() {
               public boolean accept(File dir, String name) {
  -                //System.out.println("FILE "+name);
                   return (name.endsWith(".jar") || name.endsWith(".zip"));
               }
           });
  @@ -89,11 +103,10 @@
       }
   
       public ClassLoader getClassLoader() {
  -        return getCommonLoader();
  +        return tomcatLoader;
       }
   
       public void addJarToPath(URL jar) throws Exception {
  -        //System.out.println("[|] TOMCAT "+jar.toExternalForm());
           this._addJarToPath(jar);
           rebuild();
       }
  @@ -104,12 +117,16 @@
       }
   
       public void addRepository(String path) throws Exception {
  -        this.getAddRepositoryMethod().invoke(getCommonLoader(), new Object[] 
{ path });
  +        if (addRepositoryMethod != null){
  +            addRepositoryMethod.invoke(getClassLoader(), new Object[]{path});
  +        } else {
  +            addURLMethod.invoke(getClassLoader(), new Object[]{new 
File(path).toURL()});
  +        }
       }
   
  -    private void rebuild() {
  +    protected void rebuild() {
           try {
  -            sun.misc.URLClassPath cp = getURLClassPath((URLClassLoader) 
getCommonLoader());
  +            sun.misc.URLClassPath cp = getURLClassPath((URLClassLoader) 
getClassLoader());
               URL[] urls = cp.getURLs();
               //for (int i=0; i < urls.length; i++){
               //    System.out.println(urls[i].toExternalForm());
  @@ -136,13 +153,6 @@
   
       }
   
  -    protected ClassLoader getCommonLoader() {
  -        if (tomcatLoader == null) {
  -            tomcatLoader = 
this.getCommonLoader(getContextClassLoader()).getParent();
  -        }
  -        return tomcatLoader;
  -    }
  -
       private ClassLoader getCommonLoader(ClassLoader loader) {
           if 
(loader.getClass().getName().equals("org.apache.catalina.loader.StandardClassLoader"))
 {
               return loader;
  @@ -159,30 +169,24 @@
        *
        * @return URLClassLoader.addURL method instance
        */
  -    private java.lang.reflect.Method _getAddRepositoryMethod() throws 
Exception {
  -        if (addRepositoryMethod == null) {
  -
  -            final Class clazz = URLClassLoader.class;
  -
  -            this.addRepositoryMethod = (java.lang.reflect.Method) 
AccessController
  -                    .doPrivileged(new PrivilegedAction() {
  -                        public Object run() {
  -                            java.lang.reflect.Method method = null;
  -                            try {
  -                                method = clazz.getDeclaredMethod("addURL", 
new Class[] { URL.class });
  -                                method.setAccessible(true);
  -                            } catch (Exception e2) {
  -                                e2.printStackTrace();
  -                            }
  -                            return method;
  -                        }
  -                    });
  -        }
  -
  -        return addRepositoryMethod;
  +    private java.lang.reflect.Method getAddURLMethod() throws Exception {
  +        return (java.lang.reflect.Method) AccessController.doPrivileged(new 
PrivilegedAction() {
  +            public Object run() {
  +                java.lang.reflect.Method method = null;
  +                try {
  +                    Class clazz = URLClassLoader.class;
  +                    method = clazz.getDeclaredMethod("addURL", new 
Class[]{URL.class});
  +                    method.setAccessible(true);
  +                    return method;
  +                } catch (Exception e2) {
  +                    e2.printStackTrace();
  +                }
  +                return method;
  +            }
  +        });
       }
   
  -    protected Method getAddRepositoryMethod() throws Exception {
  +    private Method getAddRepositoryMethod() throws Exception {
           return (Method) AccessController.doPrivileged(new PrivilegedAction() 
{
               public Object run() {
                   Method method = null;
  
  
  
  1.3       +9 -9      
openejb1/modules/core/src/java/org/openejb/loader/WebAppClassPath.java
  
  Index: WebAppClassPath.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb1/modules/core/src/java/org/openejb/loader/WebAppClassPath.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- WebAppClassPath.java      12 Jul 2005 23:51:16 -0000      1.2
  +++ WebAppClassPath.java      24 Jul 2005 10:48:53 -0000      1.3
  @@ -49,16 +49,16 @@
    * @version $Revision$ $Date$
    */
   public class WebAppClassPath extends TomcatClassPath {
  -    ClassLoader webappLoader;
  +    private final ClassLoader webappLoader;
   
  -    public ClassLoader getClassLoader() {
  -        return getCommonLoader();
  +    public WebAppClassPath() {
  +        this.webappLoader = getContextClassLoader();
       }
   
  -    protected ClassLoader getCommonLoader() {
  -        if (webappLoader == null) {
  -            webappLoader = getContextClassLoader();
  -        }
  +    public ClassLoader getClassLoader() {
           return webappLoader;
  +    }
  +
  +    protected void rebuild() {
       }
   }
  
  
  

Reply via email to