donaldp 02/03/21 01:10:48
Modified: src/java/org/apache/avalon/phoenix/components/classloader
DefaultClassLoaderManager.java
Log:
Make class Contextualizable and retrieve the common classLoader from the
context. Use the common classloader as parent classLoader of all applications
Revision Changes Path
1.24 +34 -6
jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/classloader/DefaultClassLoaderManager.java
Index: DefaultClassLoaderManager.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/classloader/DefaultClassLoaderManager.java,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- DefaultClassLoaderManager.java 21 Mar 2002 08:18:33 -0000 1.23
+++ DefaultClassLoaderManager.java 21 Mar 2002 09:10:48 -0000 1.24
@@ -26,6 +26,9 @@
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.avalon.framework.context.Contextualizable;
+import org.apache.avalon.framework.context.ContextException;
+import org.apache.avalon.framework.context.Context;
import org.apache.avalon.phoenix.interfaces.ClassLoaderManager;
import org.apache.avalon.phoenix.interfaces.PackageRepository;
@@ -42,16 +45,45 @@
* <code>ClassLoader</code></p>
*
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
+ * @see ClassLoaderManager
*/
public class DefaultClassLoaderManager
extends AbstractLogEnabled
- implements ClassLoaderManager, Composable
+ implements ClassLoaderManager, Contextualizable, Composable
{
private static final Resources REZ =
ResourceManager.getPackageResources( DefaultClassLoaderManager.class
);
+ /**
+ * Component to manage "Optional Packages" aka
+ * Extensions to allow programs to declare dependencies
+ * on such extensions.
+ */
private PackageManager m_packageManager;
+ /**
+ * Parent ClassLoader for all applications
+ * aka as the "common" classloader.
+ */
+ private ClassLoader m_commonClassLoader;
+
+ /**
+ * Pass the Context to the Manager.
+ * It is expected that the there will be an entry
+ * <ul>
+ * <b>common.classloader</b> : ClassLoader shared betweeen
+ * container and applications</li>
+ * </ul>
+ *
+ * @param context the context
+ * @exception ContextException if context does not contain common
classloader
+ */
+ public void contextualize( Context context )
+ throws ContextException
+ {
+ m_commonClassLoader = (ClassLoader)context.get( "common.classloader"
);
+ }
+
public void compose( final ComponentManager componentManager )
throws ComponentException
{
@@ -98,9 +130,6 @@
getLogger().debug( message );
}
- //TODO: Determine parentClassLoader in a safer fashion
- final ClassLoader parentClassLoader =
Thread.currentThread().getContextClassLoader();
-
//If source is not a file then there will be no need to pass in
//a URLStreamHandler factory anyway so we can just pass in null
//SarURLStreamHandlerFactory factory = null;
@@ -110,9 +139,8 @@
//factory = new SarURLStreamHandlerFactory( archive );
//URL.setURLStreamHandlerFactory( factory );
//}
-
final PolicyClassLoader classLoader =
- new PolicyClassLoader( classPath, parentClassLoader, null,
policy );
+ new PolicyClassLoader( classPath, m_commonClassLoader, null,
policy );
setupLogger( classLoader, "classloader" );
for( int i = 0; i < extensions.length; i++ )
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>