All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.naming.ContextBindings Maven / Gradle / Ivy

There is a newer version: 11.0.0-M22
Show newest version
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */ 


package org.apache.naming;

import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.NamingException;

/**
 * Handles the associations :
 * 
    *
  • Catalina context name with the NamingContext
  • *
  • Calling thread with the NamingContext
  • *
* * @author Remy Maucherat * @version $Id: ContextBindings.java 987920 2010-08-22 15:34:34Z markt $ */ public class ContextBindings { // -------------------------------------------------------------- Variables /** * Bindings name - naming context. Keyed by name. */ private static Hashtable contextNameBindings = new Hashtable(); /** * Bindings thread - naming context. Keyed by thread id. */ private static Hashtable threadBindings = new Hashtable(); /** * Bindings thread - name. Keyed by thread id. */ private static Hashtable threadNameBindings = new Hashtable(); /** * 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 final StringManager sm = StringManager.getManager(Constants.Package); // --------------------------------------------------------- Public Methods /** * Binds a context name. * * @param name Name of the context * @param context Associated naming context instance */ public static void bindContext(Object name, Context context) { bindContext(name, context, null); } /** * Binds a context name. * * @param name Name of the context * @param context Associated naming context instance * @param token Security token */ public static void bindContext(Object name, Context context, Object token) { if (ContextAccessController.checkSecurityToken(name, token)) contextNameBindings.put(name, context); } /** * Unbind context name. * * @param name Name of the context */ public static void unbindContext(Object name) { unbindContext(name, null); } /** * Unbind context name. * * @param name Name of the context * @param token Security token */ public static void unbindContext(Object name, Object token) { if (ContextAccessController.checkSecurityToken(name, token)) contextNameBindings.remove(name); } /** * Retrieve a naming context. * * @param name Name of the context */ static Context getContext(Object name) { return contextNameBindings.get(name); } /** * Binds a naming context to a thread. * * @param name Name of the context */ public static void bindThread(Object name) throws NamingException { bindThread(name, null); } /** * Binds a naming context to a thread. * * @param name Name of the context * @param token Security token */ public static void bindThread(Object name, Object token) throws NamingException { if (ContextAccessController.checkSecurityToken(name, token)) { Context context = contextNameBindings.get(name); if (context == null) throw new NamingException (sm.getString("contextBindings.unknownContext", name)); threadBindings.put(Thread.currentThread(), context); threadNameBindings.put(Thread.currentThread(), name); } } /** * Unbinds a naming context to a thread. * * @param name Name of the context */ public static void unbindThread(Object name) { unbindThread(name, null); } /** * Unbinds a naming context to a thread. * * @param name Name of the context * @param token Security token */ public static void unbindThread(Object name, Object token) { if (ContextAccessController.checkSecurityToken(name, token)) { threadBindings.remove(Thread.currentThread()); threadNameBindings.remove(Thread.currentThread()); } } /** * Retrieves the naming context bound to a thread. */ public static Context getThread() throws NamingException { Context context = threadBindings.get(Thread.currentThread()); if (context == null) throw new NamingException (sm.getString("contextBindings.noContextBoundToThread")); return context; } /** * Retrieves the naming context name bound to a thread. */ static Object getThreadName() throws NamingException { Object name = threadNameBindings.get(Thread.currentThread()); if (name == null) throw new NamingException (sm.getString("contextBindings.noContextBoundToThread")); return name; } /** * Tests if current thread is bound to a context. */ 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(Object 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(Object name, Object token) throws NamingException { bindClassLoader (name, token, Thread.currentThread().getContextClassLoader()); } /** * Binds a naming context to a thread. * * @param name Name of the context * @param token Security token */ public static void bindClassLoader(Object name, Object token, ClassLoader classLoader) throws NamingException { if (ContextAccessController.checkSecurityToken(name, token)) { Context context = contextNameBindings.get(name); if (context == null) throw new NamingException (sm.getString("contextBindings.unknownContext", name)); clBindings.put(classLoader, context); clNameBindings.put(classLoader, name); } } /** * Unbinds a naming context to a class loader. * * @param name Name of the context */ public static void unbindClassLoader(Object name) { unbindClassLoader(name, null); } /** * Unbinds a naming context to a class loader. * * @param name Name of the context * @param token Security token */ public static void unbindClassLoader(Object name, Object token) { unbindClassLoader(name, token, Thread.currentThread().getContextClassLoader()); } /** * Unbinds a naming context to a class loader. * * @param name Name of the context * @param token Security token */ public static void unbindClassLoader(Object name, Object token, ClassLoader classLoader) { if (ContextAccessController.checkSecurityToken(name, token)) { Object n = clNameBindings.get(classLoader); if ((n==null) || !(n.equals(name))) { return; } clBindings.remove(classLoader); clNameBindings.remove(classLoader); } } /** * Retrieves the naming context bound to a class loader. */ public static Context getClassLoader() throws NamingException { ClassLoader cl = Thread.currentThread().getContextClassLoader(); Context context = null; do { context = clBindings.get(cl); if (context != null) { return context; } } while ((cl = cl.getParent()) != null); throw new NamingException (sm.getString("contextBindings.noContextBoundToCL")); } /** * Retrieves the naming context name bound to a class loader. */ static Object getClassLoaderName() throws NamingException { ClassLoader cl = Thread.currentThread().getContextClassLoader(); Object name = null; do { name = clNameBindings.get(cl); if (name != null) { return name; } } while ((cl = cl.getParent()) != null); throw new NamingException (sm.getString("contextBindings.noContextBoundToCL")); } /** * Tests if current class loader is bound to a context. */ public static boolean isClassLoaderBound() { ClassLoader cl = Thread.currentThread().getContextClassLoader(); do { if (clBindings.containsKey(cl)) { return true; } } while ((cl = cl.getParent()) != null); return false; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy