On Mon, May 23, 2011 at 2:27 PM, Richard Evans
<[email protected]> wrote:
> I'm not sure I get this. It seems as though using DirectoryServiceBean and
> ServiceBuilder just can never work because of this NPE. Surely that's a bug?
> I do create a schema manager in the XML:
>
> <bean class="org.apache.directory.server.config.beans.DirectoryServiceBean"
> id="dsb">
> ...
> </bean>
>
> <bean id="ds" class="org.apache.directory.server.config.ServiceBuilder"
> factory-method="createDirectoryService">
> <constructor-arg ref="dsb"/>
> <constructor-arg ref="il"/>
> <constructor-arg ref="sm"/>
> </bean>
>
> <bean id="il" class="org.apache.directory.server.core.InstanceLayout">
> ...
> </bean>
>
> <bean id="sm"
> class="org.apache.directory.shared.ldap.schemamanager.impl.DefaultSchemaManager"/>
>
what I mean is that the schema manager created in this way is not
useful unless a schema loader is set.
the procedure goes like this:
SchemaLoader loader = new LdifSchemaLoader(
schemaPartitionDirectory ); // <-- you can also use
JarLdifSchemaLoader
schemaManager = new DefaultSchemaManager( loader );
// We have to load the schema now, otherwise we won't be able
// to initialize the Partitions, as we won't be able to parse
// and normalize their suffix Dn
schemaManager.loadAllEnabled();
HTH
> Richard
>
> -----Original Message-----
> From: [email protected] [mailto:[email protected]] On Behalf Of
> Kiran Ayyagari
> Sent: 22 May 2011 21:02
> To: Apache Directory Developers List
> Subject: Re: Embedding ApacheDS using DirectoryServiceBean etc
>
> On Mon, May 23, 2011 at 1:10 AM, Richard Evans
> <[email protected]> wrote:
>> I'm experimenting with embedding ApacheDS (1.5.8-SNAPSHOT built from trunk)
>> using configuration beans created in Spring XML along with the
>> ServiceBuilder. I've attached where I've got to so far - it is not
>> complete, but I've run into a couple of problems.
>>
>> Firstly I get an NPE:
>>
>> java.lang.NullPointerException
>> at
>> org.apache.directory.server.core.schema.registries.synchronizers.RegistrySynchronizerAdaptor.<init>(RegistrySynchronizerAdaptor.java:123)
>> at
>> org.apache.directory.server.core.schema.SchemaPartition.doInit(SchemaPartition.java:224)
>> at
>> org.apache.directory.server.core.partition.AbstractPartition.initialize(AbstractPartition.java:73)
>> at
>> org.apache.directory.server.core.DefaultDirectoryService.initialize(DefaultDirectoryService.java:1484)
>> at
>> org.apache.directory.server.core.DefaultDirectoryService.startup(DefaultDirectoryService.java:962)
>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> at
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>> at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>> at java.lang.reflect.Method.invoke(Method.java:597)
>> at rde.tests.apacheds.LaunchADS.main(LaunchADS.java:49)
>>
>> It looks as though the SchemaManager instance is never set on the
>> SchemaPartition created by DefaultSchemaService.
>>
> the SchemaManager won't be created by SchemaPartition automatically
> rather we need to set it after loading
> the schema with any of the available schema loaders.
>
> Take a look at the methods initSchemaLdifPartition and
> initDirectoryService present in ApacheDsService class they might give
> you an idea.
>
>> Secondly, in 1.5.7 the suffix for a partition was a string, now it's a Dn.
>> There are lots of constructors for the Dn object - which should be used
>> here?
>>
> you can use the one which takes a single string argument while
> configuring, but in general it is good to use the Dn(SchemaManager,
> String...)
> if you have access to the schema manager.
>> Thanks
>>
>> Richard
>>
>
>
>
> --
> Kiran Ayyagari
>
--
Kiran Ayyagari