remm 01/01/23 14:26:54 Modified: catalina/src/share/org/apache/naming/resources DirContextURLStreamHandler.java DirContextURLStreamHandlerFactory.java Log: - Added classloader binding. Will make resolving URLs like : jar:jndi:/WEB-INF/lib/tld_resource.jar!/META-INF/taglib.tld possible. Revision Changes Path 1.2 +80 -4 jakarta-tomcat-4.0/catalina/src/share/org/apache/naming/resources/DirContextURLStreamHandler.java Index: DirContextURLStreamHandler.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/naming/resources/DirContextURLStreamHandler.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- DirContextURLStreamHandler.java 2001/01/23 03:41:29 1.1 +++ DirContextURLStreamHandler.java 2001/01/23 22:26:50 1.2 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/naming/resources/DirContextURLStreamHandler.java,v 1.1 2001/01/23 03:41:29 remm Exp $ - * $Revision: 1.1 $ - * $Date: 2001/01/23 03:41:29 $ + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/naming/resources/DirContextURLStreamHandler.java,v 1.2 2001/01/23 22:26:50 remm Exp $ + * $Revision: 1.2 $ + * $Date: 2001/01/23 22:26:50 $ * * ==================================================================== * @@ -67,6 +67,7 @@ import java.net.URLConnection; import java.net.URLStreamHandler; import java.io.IOException; +import java.util.Hashtable; import javax.naming.NamingException; import javax.naming.directory.DirContext; @@ -74,7 +75,7 @@ * Stream handler to a JNDI directory context. * * @author <a href="mailto:[EMAIL PROTECTED]">Remy Maucherat</a> - * @version $Revision: 1.1 $ + * @version $Revision: 1.2 $ */ public class DirContextURLStreamHandler extends URLStreamHandler { @@ -83,18 +84,31 @@ // ----------------------------------------------------------- Constructors + public DirContextURLStreamHandler() { + } + + public DirContextURLStreamHandler(DirContext context) { this.context = context; } + // -------------------------------------------------------------- Variables + + + /** + * Bindings class loader - directory context. Keyed by CL id. + */ + private static Hashtable clBindings = new Hashtable(); + + // ----------------------------------------------------- Instance Variables /** * Directory context. */ - protected DirContext context; + protected DirContext context = null; // ------------------------------------------------------------- Properties @@ -109,7 +123,69 @@ */ protected URLConnection openConnection(URL u) throws IOException { - return new DirContextURLConnection(context, u); + DirContext currentContext = this.context; + if (currentContext == null) + currentContext = get(); + return new DirContextURLConnection(currentContext, u); + } + + + // --------------------------------------------------------- Public Methods + + + /** + * Binds a directory context to a class loader. + */ + public static void bind(DirContext dirContext) { + ClassLoader currentCL = + Thread.currentThread().getContextClassLoader(); + if (currentCL != null) + clBindings.put(currentCL, dirContext); + } + + + /** + * Unbinds a directory context to a class loader. + */ + public static void unbind() { + ClassLoader currentCL = + Thread.currentThread().getContextClassLoader(); + if (currentCL != null) + clBindings.remove(currentCL); + } + + + /** + * Get the bound context. + */ + public static DirContext get() { + ClassLoader currentCL = + Thread.currentThread().getContextClassLoader(); + return (DirContext) clBindings.get(currentCL); + } + + + /** + * Binds a directory context to a class loader. + */ + public static void bind(ClassLoader cl, DirContext dirContext) { + clBindings.put(cl, dirContext); + } + + + /** + * Unbinds a directory context to a class loader. + */ + public static void unbind(ClassLoader cl) { + clBindings.remove(cl); + } + + + /** + * Get the bound context. + */ + public static DirContext get(ClassLoader cl) { + return (DirContext) clBindings.get(cl); } 1.2 +5 -11 jakarta-tomcat-4.0/catalina/src/share/org/apache/naming/resources/DirContextURLStreamHandlerFactory.java Index: DirContextURLStreamHandlerFactory.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/naming/resources/DirContextURLStreamHandlerFactory.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- DirContextURLStreamHandlerFactory.java 2001/01/23 03:41:29 1.1 +++ DirContextURLStreamHandlerFactory.java 2001/01/23 22:26:51 1.2 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/naming/resources/DirContextURLStreamHandlerFactory.java,v 1.1 2001/01/23 03:41:29 remm Exp $ - * $Revision: 1.1 $ - * $Date: 2001/01/23 03:41:29 $ + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/naming/resources/DirContextURLStreamHandlerFactory.java,v 1.2 2001/01/23 22:26:51 remm Exp $ + * $Revision: 1.2 $ + * $Date: 2001/01/23 22:26:51 $ * * ==================================================================== * @@ -63,6 +63,7 @@ package org.apache.naming.resources; +import java.util.Hashtable; import java.net.URLStreamHandler; import java.net.URLStreamHandlerFactory; import java.io.IOException; @@ -73,7 +74,7 @@ * Factory for Stream handlers to a JNDI directory context. * * @author <a href="mailto:[EMAIL PROTECTED]">Remy Maucherat</a> - * @version $Revision: 1.1 $ + * @version $Revision: 1.2 $ */ public class DirContextURLStreamHandlerFactory implements URLStreamHandlerFactory { @@ -82,20 +83,13 @@ // ----------------------------------------------------------- Constructors - public DirContextURLStreamHandlerFactory(DirContext context) { - this.context = context; + public DirContextURLStreamHandlerFactory() { } // ----------------------------------------------------- Instance Variables - /** - * Directory context. - */ - protected DirContext context; - - // ------------------------------------------------------------- Properties @@ -112,7 +106,7 @@ */ public URLStreamHandler createURLStreamHandler(String protocol) { if (protocol.equals("jndi")) { - return new DirContextURLStreamHandler(context); + return new DirContextURLStreamHandler(); } else { return null; } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, email: [EMAIL PROTECTED]