[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