oops! and to answer your question about what I am trying to achieve . . .

I want a new configuration property for my partition so that it looks somewhat like . . .


<bean id="examplePartitionConfigurat
ion"
class="com.example.MyPartitionConfig">
   <property name="name"><value>example</value></property>
   <property name="suffix"><value>dc=example,dc=com</value></property>
   <property name="indexedAttributes">
     <set>
       <value>dc</value>
       <value>ou</value>
       <value>objectClass</value>
       <value>krb5PrincipalName</value>
       <value>uid</value>
     </set>
   </property>
   <property name="contextEntry">
     <value>
       objectClass: top
       objectClass: domain
       objectClass: extensibleObject
       dc: example
     </value>
   </property>
   <property name="integrationServiceName">
      <value>org.fooorg.IntegrationProject</value>
   </property>


On 11/1/05, Lyndon Washington <lyndon.washington@gmail.com> wrote:
Hi Alex,

Thanks for the prompt reply.

I have already tried that, and it fails to pass in my configuration object because as I stated earlier, the "DefaultContextPartitionNexus.addContextPartition() creates a new MutableContextPartitionConfiguration" rather than using the configuration that was instantiated based on the properties file.

I have also tried altering one of the JUnit test cases and adding the configuration to a Hashtable and passing that to a JNDI context intitialization . . . no joy there either.

Here is the offending code, IMHO, which shows that the config that is passed in is not the one that is ultimately passed to 'partition.init()':
<snippet>
    public synchronized void addContextPartition( ContextPartitionConfiguration config ) throws NamingException
    {
        ContextPartition partition = config.getContextPartition();

        // Turn on default indices
        MutableContextPartitionConfiguration mcfg =
            new MutableContextPartitionConfiguration();
        mcfg.setName( config.getName() );
        mcfg.setSuffix( config.getSuffix() );
        mcfg.setContextEntry( config.getContextEntry() );
        mcfg.setContextPartition( partition );
       
        Set indexedAttrs = config.getIndexedAttributes();
        indexedAttrs.add( Oid.ALIAS );
        indexedAttrs.add( Oid.EXISTANCE );
        indexedAttrs.add( Oid.HIERARCHY );
        indexedAttrs.add( Oid.NDN );
        indexedAttrs.add( Oid.ONEALIAS );
        indexedAttrs.add( Oid.SUBALIAS );
        indexedAttrs.add( Oid.UPDN );
        mcfg.setIndexedAttributes( indexedAttrs );
       
        String key = config.getSuffix();
        if( partitions.containsKey( key ) )
        {
            throw new ConfigurationException( "Duplicate partition suffix: " + key );
        }

        partition.init( factoryCfg, mcfg );
        partitions.put( partition.getSuffix( true ).toString(), partition );
       
        Attribute namingContexts = rootDSE.get( NAMINGCTXS_ATTR );
        namingContexts.add( partition.getSuffix( false ).toString() );
    }
</snippet>

-Lyndon-


On 11/1/05, Alex Karasulu < aok123@bellsouth.net> wrote:
Lyndon Washington wrote:

...

> I have added my own CustomPartiton which extends
> AbstractContextPartition.  I have some configuration settings specific
> to my partition, so I have also created a new
> ContextPartitionConfiguration which extends
> MutableContextPartitionConfiguration.
>
Ok can you state your specific goal with the custom partition so I have
more of an understanding of what you're trying to do?

> Unfortunately, in my CustomPartition.doInit() method I attempt to test
> if the configuration that is returned from
> AbstractContextPartition.getConfiguration() is an instance of my new
> configuration, and if it is I want to use the new configuration
> settings to configure the custom partition.  The implementation within
> DefaultContextPartitionNexus.addContextPartition() creates a new
> MutableContextPartitionConfiguration and copies the known values from
> the config that was passed into that method, thus by the time my code
> is called it is never an instance of my new configuration class.

Ok I see.

> Is this done to alleviate some known issue, or is it just an
> oversight.  If it is an oversight, I can fix my local sandbox with a
> 'short sighted' implementation.  If this is deliberately implemented
> this way, how are you supposed to use a new type of
> ContextPartitionConfiguration?

In the server.xml you can set the bean class for the configuration
object's class to use your own configuration class.  Here's where you'd
make the change:

...

  <bean id="examplePartitionConfiguration"
class="org.apache.ldap.server.configu
ration.MutableDirectoryPartitionConfiguration">
    <property name="name"><value>example</value></property>
    <property name="suffix"><value>dc=example,dc=com</value></property>
    <property name="indexedAttributes">
      <set>
        <value>dc</value>
        <value>ou</value>
        <value>objectClass</value>
        <value>krb5PrincipalName</value>
        <value>uid</value>
      </set>
    </property>
    <property name="contextEntry">
      <value>
        objectClass: top
        objectClass: domain
        objectClass: extensibleObject
        dc: example
      </value>
    </property>
  </bean>

...

So if your configuration class is com.example.MyParititionConfig then it
would look like so:

...

  <bean id="examplePartitionConfiguration"
class="com.example.MyPartitionConfig">
    <property name="name"><value>example</value></property>
    <property name="suffix"><value>dc=example,dc=com</value></property>
    <property name="indexedAttributes">
      <set>
        <value>dc</value>
        <value>ou</value>
        <value>objectClass</value>
        <value>krb5PrincipalName</value>
        <value>uid</value>
      </set>
    </property>
    <property name="contextEntry">
      <value>
        objectClass: top
        objectClass: domain
        objectClass: extensibleObject
        dc: example
      </value>
    </property>
  </bean>

...

Give that a try and let us know how it goes.

Cheers,
Alex




--
--------------------------------
Lyndon Washington
Snr. Software Engineer
lwashington@novell.com
1.203.225.1815 (Shelton - CT)
1.781.464.8735 (Waltham - MA)

Novell, Inc.
Software for the Open Enterprise
http://www.novell.com/open



--
--------------------------------
Lyndon Washington
Snr. Software Engineer
lwashington@novell.com
1.203.225.1815 (Shelton - CT)
1.781.464.8735 (Waltham - MA)

Novell, Inc.
Software for the Open Enterprise
http://www.novell.com/open