remm 00/11/10 17:47:48 Modified: catalina/src/share/org/apache/naming ContextBindings.java LocalStrings.properties SelectorContext.java Log: - Adds the capability to bind the class loader associated with the current thread to a Context. - The current thread binding will still be checked first. Revision Changes Path 1.2 +112 -7 jakarta-tomcat-4.0/catalina/src/share/org/apache/naming/ContextBindings.java Index: ContextBindings.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/naming/ContextBindings.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- ContextBindings.java 2000/11/02 06:14:16 1.1 +++ ContextBindings.java 2000/11/11 01:47:47 1.2 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/naming/ContextBindings.java,v 1.1 2000/11/02 06:14:16 remm Exp $ - * $Revision: 1.1 $ - * $Date: 2000/11/02 06:14:16 $ + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/naming/ContextBindings.java,v 1.2 2000/11/11 01:47:47 remm Exp $ + * $Revision: 1.2 $ + * $Date: 2000/11/11 01:47:47 $ * * ==================================================================== * @@ -76,7 +76,7 @@ * </ul> * * @author Remy Maucherat - * @version $Revision: 1.1 $ $Date: 2000/11/02 06:14:16 $ + * @version $Revision: 1.2 $ $Date: 2000/11/11 01:47:47 $ */ public class ContextBindings { @@ -86,7 +86,7 @@ /** - * Bindings Catalina context name - naming context. Keyed by context name. + * Bindings name - naming context. Keyed by name. */ private static Hashtable contextNameBindings = new Hashtable(); @@ -104,6 +104,18 @@ /** + * Bindings class loader - naming context. Keyed by CL id. + */ + private static Hashtable clBindings = new Hashtable(); + + + /** + * Bindings class loader - name. Keyed by CL id. + */ + private static Hashtable clNameBindings = new Hashtable(); + + + /** * The string manager for this package. */ protected static StringManager sm = @@ -174,7 +186,6 @@ * Binds a naming context to a thread. * * @param name Name of the context - * @param token Security token */ public static void bindThread(String name) throws NamingException { @@ -186,6 +197,7 @@ * Binds a naming context to a thread. * * @param name Name of the context + * @param token Security token */ public static void bindThread(String name, Object token) throws NamingException { @@ -193,8 +205,7 @@ Context context = (Context) contextNameBindings.get(name); if (context == null) throw new NamingException - (sm.getString("contextBindings.unknownContext", - name)); + (sm.getString("contextBindings.unknownContext", name)); threadBindings.put(Thread.currentThread(), context); threadNameBindings.put(Thread.currentThread(), name); } @@ -258,6 +269,100 @@ */ public static boolean isThreadBound() { return (threadBindings.containsKey(Thread.currentThread())); + } + + + /** + * Binds a naming context to a class loader. + * + * @param name Name of the context + */ + public static void bindClassLoader(String name) + throws NamingException { + bindClassLoader(name, null); + } + + + /** + * Binds a naming context to a thread. + * + * @param name Name of the context + * @param token Security token + */ + public static void bindClassLoader(String name, Object token) + throws NamingException { + if (ContextAccessController.checkSecurityToken(name, token)) { + Context context = (Context) contextNameBindings.get(name); + if (context == null) + throw new NamingException + (sm.getString("contextBindings.unknownContext", name)); + clBindings.put(Thread.currentThread().getContextClassLoader(), + context); + clNameBindings.put(Thread.currentThread().getContextClassLoader(), + name); + } + } + + + /** + * Unbinds a naming context to a class loader. + * + * @param name Name of the context + */ + public static void unbindClassLoader(String name) { + unbindClassLoader(null); + } + + + /** + * Unbinds a naming context to a class loader. + * + * @param name Name of the context + * @param token Security token + */ + public static void unbindClassLoader(String name, Object token) { + if (ContextAccessController.checkSecurityToken(name, token)) { + clBindings.remove(Thread.currentThread().getContextClassLoader()); + clNameBindings.remove + (Thread.currentThread().getContextClassLoader()); + } + } + + + /** + * Retrieves the naming context bound to a class loader. + */ + public static Context getClassLoader() + throws NamingException { + Context context = (Context) clBindings.get + (Thread.currentThread().getContextClassLoader()); + if (context == null) + throw new NamingException + (sm.getString("contextBindings.noContextBoundToCL")); + return context; + } + + + /** + * Retrieves the naming context name bound to a class loader. + */ + public static String getClassLoaderName() + throws NamingException { + String name = (String) clNameBindings.get + (Thread.currentThread().getContextClassLoader()); + if (name == null) + throw new NamingException + (sm.getString("contextBindings.noContextBoundToCL")); + return name; + } + + + /** + * Tests if current class loader is bound to a context. + */ + public static boolean isClassLoaderBound() { + return (clBindings.containsKey + (Thread.currentThread().getContextClassLoader())); } 1.2 +1 -0 jakarta-tomcat-4.0/catalina/src/share/org/apache/naming/LocalStrings.properties Index: LocalStrings.properties =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/naming/LocalStrings.properties,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- LocalStrings.properties 2000/11/02 06:14:16 1.1 +++ LocalStrings.properties 2000/11/11 01:47:47 1.2 @@ -1,5 +1,6 @@ contextBindings.unknownContext=Unknown context name : {0} contextBindings.noContextBoundToThread=No naming context bound to this thread +contextBindings.noContextBoundToCL=No naming context bound to this class loader selectorContext.noJavaUrl=This context must be accessed throught a java: URL namingContext.contextExpected=Name is not bound to a Context namingContext.nameNotBound=Name {0} is not bound in this Context 1.2 +20 -6 jakarta-tomcat-4.0/catalina/src/share/org/apache/naming/SelectorContext.java Index: SelectorContext.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/naming/SelectorContext.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- SelectorContext.java 2000/11/02 06:14:16 1.1 +++ SelectorContext.java 2000/11/11 01:47:47 1.2 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/naming/SelectorContext.java,v 1.1 2000/11/02 06:14:16 remm Exp $ - * $Revision: 1.1 $ - * $Date: 2000/11/02 06:14:16 $ + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/naming/SelectorContext.java,v 1.2 2000/11/11 01:47:47 remm Exp $ + * $Revision: 1.2 $ + * $Date: 2000/11/11 01:47:47 $ * * ==================================================================== * @@ -75,7 +75,7 @@ * Catalina JNDI Context implementation. * * @author Remy Maucherat - * @version $Revision: 1.1 $ $Date: 2000/11/02 06:14:16 $ + * @version $Revision: 1.2 $ $Date: 2000/11/11 01:47:47 $ */ public class SelectorContext implements Context { @@ -96,6 +96,12 @@ public static final int prefixLength = prefix.length(); + /** + * Initial context prefix. + */ + public static final String IC_PREFIX = "IC_"; + + // ----------------------------------------------------------- Constructors @@ -657,8 +663,12 @@ throws NamingException { if (initialContext) { - String ICName = - "IC_" + ContextBindings.getThreadName(); + String ICName = IC_PREFIX; + if (ContextBindings.isThreadBound()) { + ICName += ContextBindings.getThreadName(); + } else if (ContextBindings.isClassLoaderBound()) { + ICName += ContextBindings.getClassLoaderName(); + } Context initialContext = ContextBindings.getContext(ICName); if (initialContext == null) { // Allocating a new context and binding it to the appropriate @@ -668,7 +678,11 @@ } return initialContext; } else { - return ContextBindings.getThread(); + if (ContextBindings.isThreadBound()) { + return ContextBindings.getThread(); + } else { + return ContextBindings.getClassLoader(); + } } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]