[Jboss-cvs] JBossAS SVN: r55183 - projects/microcontainer/trunk/container/src/main/org/jboss/vfs/classloading

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Aug 4 10:33:18 EDT 2006


Author: scott.stark at jboss.org
Date: 2006-08-04 10:33:16 -0400 (Fri, 04 Aug 2006)
New Revision: 55183

Modified:
   projects/microcontainer/trunk/container/src/main/org/jboss/vfs/classloading/SecurityActions.java
   projects/microcontainer/trunk/container/src/main/org/jboss/vfs/classloading/VFSClassLoader.java
   projects/microcontainer/trunk/container/src/main/org/jboss/vfs/classloading/VFSClassLoaderFactory.java
Log:
Add support for passing in the parent class loader

Modified: projects/microcontainer/trunk/container/src/main/org/jboss/vfs/classloading/SecurityActions.java
===================================================================
--- projects/microcontainer/trunk/container/src/main/org/jboss/vfs/classloading/SecurityActions.java	2006-08-04 13:43:49 UTC (rev 55182)
+++ projects/microcontainer/trunk/container/src/main/org/jboss/vfs/classloading/SecurityActions.java	2006-08-04 14:33:16 UTC (rev 55183)
@@ -28,14 +28,14 @@
 import org.jboss.vfs.spi.ReadOnlyVFS;
 
 /**
- Package priviledged actions
- @author Scott.Stark at jboss.org
- @version $Revision$
+ * Package priviledged actions
+ * 
+ * @author Scott.Stark at jboss.org
+ * @version $Revision$
  */
 class SecurityActions
 {
-   static PrivilegedAction<Policy> getPolicyAction = new PrivilegedAction<Policy>()
-   {
+   static PrivilegedAction<Policy> getPolicyAction = new PrivilegedAction<Policy>() {
       public Policy run()
       {
          return Policy.getPolicy();
@@ -44,62 +44,87 @@
 
    interface ClassLoaderActions
    {
-      ClassLoaderActions PRIVILEGED = new ClassLoaderActions()
-      {
-         public VFSClassLoader newClassLoader(final String[] paths, final ReadOnlyVFS vfs)
+      ClassLoaderActions PRIVILEGED = new ClassLoaderActions() {
+         public VFSClassLoader newClassLoader(final String[] paths,
+               final ReadOnlyVFS vfs, final ClassLoader parent)
          {
-            PrivilegedAction<VFSClassLoader> action = new PrivilegedAction<VFSClassLoader>()
-            {
+            PrivilegedAction<VFSClassLoader> action = new PrivilegedAction<VFSClassLoader>() {
                public VFSClassLoader run()
                {
-                  return new VFSClassLoader(paths, vfs);
+                  ClassLoader theParent = parent;
+                  if (parent == null)
+                     theParent = Thread.currentThread().getContextClassLoader();
+                  return new VFSClassLoader(paths, vfs, theParent);
                }
             };
             return AccessController.doPrivileged(action);
          }
+
          public Policy getPolicy()
          {
             return AccessController.doPrivileged(getPolicyAction);
          }
       };
 
-      ClassLoaderActions NON_PRIVILEGED = new ClassLoaderActions()
-      {
-         public VFSClassLoader newClassLoader(final String[] paths, final ReadOnlyVFS vfs)
+      ClassLoaderActions NON_PRIVILEGED = new ClassLoaderActions() {
+         public VFSClassLoader newClassLoader(final String[] paths,
+               final ReadOnlyVFS vfs, final ClassLoader parent)
          {
-            return new VFSClassLoader(paths, vfs);
+            ClassLoader theParent = parent;
+            if (parent == null)
+               theParent = Thread.currentThread().getContextClassLoader();
+            return new VFSClassLoader(paths, vfs, theParent);
          }
+
          public Policy getPolicy()
          {
             return Policy.getPolicy();
          }
       };
 
-      VFSClassLoader newClassLoader(final String[] paths, final ReadOnlyVFS vfs);
+      VFSClassLoader newClassLoader(final String[] paths, final ReadOnlyVFS vfs, ClassLoader parent);
+
       Policy getPolicy();
    }
 
-   static VFSClassLoader newClassLoader(final String[] paths, final ReadOnlyVFS vfs)
+   static VFSClassLoader newClassLoader(final String[] paths,
+         final ReadOnlyVFS vfs)
    {
-      if(System.getSecurityManager() == null)
+      if (System.getSecurityManager() == null)
       {
-         return ClassLoaderActions.NON_PRIVILEGED.newClassLoader(paths, vfs);
+         return ClassLoaderActions.NON_PRIVILEGED.newClassLoader(paths, vfs, null);
       }
       else
       {
-         return ClassLoaderActions.PRIVILEGED.newClassLoader(paths, vfs);
+         return ClassLoaderActions.PRIVILEGED.newClassLoader(paths, vfs, null);
       }
    }
+
+   static VFSClassLoader newClassLoader(final String[] paths,
+         final ReadOnlyVFS vfs, ClassLoader parent)
+   {
+      if (System.getSecurityManager() == null)
+      {
+         return ClassLoaderActions.NON_PRIVILEGED.newClassLoader(paths, vfs,
+               parent);
+      }
+      else
+      {
+         return ClassLoaderActions.PRIVILEGED
+               .newClassLoader(paths, vfs, parent);
+      }
+   }
+
    static Policy getPolicy()
    {
-      if(System.getSecurityManager() == null)
+      if (System.getSecurityManager() == null)
       {
          return ClassLoaderActions.NON_PRIVILEGED.getPolicy();
       }
       else
       {
          return ClassLoaderActions.PRIVILEGED.getPolicy();
-      }      
+      }
    }
 
 }

Modified: projects/microcontainer/trunk/container/src/main/org/jboss/vfs/classloading/VFSClassLoader.java
===================================================================
--- projects/microcontainer/trunk/container/src/main/org/jboss/vfs/classloading/VFSClassLoader.java	2006-08-04 13:43:49 UTC (rev 55182)
+++ projects/microcontainer/trunk/container/src/main/org/jboss/vfs/classloading/VFSClassLoader.java	2006-08-04 14:33:16 UTC (rev 55183)
@@ -51,15 +51,29 @@
    protected ArrayList<ClassPathVFS> classpath = new ArrayList<ClassPathVFS>();
 
    /**
-    * Create a class loader given a search path and VFS
+    * Create a class loader given a search path VFS, and default parent class
+    * loader.
     * @param searchCtxs - the paths from the VFS that make up the class loader path
     * @param vfs - the VFS used to resolve and load classes and resources
     */
    public VFSClassLoader(String[] searchCtxs, ReadOnlyVFS vfs)
    {
-     ClassPathVFS cp  = new ClassPathVFS(searchCtxs, vfs);
+      ClassPathVFS cp  = new ClassPathVFS(searchCtxs, vfs);
       classpath.add(cp);
    }
+   /**
+    * Create a class loader given a search path VFS, and given parent class
+    * loader.
+    * @param searchCtxs - the paths from the VFS that make up the class loader path
+    * @param vfs - the VFS used to resolve and load classes and resources
+    * @param parent - the parent class loader to use
+    */
+   public VFSClassLoader(String[] searchCtxs, ReadOnlyVFS vfs, ClassLoader parent)
+   {
+      super(parent);
+      ClassPathVFS cp  = new ClassPathVFS(searchCtxs, vfs);
+      classpath.add(cp);
+   }
 
    /**
     * Find and define the given java class

Modified: projects/microcontainer/trunk/container/src/main/org/jboss/vfs/classloading/VFSClassLoaderFactory.java
===================================================================
--- projects/microcontainer/trunk/container/src/main/org/jboss/vfs/classloading/VFSClassLoaderFactory.java	2006-08-04 13:43:49 UTC (rev 55182)
+++ projects/microcontainer/trunk/container/src/main/org/jboss/vfs/classloading/VFSClassLoaderFactory.java	2006-08-04 14:33:16 UTC (rev 55183)
@@ -40,4 +40,8 @@
    {
       return SecurityActions.newClassLoader(paths, vfs);
    }
+   public static VFSClassLoader newClassLoader(String[] paths, ReadOnlyVFS vfs, ClassLoader parent)
+   {
+      return SecurityActions.newClassLoader(paths, vfs, parent);
+   }
 }




More information about the jboss-cvs-commits mailing list