⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memorynamingcontext.java

📁 Tomcat 4.1与WebServer集成组件的源代码包.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation.  All rights  * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer.  * * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * * 3. The end-user documentation included with the redistribution, if *    any, must include the following acknowlegement:   *       "This product includes software developed by the  *        Apache Software Foundation (http://www.apache.org/)." *    Alternately, this acknowlegement may appear in the software itself, *    if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software *    Foundation" must not be used to endorse or promote products derived *    from this software without prior written permission. For written  *    permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" *    nor may "Apache" appear in their names without prior written *    permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation.  For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * [Additional notices, if required by prior licensing conditions] * */ package org.apache.naming.modules.memory;import java.util.Hashtable;import java.util.Enumeration;import javax.naming.*;import javax.naming.directory.*;import javax.naming.spi.NamingManager;import org.apache.naming.core.*;import org.apache.tomcat.util.res.*;/** * In-memory context. * * IMPLEMENTATION. We use NamingEntry stored in a tree of hashtables.  * * @author Remy Maucherat * @author Costin Manolache */public class MemoryNamingContext extends BaseDirContext {    public MemoryNamingContext()        throws NamingException    {        super();    }    /**     * Builds a naming context using the given environment.     */    public MemoryNamingContext(Hashtable env)         throws NamingException    {        super( env );        this.bindings = new Hashtable();    }    // ----------------------------------------------------- Instance Variables    /**     * The string manager for this package.     */    protected static StringManager sm =        StringManager.getManager("org.apache.naming.res");    /**     * Bindings in this Context.     */    protected Hashtable bindings;    public void setBindings( Hashtable bindings ) {        this.bindings = bindings;    }    // -------------------------------------------------------- Context Methods    /**     * Unbinds the named object. Removes the terminal atomic name in name      * from the target context--that named by all but the terminal atomic      * part of name.     * <p>     * This method is idempotent. It succeeds even if the terminal atomic      * name is not bound in the target context, but throws      * NameNotFoundException if any of the intermediate contexts do not exist.      *      * @param name the name to bind; may not be empty     * @exception NameNotFoundException if an intermediate context does not      * exist     * @exception NamingException if a naming exception is encountered     */    public void unbind(Name name, boolean isContext)        throws NamingException    {        checkWritable(name);        	while ((!name.isEmpty()) && (name.get(0).length() == 0))	    name = name.getSuffix(1);                if (name.isEmpty())            throw new NamingException                (sm.getString("namingContext.invalidName"));                NamingEntry entry = (NamingEntry) bindings.get(name.get(0));                if (entry == null) {            throw new NameNotFoundException                (sm.getString("namingContext.nameNotBound", name.get(0)));        }                if (name.size() > 1) {            if (entry.type == NamingEntry.CONTEXT) {                ((Context) entry.value).unbind(name.getSuffix(1));            } else {                throw new NamingException                    (sm.getString("namingContext.contextExpected"));            }        } else {            if (entry.type == NamingEntry.CONTEXT) {                ((Context) entry.value).close();                bindings.remove(name.get(0));            } else {                if( isContext ) {                    throw new NotContextException                        (sm.getString("namingContext.contextExpected"));                } else {                    bindings.remove(name.get(0));                }            }        }    }    /**     * Enumerates the names bound in the named context, along with the class      * names of objects bound to them. The contents of any subcontexts are      * not included.     * <p>     * If a binding is added to or removed from this context, its effect on      * an enumeration previously returned is undefined.     *      * @param name the name of the context to list     * @return an enumeration of the names and class names of the bindings in      * this context. Each element of the enumeration is of type NameClassPair.     * @exception NamingException if a naming exception is encountered     */    public NamingEnumeration list(Name name)        throws NamingException {        // Removing empty parts        while ((!name.isEmpty()) && (name.get(0).length() == 0))            name = name.getSuffix(1);        if (name.isEmpty()) {            return new NamingContextEnumeration(bindings.elements(), this, false);        }                NamingEntry entry = (NamingEntry) bindings.get(name.get(0));                if (entry == null) {            throw new NameNotFoundException                (sm.getString("namingContext.nameNotBound", name.get(0)));        }                if (entry.type != NamingEntry.CONTEXT) {            throw new NamingException                (sm.getString("namingContext.contextExpected"));        }        return ((Context) entry.value).list(name.getSuffix(1));    }    private Name removeEmptyPrefix(Name name ) {        while ((!name.isEmpty()) && (name.get(0).length() == 0))            name = name.getSuffix(1);        return name;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -