The Apache Directory team introduced new configuration interface of ApacheDS from the version 0.9.1. This page introduces it.
ApacheDS provides its configuration API in the org.apache.ldap.server.configuration package. This package contains concrete configuration instruction classes that you can instantiate and specify in your JNDI environment variable. To put your configuration instruction class into the JNDI environment variable:
Properties env = new Properties(); env.setProperty( Context.INITIAL_CONTEXT_FACTORY, CoreContextFactory.class.getName() ); ... // Create a configuration instruction. Configuration cfg = new MutableStartupConfiguration(); ... // Put the configuration instruction to the environment variable. env.putAll( cfg.toJndiEnvironment() ); // Execute the instruction you've specified. new InitialContext( env );
Now let's find out what kind of instruction you can give to ApacheDS.
This instruction starts up the ApacheDS if it is not started. Here's the list of known properties:
// Create a configuration instruction that affects an ApacheDS instance 'instance4'. Configuration cfg = new MutableStartupConfiguration( "instance4" ); ... // Put the configuration instruction to the environment variable. env.putAll( cfg.toJndiEnvironment() ); // Execute the instruction you've specified for an ApacheDS instance 'instance4'. new InitialContext( env );
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <!-- JNDI environment variable --> <bean id="environment" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="properties"> <props> <prop key="asn.1.berlib.provider">org.apache.ldap.common.berlib.asn1.SnickersProvider</prop> <!--prop key="asn.1.berlib.provider">org.apache.ldap.common.TwixProvider</prop--> <prop key="java.naming.security.authentication">simple</prop> <prop key="java.naming.security.principal">uid=admin,ou=system</prop> <prop key="java.naming.security.credentials">secret</prop> <prop key="java.naming.ldap.attributes.binary"> photo personalSignature audio jpegPhoto javaSerializedData userPassword userCertificate cACertificate authorityRevocationList certificateRevocationList crossCertificatePair x500UniqueIdentifier krb5Key </prop> </props> </property> </bean> <!-- StartupConfiguration to start ApacheDS --> <bean id="configuration" class="org.apache.ldap.server.configuration.MutableServerStartupConfiguration"> <property name="workingDirectory"><value>apache.org</value></property> <property name="allowAnonymousAccess"><value>false</value></property> <property name="accessControlEnabled"><value>false</value></property> <property name="ldapPort"><value>10389</value></property> <property name="contextPartitionConfigurations"> <set> <ref bean="apachePartitionConfiguration"/> </set> </property> <!-- Bootstrap schemas --> <property name="bootstrapSchemas"> <set> <bean class="org.apache.ldap.server.schema.bootstrap.AutofsSchema"/> <bean class="org.apache.ldap.server.schema.bootstrap.CorbaSchema"/> <bean class="org.apache.ldap.server.schema.bootstrap.CoreSchema"/> ...... </set> </property> <!-- Interceptor configurations --> <property name="interceptorConfigurations"> <list> <bean class="org.apache.ldap.server.configuration.MutableInterceptorConfiguration"> <property name="name"><value>normalizationService</value></property> <property name="interceptor"> <bean class="org.apache.ldap.server.normalization.NormalizationService" /> </property> </bean> <bean class="org.apache.ldap.server.configuration.MutableInterceptorConfiguration"> <property name="name"><value>authenticationService</value></property> <property name="interceptor"> <bean class="org.apache.ldap.server.authn.AuthenticationService" /> </property> </bean> ...... </list> </property> </bean> <!-- Additional ContextPartitionConfiguration --> <bean id="apachePartitionConfiguration" class="org.apache.ldap.server.configuration.MutableContextPartitionConfiguration"> <property name="name"><value>apache</value></property> <property name="suffix"><value>dc=apache,dc=org</value></property> <property name="indexedAttributes"> <set> <value>objectClass</value> <value>ou</value> <value>uid</value> </set> </property> <property name="contextEntry"> <value> objectClass: top objectClass: domain objectClass: extensibleObject dc: apache </value> </property> </bean> <!-- Custom editors required to launch ApacheDS --> <bean class="org.springframework.beans.factory.config.CustomEditorConfigurer"> <property name="customEditors"> <map> <entry key="javax.naming.directory.Attributes"> <bean class="org.apache.ldap.server.configuration.AttributesPropertyEditor"/> </entry> </map> </property> </bean> </beans>
Properties env; ServerStartupConfiguration cfg; ApplicationContext factory = new FileSystemXmlApplicationContext( args[0] ); cfg = ( StartupConfiguration ) factory.getBean( "configuration" ); env = ( Properties ) factory.getBean( "environment" ); env.setProperty( Context.PROVIDER_URL, "" ); env.setProperty( Context.INITIAL_CONTEXT_FACTORY, CoreContextFactory.class.getName() ); env.putAll( cfg.toJndiEnvironment() ); new InitialDirContext( env );