/* * 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 javax.naming; import java.util.Hashtable; /** * The <code>Context</code> interface describes a naming context comprising a * collection of bindings (see <code>javax.naming.Binding</code>) and methods * for manipulating them. This interface is extended by interfaces * <code>javax.naming.directory.DirContext</code> and * <code>javax.naming.event.EventContext</code>. The class * <code>javax.naming.InitialContext</code> implements the * <code>Context</code> interface. * <p> * Any of the methods may throw a <code>NamingException</code> or one of its * subclasses. The specifications for those exceptions explain the circumstances * in which they may be thrown. * </p> * <p> * Name parameters to context methods are each relative to the context. Name * parameters cannot be null. The empty name, whether of type <code>Name</code> * or <code>String</code>, is the name of the initial context. Names may be * composed of multiple components; for example, in the filesystem name * "usr/include/stdio.h", each of the components "usr", "include", "stdio.h" is * an atomic component, but only "stdio.h" is the terminal atomic component. The * example name may be used in context operations providing the intervening * parent contexts for "usr" and "include" already exist. Finally, if the * current context has name "usr/include", then the example name could be the * result of <code>composeName("stdio.h","usr/include")</code>. * </p> * <p> * Depending on whether a naming system supports federation, that is, names that * may include components from different naming systems, name parameters to * context methods may be considered differently as described below. * </p> * <p> * In systems supporting federation, String name parameters are treated as * composite names. When <code>Name</code> parameters are not instances of * <code>CompositeName</code>, they are deemed to be compound names (<code>CompoundName</code> * instances or subclasses of them). Also, when using <code>list()</code> or * <code>listBindings()</code> to obtain a <code>NamingEnumeration</code>, * all names in the enumeration are string representations of composite names. * </p> * <p> * Where systems do not support federation, a service provider may treat name * parameters to context methods and names found using * <code>NamingEnumeration</code> may either as composite names or as compound * names. See service provider documentation for details. * </p> * <p> * Any <code>Name</code> parameter specified to a context method is owned by * the caller and will remain unchanged, but applications should avoid modifying * these <code>Name</code> objects while the operation has not completed. Any * <code>Name</code> object returned by a context operation becomes owned by * the caller. * </p> * <p> * JNDI applications can provide preferences and configuration information, such * as security details for authentication to a service, using JNDI environment * properties. JNDI environment properties nearly all begin with "java.naming." * except for provider-specific properties (explained below). All specified JNDI * environment properties together comprise the context environment and methods * are available for examining and manipulating that environment. The * environment of a context may not necessarily contain all possible JNDI * properties; for example, one or more may remain unspecified. * </p> * <p> * The set of standard JNDI environment properties is: * * <pre> * Property name Value type Notes * ------------- ---------- ----- * java.naming.applet F * java.naming.authoritative F * java.naming.batchsize F * java.naming.dns.url F * java.naming.factory.control C see LdapContext * java.naming.factory.initial F * java.naming.factory.object C * java.naming.factory.state C * java.naming.factory.url.pkgs C * java.naming.language F * java.naming.provider.url F * java.naming.referral F * java.naming.security.authentication F * java.naming.security.credentials F * java.naming.security.principal F * java.naming.security.protocol F * </pre> * * </p> * <p> * For each property above marked with "C" for "concatenate", when encountered * while searching sources of environment properties, values are combined into a * single list separated by colons and becomes the resulting value of that * property. * </p> * <p> * For each property above marked with "F" for "first occurrence", when * encountered while searching sources of environment properties, the first * value encountered is the resulting value of that property. In the latter * case, and with additional JNDI environment properties explained further * below, the type and syntax of acceptable property values should be described * in the corresponding documentation for the property. In particular, a * property may accept a value consisting of several pieces of relevant * information, but the search order and precedence for environment properties * ensures that the entire value of the first occurrence of a given property is * deemed the value to be used. * </p> * <p> * Additional JNDI environment properties may be defined according to the needs * of the particular service and/or service providers and a few guidelines * should be followed when choosing appropriate names for them. Such additional * properties comprise service-specific, feature-specific, or provider-specific * properties. * </p> * <p> * Service-specific JNDI properties may be used by all service providers that * offer implementations for a given service and would include the service type * in the property name prefix. For example, JNDI service providers for Java RMI * should name their service-specific JNDI properties using prefix * "java.naming.rmi.", or LDAP service providers should use prefix * "java.naming.ldap.". * </p> * <p> * Feature-specific JNDI properties may be used by all service providers * offering implementations using a particular flavor of a feature and would * include the feature name and the particular flavor name in the property name * prefix. A common example is SASL used by several service providers for * security; appropriate SASL feature-specific properties would use prefix * "java.naming.security.sasl.". * </p> * <p> * Provider-specific JNDI properties are used by only a single provider though a * provider may offer more than one service provider implementation. The * provider should ensure uniqueness of their provider properties, for example, * an LDAP service provider from mycom might use a service provider package name * such as "com.mycom.jndi.ldap." as their provider-specific prefix. * </p> * <p> * JNDI environment properties can be specified in a <code>Hashtable</code> * and passed as the environment parameter when creating an initial context. * </p> * <p> * Two other important sources of JNDI environment properties are resource files * provided by applications and applet parameters (each is considered as an * application resource file) and by service provider implementations (provider * resource files) in the format of Java properties files - see * <code>java.util.Properties</code> class for details. * </p> * <p> * At runtime, the application classpath and, where appropriate, the applet * codebase attribute is used to locate the classes to run; when creating the * first initial context, the JNDI also searches the same path for all files * (application resource files) called "jndi.properties"; it is the classpath * associated with the context <code>ClassLoader</code> (for example, the * return value from <code>Thread.getContextClassLoader()</code> or from * <code>ClassLoader.getSystemClassLoader()</code>) which is searched to get * the resource files. Further, a path comprising the value of the "java.home" * system property followed by "lib/jndi.properties" is checked for a readable * file; if one exists, then that file is used as another application resource * file. All application resource files found in the application classpath are * examined, but JNDI properties set in a file found early will override the * same properties also set in a file found later in the classpath. * </p> * <p> * Provider resource files are located according to the package prefix for the * service provider's initial context factory and context implementation class * in which dot separator characters are converted into slash path separator * characters to construct a filepath appended with "jndiprovider.properties". * Consider the example where you have a service provider which supplies a * context <code>org.apache.harmony.jndi.example.exampleCtx</code>. In this * case the package prefix is <code>org.apache.harmony.jndi.example</code>. * Substituting slash chars for dots & appending "jndiprovider.properties" gives * you <code>org/apache/harmony/jndi/example/jndiprovider.properties</code>. * </p> * <p> * An important part of service provider implementation is to specify certain * standard JNDI properties that are using to locate any of the various factory * classes needed for the implementation; these are: * * <pre> * java.naming.factory.control * java.naming.factory.object * java.naming.factory.state * java.naming.factory.url.pkgs - package prefixes used for URL contexts * </pre> * * </p> * <p> * When searching for the above 4 properties only provider resource files should * be examined. Although other properties may be specified in them for use by * the service provider implementation, the JNDI ignores properties from these * files other than those related to factories. * </p> * <p> * It should be noted that a provider resource file's properties differ from * those in application resource files in that their values are not incorporated * into the environment. Instead, they are read when the following methods are * invoked with <code>Context</code> and <code>Hashtable</code> parameters: * * <pre> * ControlFactory.getControlInstance - uses java.naming.factory.control * DirectoryManager.getObjectInstance - uses java.naming.factory.object * DirectoryManager.getStateToBind - uses java.naming.factory.state * NamingManager.getObjectInstance - uses java.naming.factory.object * NamingManager.getStateToBind - uses java.naming.factory.state * </pre> * * </p> * <p> * These methods use their <code>Hashtable</code> parameter to get the * environment properties. Then they use the class loader of the * <code>Context</code> parameter to look for the provider resource file. If * the file is found, then the value of the required property is appended to the * value of the required property in the environment. Note that it is appended * for use by this method but the environment itself is unaffected. * </p> * <p> * The <code>jndiprovider.properties</code> files may specify additional * properties, but documentation for the service provider should clearly * describe which properties are valid in this file and under what * circumstances. * </p> * <p> * To summarize the search order and precedence for JNDI environment properties, * the earliest having highest precedence: * * <pre> * 1. environment parameter used to initialize an initial context, * 2. applet parameters, (only used if that environment param does not exist) * 3. system properties, (only used if that environment and applet parameter * do not exist) * 4. application resource files. * </pre> * * </p> * <p> * It should be noted that in the case of applet parameters and system * properties only a subset of the properties are read. These are the following * 7: * * <pre> * java.naming.dns.url * java.naming.factory.control * java.naming.factory.initial * java.naming.factory.object * java.naming.factory.state * java.naming.factory.url.pkgs * java.naming.provider.url * </pre> * * </p> * <p> * For a JNDI property found in more than one of those sources, if it is one of * the JNDI factory list properties then values are joined into a * colon-separated list, otherwise the first instance of a property defines the * value to be used. * </p> * <p> * The above search order and precedence applies when creating contexts for any * class implementing the <code>Context</code> interface. * </p> * <p> * Although a subcontext inherits the environment of its parent context, * subsequent changes to either's environment has no direct effect on the other. * However, applications should avoid dependency on when JNDI properties are * used or verified as this depends on the service provider implementation. As * the environment of a context can be examined by any object that has a * reference to the context, care should be taken to assess the risk to any * security details stored in the environment. * </p> * <p> * Multithreaded access to a single <code>Context</code> instance is only safe * when client code uses appropriate synchronization and locking. * </p> * <p> * When a <code>NamingEnumeration</code> is returned by a <code>Context</code> * method, the operation should not be considered complete, for concurrency * purposes, if the NamingEnumeration is still being used or if any referrals * are still being followed resulting from that operation. * </p> */ public interface Context { /** * A constant containing environment property name "java.naming.applet". The * property may remain unspecified or may be specified within the * environment parameter used when creating an initial context. When this * environment property is specified, its value must be the currently * executing instance of <code>java.applet.Applet</code> to enable the * operation of initial context creation to search applet parameters first * for other environment properties which may have been specified, before * searching for properties in the constructor environment parameter, system * properties, and application resource files. */ public static final String APPLET = "java.naming.applet"; //$NON-NLS-1$ /** * A constant containing environment property name * "java.naming.authoritative". An application specifies this property to * indicate whether naming requests must be made to the most authoritative * naming service instance or not. The property may remain unspecified or * may be specified with a string value. If unspecified, the property value * is considered to be "false". A value of "true" means requests should be * made to the most authoritative naming service replicas or caches that may * be available. Any value other than "true" means requests may be made to * any instance of the naming service which need not be, but may include, * the most authoritative. */ public static final String AUTHORITATIVE = "java.naming.authoritative"; //$NON-NLS-1$ /** * A constant containing environment property name "java.naming.batchsize". * An application specifies this property to indicate a preference to * receive operation results in batches of the given size from the service * provider. The property may remain unspecified or may be specified with an * integer expressed as a string value. If unspecified, the batch size of * operation results is determined by the service provider. The service * provider implementation may use or ignore the specified value. */ public static final String BATCHSIZE = "java.naming.batchsize"; //$NON-NLS-1$ /** * A constant containing environment property name "java.naming.dns.url". * The property specifies a DNS-scheme URL including the DNS host including * domain names, if any; for example, "dns://9.28.36.7/apache.org". If the * application uses any JNDI URL with DNS names and a search for this * property fails, then the naming operation will throw a * <code>ConfigurationException</code>. */ public static final String DNS_URL = "java.naming.dns.url"; //$NON-NLS-1$ /** * A constant containing environment property name * "java.naming.factory.initial". The property specifies the name of the * factory class, fully-qualified, that will be used to create an initial * context; for example, "mycom.jndi.testing.spi.DazzleContextFactory". If * the property is not specified, any operation requiring an initial context * will throw a <code>NoInitialContextException</code>. */ public static final String INITIAL_CONTEXT_FACTORY = "java.naming.factory.initial"; //$NON-NLS-1$ /** * A constant containing environment property name "java.naming.language". * The property indicates the preferred language for operations with the * service provider. The property may remain unspecified or should be a * string comprising a list of language tags according to RFC 1766 separated * by colons. When not specified, the language preference is selected by the * service provider. */ public static final String LANGUAGE = "java.naming.language"; //$NON-NLS-1$ /** * A constant containing environment property name * "java.naming.factory.object". The property specifies a list of object * factories to be used when the application requests an instance of a * specified object. The value is a string comprising a list of fully * qualified object factory class names separated by colons. */ public static final String OBJECT_FACTORIES = "java.naming.factory.object"; //$NON-NLS-1$ /** * A constant containing environment property name * "java.naming.provider.url". The property specifies configuration options * for use by the a service provider. The property may remain unspecified or * should be a URL string; for example, "ldap://ahost.myfirm.com:389". If * not specified, the service provider selects its default configuration. */ public static final String PROVIDER_URL = "java.naming.provider.url"; //$NON-NLS-1$ /** * A constant containing environment property name "java.naming.referral". * The property specifies how the service provider should process any * referrals encountered during a naming operation. The property may remain * unspecified or specified as one of the following strings: * <ul> * <li>"follow" service provider should always follow referrals</li> * <li>"ignore" service provider should ignore referrals</li> * <li>"throw" service provider should throw ReferralException if it * encounters a referral</li> * </ul> * When not specified, the service provider selects a default value. */ public static final String REFERRAL = "java.naming.referral"; //$NON-NLS-1$ /** * A constant containing environment property name * "java.naming.security.authentication". The property specifies the * security level to be used in naming operations. The property may remain * unspecified or be one of the strings "none", "simple", "strong". When not * specified, the service provider selects a default value. */ public static final String SECURITY_AUTHENTICATION = "java.naming.security.authentication"; //$NON-NLS-1$ /** * A constant containing environment property name * "java.naming.security.credentials". The property specifies credentials of * the security principal so that the caller can be authenticated to the * naming service. The property may remain unspecified or be a value * according to the authentication scheme controlling access to the service. * When not specified, the service provider determines how to respond to * service requests affected by the lack of security credentials. */ public static final String SECURITY_CREDENTIALS = "java.naming.security.credentials"; //$NON-NLS-1$ /** * A constant containing environment property name * "java.naming.security.principal". The property the name of the security * principal to be used when the caller needs to be authenticated to the * naming service. The property may remain unspecified or be a value * according to the authentication scheme controlling access to the service. * When not specified, the service provider determines how to respond to * service requests affected by the lack of a security principal. */ public static final String SECURITY_PRINCIPAL = "java.naming.security.principal"; //$NON-NLS-1$ /** * A constant containing environment property name * "java.naming.security.protocol". The property the name of the security * protocol to be used with the naming service. The property may remain * unspecified or be specified as a string according to the service provider * implementation. When not specified, the service provider determines how * to respond to service requests. */ public static final String SECURITY_PROTOCOL = "java.naming.security.protocol"; //$NON-NLS-1$ /** * A constant containing environment property name * "java.naming.factory.state". The property specifies a list of state * factories to be used when the application requests the state of a * specified object. The value is a string comprising a list of fully * qualified state factory class names separated by colons. The property may * remain unspecified. */ public static final String STATE_FACTORIES = "java.naming.factory.state"; //$NON-NLS-1$ /** * A constant containing environment property name * "java.naming.factory.url.pkgs". The property specifies a list of package * prefixes that are used to load URL context factories. The value is a * string comprising a list of package prefixes for class names of URL * context factory classes separated by colons. The property may remain * unspecified. In any case, prefix "com.sun.jndi.url" is automatically * added to the list of specified package prefixes or used as the only * package prefix when the property is unspecified. */ public static final String URL_PKG_PREFIXES = "java.naming.factory.url.pkgs"; //$NON-NLS-1$ /** * Adds or replaces the environment property specified by the non-null * string parameter into the environment of this context with the specified * object value. Returns the previous property value if replaced, or null if * the property did not exist in the environment. * * @param s * the name of the property to add * @param o * the value of the property to add * @return the previous property value if replaced, or null if the property * did not exist in the environment. * @throws NamingException * if an error occurs. */ public Object addToEnvironment(String s, Object o) throws NamingException; /** * Binds the specified name to the specified object in this context. The * specified name may not be null. The specified object may be null when a * name bound to a null object is meaningful in the semantics of the * underlying naming system, otherwise a <code>NamingException</code> is * thrown. * * @param n * a <code>Name</code>, may not be null * @param o * an object to bind with the name, may be null * @throws NamingException * if an error occurs. */ public void bind(Name n, Object o) throws NamingException; /** * Binds the specified name to the specified object in this context. The * specified name may not be null. The specified object may be null when a * name bound to a null object is meaningful in the semantics of the * underlying naming system, otherwise a <code>NamingException</code> is * thrown. * * @param s * a name in string, may not be null * @param o * an object to bind with the name, may be null * @throws NamingException * if an error occurs. */ public void bind(String s, Object o) throws NamingException; /** * Closes this context. The result of any further operations on a closed * context is undefined. * * @throws NamingException * if an error occurs. */ public void close() throws NamingException; /** * Combines two names into a composite name according to the syntax for this * context. The name <code>pfx</code> is expected to be the name of one or * more of the immediate parent contexts of this context. The name * <code>n</code> is a name relative to this context. Neither * <code>pfx</code> nor <code>n</code> may be null. The combined result * is a name which is relative to the specified parent context names. * * @param n * a <code>Name</code>, may not be null * @param pfx * a <code>Name</code> serves as prefix, may not be null * @return the combined name * @throws NamingException * if an error occurs. */ public Name composeName(Name n, Name pfx) throws NamingException; /** * Combines two names into a composite name according to the syntax for this * context. The name <code>pfx</code> is expected to be the name of one or * more of the immediate parent contexts of this context. The name * <code>s</code> is a name relative to this context. Neither * <code>pfx</code> nor <code>s</code> may be null. The combined result * is a name which is relative to the specified parent context names. * * @param s * a name in string, may not be null * @param pfx * a name in string, serves as prefix, may not be null * @return the combined name in string * @throws NamingException * if an error occurs. */ public String composeName(String s, String pfx) throws NamingException; /** * Creates a new context with the specified name as a child of this context * and creates a binding for the name with the new context object in this * context. This is analogous to creating a new lower level in a * hierarchical naming system. * * @param n * the name of the new subcontext * @return the created subcontext * @throws NamingException * if an error occurs. */ public Context createSubcontext(Name n) throws NamingException; /** * Creates a new context with the specified name as a child of this context * and creates a binding for the name with the new context object in this * context. This is analogous to creating a new lower level in a * hierarchical naming system. * * @param s * the name of the new subcontext, in string * @return the created subcontext * @throws NamingException * if an error occurs. */ public Context createSubcontext(String s) throws NamingException; /** * Removes a child context with the specified name from this context * together with any attributes associated with that name. If the specified * context does not exist, but intervening contexts do exist, then the * operation is is considered to succeed. * <p> * Care must be taken with composite names crossing multiple naming systems. * A composite name containing a name component which is bound to an object * in a different naming system cannot be used to destroy that name * subcontext because the subcontext is not of the same type as the context * containing the binding. <code>Unbind()</code> can be used to destroy * the binding of the specified name in this context to the object in the * other naming system. To remove the context object in the other naming * system, first obtain a context belonging to the other naming system, then * use <code>destroySubcontext()</code> on that context. * </p> * * @param n * the name of the subcontext to destroy * @throws NamingException * if an error occurs. */ public void destroySubcontext(Name n) throws NamingException; /** * Removes a child context with the specified name from this context * together with any attributes associated with that name. If the specified * context does not exist, but intervening contexts do exist, then the * operation is considered to succeed. * <p> * Care must be taken with composite names crossing multiple naming systems. * A composite name containing a name component which is bound to an object * in a different naming system cannot be used to destroy that name * subcontext because the subcontext is not of the same type as the context * containing the binding. <code>Unbind()</code> can be used to destroy * the binding of the specified name in this context to the object in the * other naming system. To remove the context object in the other naming * system, first obtain a context belonging to the other naming system, then * use <code>destroySubcontext()</code> on that context. * </p> * * @param s * the name of the subcontext to destroy * @throws NamingException * if an error occurs. */ public void destroySubcontext(String s) throws NamingException; /** * Returns a non-null reference to the current environment properties for * this context. The only proper ways to modify the properties for this * context are using the <code>addToEnvironment()</code> and * <code>removeFromEnvironment()</code> methods. * * @return a non-null reference to the current environment properties for * this context, which should not be modified * @throws NamingException * if an error occurs. */ public Hashtable<?, ?> getEnvironment() throws NamingException; /** * Returns the complete name as a string for this context in the namespace. * For example, in a namespace accessed using a file system service provider * on a computer running the Windows operating system, * <code>getNameInNamespace()</code> will return a string comprising the * current working disk drive such as "F:\". The returned name is never null * and should not be used in any naming operations. * * @return the complete name as a string for this context in the namespace * @throws NamingException * if an error occurs. * @throws OperationNotSupportedException * in cases of naming systems where a full name has no meaning. */ public String getNameInNamespace() throws NamingException; /** * Returns a parser object for the named context. When using a federation of * naming systems in which each has its own rules for parsing names for its * namespace, each naming system will have a different parser. The parser * for a given context can parse a name composed of several components into * atomic components according to the rules for the naming system associated * with the specified context. * * @param n * a <code>Name</code> * @return a parser object for the named context * @throws NamingException * if an error occurs. */ public NameParser getNameParser(Name n) throws NamingException; /** * Returns a parser object for the named context. When using a federation of * naming systems in which each has its own rules for parsing names for its * namespace, each naming system will have a different parser. The parser * for a given context can parse a name composed of several components into * atomic components according to the rules for the naming system associated * with the specified context. * * @param s * a name in string * @return a parser object for the named context * @throws NamingException * if an error occurs. */ public NameParser getNameParser(String s) throws NamingException; /** * Returns an enumeration of the bindings of the context for the specified * name excluding any bindings for any subcontexts. If any binding for the * context is changed before closing the enumeration, the state of the * enumeration is undefined. Each element of the enumeration is a * <code>NameClassPair</code> object. * * @param n * a <code>Name</code> * @return an enumeration of the bindings of the context for the specified * name excluding any bindings for any subcontexts * @throws NamingException * if an error occurs. */ public NamingEnumeration<NameClassPair> list(Name n) throws NamingException; /** * Returns an enumeration of the bindings of the context for the specified * name excluding any bindings for any subcontexts. If any binding for the * context is changed before closing the enumeration, the state of the * enumeration is undefined. Each element of the enumeration is a * <code>NameClassPair</code> object. * * @param s * a name in string * @return an enumeration of the bindings of the context for the specified * name excluding any bindings for any subcontexts * @throws NamingException * if an error occurs. */ public NamingEnumeration<NameClassPair> list(String s) throws NamingException; /** * Returns an enumeration of the bindings of the context for the specified * name excluding any bindings for any subcontexts. If any binding for the * context is changed before closing the enumeration, the state of the * enumeration is undefined. Each element of the enumeration is a * <code>Binding</code> object. * * @param n * a <code>Name</code> * @return an enumeration of the bindings of the context for the specified * name excluding any bindings for any subcontexts * @throws NamingException * if an error occurs. */ public NamingEnumeration<Binding> listBindings(Name n) throws NamingException; /** * Returns an enumeration of the bindings of the context for the specified * name excluding any bindings for any subcontexts. If any binding for the * context is changed before closing the enumeration, the state of the * enumeration is undefined. Each element of the enumeration is a * <code>Binding</code> object. * * @param s * a name in string * @return an enumeration of the bindings of the context for the specified * name excluding any bindings for any subcontexts * @throws NamingException * if an error occurs. */ public NamingEnumeration<Binding> listBindings(String s) throws NamingException; /** * Returns the object bound to the specified name in this context. If the * specified name is empty, a new instance of this context is returned, * complete with its own environment properties. * * @param n * a <code>Name</code> to lookup * @return the object bound to the specified name in this context * @throws NamingException * if an error occurs. */ public Object lookup(Name n) throws NamingException; /** * Returns the object bound to the specified name in this context. If the * specified name is empty, a new instance of this context is returned, * complete with its own environment properties. * * @param s * a name to lookup * @return the object bound to the specified name in this context * @throws NamingException * if an error occurs. */ public Object lookup(String s) throws NamingException; /** * Returns the object bound to the specified name in this context by * following any links. If the specified name is not a link, then the object * is returned. * * @param n * a <code>Name</code> to lookup * @return the object bound to the specified name in this context by * following any links * @throws NamingException * if an error occurs. */ public Object lookupLink(Name n) throws NamingException; /** * Returns the object bound to the specified name in this context by * following any links. If the specified name is not a link, then the object * is returned. * * @param s * a name in string to lookup * @return the object bound to the specified name in this context by * following any links * @throws NamingException * if an error occurs. */ public Object lookupLink(String s) throws NamingException; /** * Binds the specified name to the specified object, replacing any existing * binding for the specified name. The specified name may not be empty. The * specified object may be null. * * @param n * a <code>Name</code> to rebind, may not be null * @param o * an object to bind with the name, may be null * @throws NamingException * if an error occurs. */ public void rebind(Name n, Object o) throws NamingException; /** * Binds the specified name to the specified object, replacing any existing * binding for the specified name. The specified name may not be empty. The * specified object may be null. * * @param s * a name in string to rebind, may not be null * @param o * an object tobind with the name, may be null * @throws NamingException * if an error occurs. */ public void rebind(String s, Object o) throws NamingException; /** * Removes the environment property specified by the non-null parameter from * the environment of this context. Returns the value that the property had * before removal, or null if the property did not exist in the environment. * * @param s * a property name * @return the value that the property had before removal, or null if the * property did not exist in the environment * @throws NamingException * if an error occurs. */ public Object removeFromEnvironment(String s) throws NamingException; /** * Binds a specified new name to the object, and any attributes, previously * bound to the specified old name. The old name is removed from the * bindings for this context. * * @param nOld * the old name * @param nNew * the new name * @throws NameAlreadyBoundException * if the new is already bound * @throws NamingException * if an error occurs. */ public void rename(Name nOld, Name nNew) throws NamingException; /** * Binds a specified new name to the object, and any attributes, previously * bound to the specified old name. The old name is removed from the * bindings for this context. Neither the new nor the old name may be empty. * * @param sOld * the old name in string * @param sNew * the new name in string * @throws NameAlreadyBoundException * if the new is already bound * @throws NamingException * if an error occurs. */ public void rename(String sOld, String sNew) throws NamingException; /** * Removes the terminal atomic name component of the specified name from the * bindings in this context, together with any attributes associated with * the terminal atomic name. Providing that other parts of the specified * name exist in this context's bindings, the operation succeeds whether or * not the terminal atomic name exists, otherwise a * <code>NameNotFoundException</code> is thrown. Any intermediate contexts * remain unchanged. * * @param n * a <code>Name</code> to unbind * @throws NamingException * if an error occurs. */ public void unbind(Name n) throws NamingException; /** * Removes the terminal atomic name component of the specified name from the * bindings in this context, together with any attributes associated with * the terminal atomic name. Providing that other parts of the specified * name exist in this context's bindings, the operation succeeds whether or * not the terminal atomic name exists, otherwise a * <code>NameNotFoundException</code> is thrown. Any intermediate contexts * remain unchanged. * * @param s * a name in string to unbind * @throws NamingException * if an error occurs. */ public void unbind(String s) throws NamingException; }