blob: b458def1e0f32136f5b5c8b668ce34095b0316ef [file]
/*
* 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 {
/*
* -------------------------------------------------------------------
* Constants
* -------------------------------------------------------------------
*/
/**
* 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$
/*
* -------------------------------------------------------------------
* Methods
* -------------------------------------------------------------------
*/
/**
* 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 perfix, 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;
}