I updated the issue with a patch that works against current svn trunk. I've appended the current server.xml at the end of this email.

thanks
david jencks

On Aug 18, 2007, at 1:02 AM, David Jencks wrote:

So its been a while and IIUC the config-in-ldap solutions aren't quite done for 1.5.1. There have been some changes to e.g. interceptor configs that make this patch as it stands not quite work but if there's any interest in getting this into 1.5.1 I'm happy to update the patch so it works again and apply it.

Please take a look at the server.xml below and see what you think.

Even if everyone would prefer to stick with shipping the generic server.xml what about applying the rest of the patch, adding javadoc "annotations" and running the maven-xbean plugin on the code to make it possible to use server.xml of the form below?

thanks
david jencks

On Jun 28, 2007, at 4:17 PM, David Jencks wrote:

A while back there was some discussion of whether server.xml could be made to be more semantically meaningful with less generic cruft, and I suggested looking into xbean-spring. So, I spent a bit of time on it and implemented this. See https:// issues.apache.org/jira/browse/DIRSERVER-984

This was pretty easy to do, after fixing some problems in xbean. Basically all I did was add some javadoc "annotations" to tell xbean which classes to look at and what type collections contain, and change to the xbean application context from the plain spring one.

xbean generates a schema for the configurable objects so you can consult the schema to see what can be configured. As you can see, you can mix regular spring configuration and the xbean style in the same server.xml.

There's a lot more customization possible, I basically did the minimum possible to get it to work. Pretty much anything can have a different name. The main ugliness I see is the handling of properties that are lists (or sets) of strings.


<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
        "http://www.springframework.org/dtd/spring-beans.dtd";>

<beans>
<!-- bean I didn't convert -->
<bean id="environment" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="properties">
      <props>
<!-- JNDI security properties used to get initial contexts. -->
        <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>
      </props>
    </property>
  </bean>


<mutableServerStartupConfiguration id="configuration" xmlns="http://apacheds.org/config/1.0";
                                     workingDirectory="example.com"
                                     synchPeriodMillis="15000"
                                     maxThreads="8"
                                     allowAnonymousAccess="false"
                                     accessControlEnabled="false"
                                     denormalizeOpAttrsEnabled="false"
          >

    <changePasswordConfiguration>
      <changePasswordConfiguration
              enabled="false"
              ipPort="464">
      </changePasswordConfiguration>
    </changePasswordConfiguration>

    <ntpConfiguration>
      <ntpConfiguration
              enabled="false"
              ipPort="123">
      </ntpConfiguration>
    </ntpConfiguration>

    <dnsConfiguration>
      <dnsConfiguration
              enabled="false"
              ipPort="53">
      </dnsConfiguration>
    </dnsConfiguration>

    <kdcConfiguration>
      <kdcConfiguration
              enabled="false"
              ipPort="88">
      </kdcConfiguration>
    </kdcConfiguration>

    <ldapsConfiguration>
      <ldapConfiguration id="ldapsConfiguration"
                         enabled="false"
                         ipPort="636"
                         enableLdaps="true">
      </ldapConfiguration>
    </ldapsConfiguration>

    <ldapConfiguration>
      <ldapConfiguration id="ldapConfiguration"
              ipPort="10389"
              allowAnonymousAccess="false"
              saslHost="ldap.example.com"
              saslPrincipal="ldap/[EMAIL PROTECTED]"
              searchBaseDn="ou=users,ou=system"
              maxTimeLimit="15000"
              maxSizeLimit="1000">

<!-- The list of supported authentication mechanisms. -->
        <supportedMechanisms>
<value xmlns="http://www.springframework.org/schema/ beans">SIMPLE</value> <value xmlns="http://www.springframework.org/schema/ beans">CRAM-MD5</value> <value xmlns="http://www.springframework.org/schema/ beans">DIGEST-MD5</value> <!--<value xmlns="http://www.springframework.org/schema/ beans">GSSAPI</value>-->
        </supportedMechanisms>

<!-- The desired quality-of-protection, used by DIGEST-MD5 and GSSAPI. -->
        <saslQop>
<value xmlns="http://www.springframework.org/schema/ beans">auth</value> <value xmlns="http://www.springframework.org/schema/ beans">auth-int</value> <value xmlns="http://www.springframework.org/schema/ beans">auth-conf</value>
        </saslQop>

<!-- The realms serviced by this SASL host, used by DIGEST- MD5 and GSSAPI. -->
        <saslRealms>
<value xmlns="http://www.springframework.org/schema/ beans">example.com</value> <value xmlns="http://www.springframework.org/schema/ beans">apache.org</value>
        </saslRealms>

<!-- the collection of extended operation handlers to install -->
        <extendedOperationHandlers>
          <!--startTlsHandler/-->
          <gracefulShutdownHandler/>
          <launchDiagnosticUiHandler/>
<!-- The Stored Procedure Extended Operation is not stable yet and it may cause security risks.-->
          <!--storedProcedureExtendedOperationHandler/-->
        </extendedOperationHandlers>
      </ldapConfiguration>
    </ldapConfiguration>

    <systemPartitionConfiguration>
<!-- use the following partitionConfiguration to override defaults for --> <!-- the system partition --> <mutableBTreePartitionConfiguration id="systemPartitionConfiguration"
        name="system"
        cacheSize="100"
        suffix="ou=system"
        optimizerEnabled="true"
        synchOnWrite="true"
partitionClassName="org.apache.directory.server.core.partition.impl.btre e.jdbm.JdbmPartition">
        <indexedAttributes>
            <mutableIndexConfiguration
              attributeId="1.3.6.1.4.1.18060.0.4.1.2.1"
              cacheSize="100"/>
            <mutableIndexConfiguration
              attributeId="1.3.6.1.4.1.18060.0.4.1.2.2"
              cacheSize="100"/>
            <mutableIndexConfiguration
              attributeId="1.3.6.1.4.1.18060.0.4.1.2.3"
              cacheSize="100"/>
            <mutableIndexConfiguration
              attributeId="1.3.6.1.4.1.18060.0.4.1.2.4"
              cacheSize="100"/>
            <mutableIndexConfiguration
              attributeId="1.3.6.1.4.1.18060.0.4.1.2.5"
              cacheSize="10"/>
            <mutableIndexConfiguration
              attributeId="1.3.6.1.4.1.18060.0.4.1.2.6"
              cacheSize="10"/>
            <mutableIndexConfiguration
              attributeId="1.3.6.1.4.1.18060.0.4.1.2.7"
              cacheSize="10"/>
            <mutableIndexConfiguration
              attributeId="ou"
              cacheSize="100"/>
            <mutableIndexConfiguration
              attributeId="uid"
              cacheSize="100"/>
            <mutableIndexConfiguration
              attributeId="objectClass"
              cacheSize="100"/>
        </indexedAttributes>
        <contextEntry>
          <value xmlns="http://www.springframework.org/schema/beans";>
            objectClass: top
            objectClass: organizationalUnit
            objectClass: extensibleObject
            ou: system
          </value>
        </contextEntry>
      </mutableBTreePartitionConfiguration>
    </systemPartitionConfiguration>

    <partitionConfigurations>
<mutableBTreePartitionConfiguration id="examplePartitionConfiguration"
        name="example"
        cacheSize="100"
        suffix="dc=example,dc=com"
        optimizerEnabled="true"
        synchOnWrite="true"
partitionClassName="org.apache.directory.server.core.partition.impl.btre e.jdbm.JdbmPartition">
        <indexedAttributes>
            <mutableIndexConfiguration
              attributeId="1.3.6.1.4.1.18060.0.4.1.2.1"
              cacheSize="100"/>
            <mutableIndexConfiguration
              attributeId="1.3.6.1.4.1.18060.0.4.1.2.2"
              cacheSize="100"/>
            <mutableIndexConfiguration
              attributeId="1.3.6.1.4.1.18060.0.4.1.2.3"
              cacheSize="100"/>
            <mutableIndexConfiguration
              attributeId="1.3.6.1.4.1.18060.0.4.1.2.4"
              cacheSize="100"/>
            <mutableIndexConfiguration
              attributeId="1.3.6.1.4.1.18060.0.4.1.2.5"
              cacheSize="10"/>
            <mutableIndexConfiguration
              attributeId="1.3.6.1.4.1.18060.0.4.1.2.6"
              cacheSize="10"/>
            <mutableIndexConfiguration
              attributeId="1.3.6.1.4.1.18060.0.4.1.2.7"
              cacheSize="10"/>
            <mutableIndexConfiguration
              attributeId="dc"
              cacheSize="100"/>
            <mutableIndexConfiguration
              attributeId="ou"
              cacheSize="100"/>
            <mutableIndexConfiguration
              attributeId="krb5PrincipalName"
              cacheSize="100"/>
            <mutableIndexConfiguration
              attributeId="uid"
              cacheSize="100"/>
            <mutableIndexConfiguration
              attributeId="objectClass"
              cacheSize="100"/>
        </indexedAttributes>
        <contextEntry>
          <value xmlns="http://www.springframework.org/schema/beans";>
            objectClass: top
            objectClass: domain
            objectClass: extensibleObject
            dc: example
          </value>
        </contextEntry>
      </mutableBTreePartitionConfiguration>
    </partitionConfigurations>

    <interceptorConfigurations>
      <mutableInterceptorConfiguration
              name="normalizationService"
interceptorClassName="org.apache.directory.server.core.normalization.Nor malizationService"/>
      <mutableInterceptorConfiguration
              name="authenticationService"
interceptorClassName="org.apache.directory.server.core.authn.Authenticat ionService"/>
      <mutableInterceptorConfiguration
              name="referralService"
interceptorClassName="org.apache.directory.server.core.referral.Referral Service"/>
      <mutableInterceptorConfiguration
              name="authorizationService"
interceptorClassName="org.apache.directory.server.core.authz.Authorizati onService"/>
      <mutableInterceptorConfiguration
              name="defaultAuthorizationService"
interceptorClassName="org.apache.directory.server.core.authz.DefaultAuth orizationService"/>
      <mutableInterceptorConfiguration
              name="exceptionService"
interceptorClassName="org.apache.directory.server.core.exception.Excepti onService"/>
      <mutableInterceptorConfiguration
              name="operationalAttributeService"
interceptorClassName="org.apache.directory.server.core.operational.Opera tionalAttributeService"/>
      <!-- Uncomment to enable the password policy service
      <mutableInterceptorConfiguration
              name="passwordPolicyService"
interceptorClassName="org.apache.directory.server.core.kerberos.Password PolicyService"/>
      <mutableInterceptorConfiguration
              name="keyDerivationService"
interceptorClassName="org.apache.directory.server.core.kerberos.KeyDeriv ationService"/>
      -->
      <mutableInterceptorConfiguration
              name="schemaService"
interceptorClassName="org.apache.directory.server.core.schema.SchemaServ ice"/>
      <mutableInterceptorConfiguration
              name="subentryService"
interceptorClassName="org.apache.directory.server.core.subtree.SubentryS ervice"/>
      <mutableInterceptorConfiguration
              name="collectiveAttributeService"
interceptorClassName="org.apache.directory.server.core.collective.Collec tiveAttributeService"/>
      <mutableInterceptorConfiguration
              name="eventService"
interceptorClassName="org.apache.directory.server.core.event.EventServic e"/>
      <mutableInterceptorConfiguration
              name="triggerService"
interceptorClassName="org.apache.directory.server.core.trigger.TriggerSe rvice"/>

        <!-- Uncomment to enable replication service
<bean xmlns="http://www.springframework.org/schema/beans"; class="org.apache.directory.mitosis.configuration.MutableReplicationInte rceptorConfiguration">
          <property name="name" value="replicationService" />
          <property name="interceptorClassName"
value="org.apache.directory.mitosis.service.ReplicationService" />
          <property name="replicationConfiguration">
<bean class="org.apache.directory.mitosis.configuration.ReplicationConfigurati on">
              <property name="replicaId">
<bean class="org.apache.directory.mitosis.common.ReplicaId">
                  <constructor-arg>
                    <value>instance_a</value>
                  </constructor-arg>
                </bean>
              </property>
              <property name="serverPort" value="10390" />
<property name="peerReplicas" value="[EMAIL PROTECTED]:10392" />
            </bean>
          </property>
        </bean>
        -->
    </interceptorConfigurations>
  </mutableServerStartupConfiguration>


<!-- another bean I didn't convert -->
<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
    <property name="customEditors">
      <map>
        <entry key="javax.naming.directory.Attributes">
<bean class="org.apache.directory.server.core.configuration.AttributesProperty Editor"/>
        </entry>
      </map>
    </property>
  </bean>
</beans>

Reply via email to