org.springframework.ldap.support
Class AbstractContextSource

java.lang.Object
  extended byorg.springframework.ldap.support.AbstractContextSource
All Implemented Interfaces:
ContextSource, org.springframework.beans.factory.InitializingBean
Direct Known Subclasses:
DirContextSource, LdapContextSource

public abstract class AbstractContextSource
extends java.lang.Object
implements ContextSource, org.springframework.beans.factory.InitializingBean

Abstract implementation of the ContextSource interface. By default, returns an authenticated DirContext implementation for both read-only and read-write operations. To have an anonymous environment created for read-only operations, set the anonymousReadOnly property to true.

Implementing classes need to implement getDirContextInstance(Hashtable) to create a DirContext instance of the desired type.

If an AuthenticationSource is set, this will be used for getting user name and password for each new connection, otherwise a default one will be created using the specified userName and password.

Note: When using implementations of this class outside of a Spring Context it is necessary to call afterPropertiesSet() when all properties are set, in order to finish up initialization.

Author:
Mattias Arthursson, Adam Skogman, Ulrik Sandberg
See Also:
LdapTemplate, DefaultDirObjectFactory, LdapContextSource, DirContextSource

Field Summary
protected  java.lang.String password
           
static java.lang.String SUN_LDAP_POOLING_FLAG
           
protected  java.lang.String userName
           
 
Constructor Summary
AbstractContextSource()
           
 
Method Summary
 void afterPropertiesSet()
          Checks that all necessary data is set and that there is no compatibility issues, after which the instance is initialized.
protected  java.lang.String assembleProviderUrlString(java.lang.String[] ldapUrls)
          Assemble a valid url String from all registered urls to add as PROVIDER_URL to the environment.
protected  java.util.Hashtable getAnonymousEnv()
           
protected  java.util.Hashtable getAuthenticatedEnv()
           
protected abstract  javax.naming.directory.DirContext getDirContextInstance(java.util.Hashtable environment)
          Implement in subclass to create a DirContext of the desired type (e.g.
 NamingExceptionTranslator getExceptionTranslator()
          Get the NamingExceptionTranslator used by this instance.
 javax.naming.directory.DirContext getReadOnlyContext()
          Gets a read-only DirContext.
 javax.naming.directory.DirContext getReadWriteContext()
          Gets a read-write DirContext.
 void setAnonymousReadOnly(boolean anonymousReadOnly)
          Set whether an anonymous environment should be used for read-only operations.
 void setAuthenticationSource(AuthenticationSource authenticationProvider)
           
 void setBase(java.lang.String base)
          Set the base suffix from which all operations should origin.
 void setBaseEnvironmentProperties(java.util.Map baseEnvironmentProperties)
          If any custom environment properties are needed, these can be set using this method.
 void setCacheEnvironmentProperties(boolean cacheEnvironmentProperties)
          Set whether environment properties should be cached between requsts for anonymous environment.
 void setContextFactory(java.lang.Class contextFactory)
          Set the context factory.
 void setDirObjectFactory(java.lang.Class dirObjectFactory)
          Set the DirObjectFactory to use.
 void setExceptionTranslator(NamingExceptionTranslator exceptionTranslator)
          Set the NamingExceptionTranslator to be used by this instance.
 void setPassword(java.lang.String password)
          Set the password (credentials) to use for getting authenticated contexts.
 void setPooled(boolean pooled)
          Set whether the pooling flag should be set.
protected  void setupAuthenticatedEnvironment(java.util.Hashtable env)
          Default implementation of setting the environment up to be authenticated.
 void setUrl(java.lang.String url)
          Set the url of the LDAP server.
 void setUrls(java.lang.String[] urls)
          Set the urls of the LDAP servers.
 void setUserName(java.lang.String userName)
          Set the user name (principal) to use for getting authenticated contexts.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

userName

protected java.lang.String userName

password

protected java.lang.String password

SUN_LDAP_POOLING_FLAG

public static final java.lang.String SUN_LDAP_POOLING_FLAG
See Also:
Constant Field Values
Constructor Detail

AbstractContextSource

public AbstractContextSource()
Method Detail

getReadOnlyContext

public javax.naming.directory.DirContext getReadOnlyContext()
Description copied from interface: ContextSource
Gets a read-only DirContext. The returned DirContext must be possible to perform read-only operations on.

Specified by:
getReadOnlyContext in interface ContextSource
Returns:
A DirContext instance, never null.

getReadWriteContext

public javax.naming.directory.DirContext getReadWriteContext()
Description copied from interface: ContextSource
Gets a read-write DirContext.

Specified by:
getReadWriteContext in interface ContextSource
Returns:
A DirContext instance, never null.

setupAuthenticatedEnvironment

protected void setupAuthenticatedEnvironment(java.util.Hashtable env)
Default implementation of setting the environment up to be authenticated. Override in subclass if necessary. This is needed for Active Directory connectivity, for example.

Parameters:
env - the environment to modify.

assembleProviderUrlString

protected java.lang.String assembleProviderUrlString(java.lang.String[] ldapUrls)
Assemble a valid url String from all registered urls to add as PROVIDER_URL to the environment.

Parameters:
ldapUrls - all individual url Strings.
Returns:
the full url String

setBase

public void setBase(java.lang.String base)
Set the base suffix from which all operations should origin. If a base suffix is set, you will not have to (and, indeed, should not) specify the full distinguished names in the operations performed.

Parameters:
base - the base suffix.

setContextFactory

public void setContextFactory(java.lang.Class contextFactory)
Set the context factory. Default is com.sun.jndi.ldap.LdapCtxFactory.

Parameters:
contextFactory - the context factory used when creating Contexts.

setDirObjectFactory

public void setDirObjectFactory(java.lang.Class dirObjectFactory)
Set the DirObjectFactory to use. Default is DefaultDirObjectFactory. The specified class needs to be an implementation of javax.naming.spi.DirObjectFactory. Note: Setting this value to null may have cause connection leaks when using ContextMapper methods in LdapTemplate.

Parameters:
dirObjectFactory - the DirObjectFactory to be used. Null means that no DirObjectFactory will be used.

afterPropertiesSet

public void afterPropertiesSet()
                        throws java.lang.Exception
Checks that all necessary data is set and that there is no compatibility issues, after which the instance is initialized. Note that you need to call this method explicitly after setting all desired properties if using the class outside of a Spring Context.

Specified by:
afterPropertiesSet in interface org.springframework.beans.factory.InitializingBean
Throws:
java.lang.Exception

setPassword

public void setPassword(java.lang.String password)
Set the password (credentials) to use for getting authenticated contexts.

Parameters:
password - the password.

setUserName

public void setUserName(java.lang.String userName)
Set the user name (principal) to use for getting authenticated contexts.

Parameters:
userName - the user name.

setUrls

public void setUrls(java.lang.String[] urls)
Set the urls of the LDAP servers. Use this method if several servers are required.

Parameters:
urls - the urls of all servers.

setUrl

public void setUrl(java.lang.String url)
Set the url of the LDAP server. Utility method if only one server is used.

Parameters:
url - the url of the LDAP server.

setPooled

public void setPooled(boolean pooled)
Set whether the pooling flag should be set. Default is true.

Parameters:
pooled - whether Contexts should be pooled.

setBaseEnvironmentProperties

public void setBaseEnvironmentProperties(java.util.Map baseEnvironmentProperties)
If any custom environment properties are needed, these can be set using this method.

Parameters:
baseEnvironmentProperties -

getAnonymousEnv

protected java.util.Hashtable getAnonymousEnv()

getAuthenticatedEnv

protected java.util.Hashtable getAuthenticatedEnv()

setAuthenticationSource

public void setAuthenticationSource(AuthenticationSource authenticationProvider)

setCacheEnvironmentProperties

public void setCacheEnvironmentProperties(boolean cacheEnvironmentProperties)
Set whether environment properties should be cached between requsts for anonymous environment. Default is true; setting this property to false causes the environment Hashmap to be rebuilt from the current property settings of this instance between each request for an anonymous environment.

Parameters:
cacheEnvironmentProperties - true causes that the anonymous environment properties should be cached, false causes the Hashmap to be rebuilt for each request.

setAnonymousReadOnly

public void setAnonymousReadOnly(boolean anonymousReadOnly)
Set whether an anonymous environment should be used for read-only operations. Default is false.

Parameters:
anonymousReadOnly - true if and anonymous environment should be used for read-only operations, false otherwise.

setExceptionTranslator

public void setExceptionTranslator(NamingExceptionTranslator exceptionTranslator)
Set the NamingExceptionTranslator to be used by this instance. By default, a DefaultNamingExceptionTranslator will be used.

Parameters:
exceptionTranslator - the NamingExceptionTranslator to use.

getExceptionTranslator

public NamingExceptionTranslator getExceptionTranslator()
Get the NamingExceptionTranslator used by this instance.

Returns:
the NamingExceptionTranslator.

getDirContextInstance

protected abstract javax.naming.directory.DirContext getDirContextInstance(java.util.Hashtable environment)
                                                                    throws javax.naming.NamingException
Implement in subclass to create a DirContext of the desired type (e.g. InitialDirContext or InitialLdapContext).

Parameters:
environment - the environment to use when creating the instance.
Returns:
a new DirContext instance.
Throws:
javax.naming.NamingException - if one is encountered when creating the instance.


Copyright � 2002-2006. All Rights Reserved.