You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@directory.apache.org by "Barber, Dan (Contractor)" <Da...@Polycom.com> on 2007/06/27 22:02:15 UTC

Trying to create a new partition configuration class

This is the initial part of my effort to extend ApacheDS to use a
different partition. I'm trying to essentially replicate existing
ApacheDS classes but as my own classes. Once I've got the service
starting using all my own classes then I can begin to modify them for my
purposes.

 

First, I just made my own version of MutableBTreePartitionConfiguration,
changing only the package and class names. Included a jar file with that
new class in apache's lib directory, modified server.xml to now create
the example.com partition using my new partition configuration class,
everything worked perfectly.

 

Next step, I don't think we want a BTree-based implementation, so I
tried to extend directly from PartitionConfiguration. In that class I
attempted to pretty much duplicate the functionality in both
MutableBTreeConfiguration and BTreePartitionConfiguration. I can't seem
to get this to work.

 

Here's what I'm getting in apacheds's rolling log:

 

[13:53:30] ERROR [org.apache.directory.daemon.Bootstrapper] - Failed on
org.apache.directory.server.Service.init(InstallationLayout, String[])

org.apache.directory.server.core.interceptor.InterceptorException:
Failed to initialize interceptor chain. [Root exception is
java.lang.NullPointerException]

            at
org.apache.directory.server.core.interceptor.InterceptorChain.init(Inter
ceptorChain.java:257)

            at
org.apache.directory.server.core.DefaultDirectoryService.initialize(Defa
ultDirectoryService.java:1006)

            at
org.apache.directory.server.core.DefaultDirectoryService.startup(Default
DirectoryService.java:254)

            at
org.apache.directory.server.core.jndi.AbstractContextFactory.getInitialC
ontext(AbstractContextFactory.java:123)

            at javax.naming.spi.NamingManager.getInitialContext(Unknown
Source)

            at javax.naming.InitialContext.getDefaultInitCtx(Unknown
Source)

            at javax.naming.InitialContext.init(Unknown Source)

            at javax.naming.InitialContext.<init>(Unknown Source)

            at javax.naming.directory.InitialDirContext.<init>(Unknown
Source)

            at org.apache.directory.server.Service.init(Service.java:96)

            at
org.apache.directory.daemon.Bootstrapper.callInit(Bootstrapper.java:151)

            at
org.apache.directory.daemon.ProcrunBootstrapper.prunsrvStart(ProcrunBoot
strapper.java:65)

Caused by: java.lang.NullPointerException

            at
org.apache.directory.server.core.partition.impl.btree.ExpressionEnumerat
or.enumConj(ExpressionEnumerator.java:250)

            at
org.apache.directory.server.core.partition.impl.btree.ExpressionEnumerat
or.enumerate(ExpressionEnumerator.java:140)

            at
org.apache.directory.server.core.partition.impl.btree.DefaultSearchEngin
e.search(DefaultSearchEngine.java:135)

            at
org.apache.directory.server.core.partition.impl.btree.BTreePartition.sea
rch(BTreePartition.java:431)

            at
org.apache.directory.server.core.partition.DefaultPartitionNexus.search(
DefaultPartitionNexus.java:922)

            at
org.apache.directory.server.core.authz.GroupCache.initialize(GroupCache.
java:146)

            at
org.apache.directory.server.core.authz.GroupCache.<init>(GroupCache.java
:117)

            at
org.apache.directory.server.core.authz.AuthorizationService.init(Authori
zationService.java:200)

            at
org.apache.directory.server.core.interceptor.InterceptorChain.register0(
InterceptorChain.java:419)

            at
org.apache.directory.server.core.interceptor.InterceptorChain.register(I
nterceptorChain.java:378)

            at
org.apache.directory.server.core.interceptor.InterceptorChain.init(Inter
ceptorChain.java:243)

            ... 11 more

 

I've also attached the server.xml and java code for my new class. Any
ideas what is going on?

 

Thanks,

 

Dan

 


RE: Trying to create a new partition configuration class

Posted by "Barber, Dan (Contractor)" <Da...@Polycom.com>.
Chris,

I noticed my goof as soon as I sent it, you should have them by now. I
have tried my partition with and without the indexedAttributes. That was
something I tried commenting out only when I couldn't get it to load. I
think the server.xml I sent you has everything uncommented, and that's
the server.xml I was using that generated the log files I sent you.

Thanks,

Dan

-----Original Message-----
From: Chris Custine [mailto:chris.custine@gmail.com] 
Sent: Thursday, June 28, 2007 9:44 AM
To: users@directory.apache.org
Subject: Re: Trying to create a new partition configuration class

Hi Dan,
I think the mailing list software is stripping whatever attachment you
are
sending for the code.  All we are getting on the list is server.xml.  If
you
send it to my gmail address in the header I can take a look at it.

Another thing that I was looking at is where you have indexedAttributes
section commented out in your custom partition config.  If you haven't
already done so, try uncommenting that since you are still using
BTreePartitionConfig code, adn see if that helps.  The
getIndexedAttributes
method of the config class gets called upstream from where the exception
is
ocurring and the actual exception is happening when the Auth service
inits
and tries to retrieve group names from the partition.  So I am wondering
if
those indexed attributes section will have an effect.

Chris

On 6/28/07, Barber, Dan (Contractor) <Da...@polycom.com> wrote:
>
> Chris,
>
> Thanks for letting me know that. Here's the code for the class, my
> server.xml and the various logs generated when I tried to start the
> server. Again, if I can answer any questions at all, please don't
> hesistate to ask.
>
> Dan
>
> -----Original Message-----
> From: Chris Custine [mailto:chris.custine@gmail.com]
> Sent: Thursday, June 28, 2007 9:25 AM
> To: users@directory.apache.org
> Subject: Re: Trying to create a new partition configuration class
>
> Hi Dan,
> I forgot to mention that your code got stripped from the email to the
> list
> yesterday so I didn't get to look at it.  If you send it directly to
me
> I
> will be glad to look at it and maybe we can get this working.
>
> Chris
>
>
> On 6/28/07, Barber, Dan (Contractor) <Da...@polycom.com> wrote:
> >
> > Chris,
> >
> > Thanks a lot for the detailed reply. I'd already picked up quite a
bit
> > of this just by going through the code and figuring out where
various
> > things are created, but it's good to know I was mostly on track.
> >
> > I actually am not trying to go with very small baby steps at the
> moment.
> > What I hope to do is create a JdbcPartitionConfiguration class and a
> > JdbcPartition class that are exact replicas of existing classes, so
> that
> > I've added no new functionality, build them and get a directory
> working
> > with those, then I can begin to add our own functionality.
> >
> > I made the first of those steps work just fine. I took a copy of
> > MutableBTreePartitionConfiguration, turned in into
> > JdbcPartitionConfiguration, built the code within our own package,
> jar'd
> > it, put it into the lib directory, changed example.com within
> server.xml
> > to use that new package, and started up ApacheDS. Worked like a
champ.
> >
> > Now, we don't feel like we need the BTree pieces for the partition
> we'll
> > be doing, so the next step was to directly extend
> > PartitionConfiguration, to create a class at the same level of
> > inheritance as BTreePartitionConfiguration. I essentially merged the
> > code from MutableBTreePartitionConfiguration and
> > BTreePartitionConfiguration, as I discovered the various properties
> that
> > are required by the Spring implementation. That was the
> > JdbcPartitionConfiguration that I included with my email yesterday.
I
> > then went through the same process but now the partition doesn't
load.
> > That's when I get the following error in the log:
> >
> > [13:53:30] ERROR [org.apache.directory.daemon.Bootstrapper] - Failed
> on
> > org.apache.directory.server.Service.init (InstallationLayout,
> String[])
> > org.apache.directory.server.core.interceptor.InterceptorException:
> > Failed to initialize interceptor chain. [Root exception is
> > java.lang.NullPointerException]
> >         at
> > org.apache.directory.server.core.interceptor.InterceptorChain.init
> (Inter
> > ceptorChain.java:257)
> >         at
> >
>
org.apache.directory.server.core.DefaultDirectoryService.initialize(Defa
> > ultDirectoryService.java:1006)
> >         at
> > org.apache.directory.server.core.DefaultDirectoryService.startup
> (Default
> > DirectoryService.java:254)
> >         at
> >
>
org.apache.directory.server.core.jndi.AbstractContextFactory.getInitialC
> > ontext(AbstractContextFactory.java:123)
> >         at javax.naming.spi.NamingManager.getInitialContext (Unknown
> > Source)
> >         at javax.naming.InitialContext.getDefaultInitCtx(Unknown
> Source)
> >         at javax.naming.InitialContext.init(Unknown Source)
> >         at javax.naming.InitialContext.<init>(Unknown Source)
> >         at javax.naming.directory.InitialDirContext.<init>(Unknown
> > Source)
> >         at org.apache.directory.server.Service.init(Service.java:96)
> >         at
> > org.apache.directory.daemon.Bootstrapper.callInit
> (Bootstrapper.java:151)
> >         at
> >
>
org.apache.directory.daemon.ProcrunBootstrapper.prunsrvStart(ProcrunBoot
> > strapper.java:65)
> > Caused by: java.lang.NullPointerException
> >         at
> >
>
org.apache.directory.server.core.partition.impl.btree.ExpressionEnumerat
> > or.enumConj(ExpressionEnumerator.java:250)
> >         at
> >
>
org.apache.directory.server.core.partition.impl.btree.ExpressionEnumerat
> > or.enumerate(ExpressionEnumerator.java:140)
> >         at
> >
>
org.apache.directory.server.core.partition.impl.btree.DefaultSearchEngin
> > e.search(DefaultSearchEngine.java:135)
> >         at
> >
>
org.apache.directory.server.core.partition.impl.btree.BTreePartition.sea
> > rch(BTreePartition.java:431)
> >         at
> >
>
org.apache.directory.server.core.partition.DefaultPartitionNexus.search
> (
> > DefaultPartitionNexus.java:922)
> >         at
> >
>
org.apache.directory.server.core.authz.GroupCache.initialize(GroupCache.
> > java:146)
> >         at
> >
>
org.apache.directory.server.core.authz.GroupCache.<init>(GroupCache.java
> > :117)
> >         at
> >
>
org.apache.directory.server.core.authz.AuthorizationService.init(Authori
> > zationService.java:200)
> >         at
> >
>
org.apache.directory.server.core.interceptor.InterceptorChain.register0(
> > InterceptorChain.java :419)
> >         at
> >
>
org.apache.directory.server.core.interceptor.InterceptorChain.register(I
> > nterceptorChain.java:378)
> >         at
> >
>
org.apache.directory.server.core.interceptor.InterceptorChain.init(Inter
> > ceptorChain.java :243)
> >         ... 11 more
> >
> > I thought perhaps some of the entries in server.xml were somehow not
> > compatible with a Partition that doesn't extend
> > MutableBTreePartitionConfiguration, but that didn't seem to help
> > anything. I'm somewhat confused, my class should look identical to
> > MutableBTreePartitionConfiguration other than it doesn't extend
> > BTreePartitionConfiguration, it directly extends
> PartitionConfiguration.
> > There isn't anything in the code currently that expects a
> > PartitionConfiguration to have BTreePartitionConfiguration in its
> > inheritance tree is there?
> >
> > Perhaps another piece of useful information. The error that I am
> getting
> > is the same stack trace that I get if I set "optimizerEnabled" to
> false
> > within the default server.xml for example.com. I currently have no
> idea
> > whether those two are actually related, or if I just happened across
> > some bizarre coincidence, but since I found it I thought I'd include
> > that information.
> >
> > If this triggers any additional questions, please ask, I'll be happy
> to
> > provide anything I can.
> >
> > Thanks,
> >
> > Dan
> >
> > -----Original Message-----
> > From: Chris Custine [mailto:chris.custine@gmail.com]
> > Sent: Wednesday, June 27, 2007 11:09 PM
> > To: users@directory.apache.org
> > Subject: Re: Trying to create a new partition configuration class
> >
> > If I understand all of this correctly, I think the problem is that
> > PartitionConfiguration which is the base for
> > MutableBTreePartitionConfiguration and BTreePartitionConfiguration
is
> > specific to JdbmPartition and instantiates the JdbmPartition.  We
need
> > to
> > make some improvements to make this easier and more intuitive, but
in
> > the
> > mean time you can do the following things to get you closer to a
> custom
> > partition:
> >
> > 1).  Take the PartitionConfiguration class and create a
> > JdbcPartitionConfiguration from it.  We need to make this more
> > intuitive,
> > but this is just a POJO to receive the config properties from the
> > server.xmlthat are specific to your partition, and this bean creates
> > the partition
> > object when Spring initializes.
> > 2).  You will need to implement your own actual partition (ie
> > JdbcPartition
> > which extends AbstractPartition) and return a configured instance of
> it
> > from
> > your JdbcPartitionConfiguration.getContextPartition().
> > 3).  There are a few properties in PartitionConfiguration that look
> like
> > they are required, even though we have no interface to enforce.  In
> > particular it looks like getIndexedAttributes() is called by
> > DefaultDirectoryService, so you may have to keep a stub of it in
your
> > JdbcPartitionConfig.
> >
> > There may actually be other uses of methods in
PartitionConfiguration
> > that
> > are required, but this is an area that needs a little clean up so
bear
> > with
> > us...
> >
> > Hopefully this helps you out a bit.  This is not an area that is
> > completely
> > intuitive and I have actually never had to do this yet.  We are
> getting
> > ready to add some new optional partition types so we will
undoubtedly
> be
> > running into the same issues and fixing them.  Please let me know
how
> > this
> > works out for you and if there are any inaccuracies in what I said.
I
> > will
> > file a Jira issue about cleaning up the PartitionConfiguration
> > heirarchy,
> > etc. so that we get that fixed.
> >
> > Thanks,
> > Chris
> >
> > On 6/27/07, Barber, Dan (Contractor) <Da...@polycom.com> wrote:
> > >
> > >  This is the initial part of my effort to extend ApacheDS to use a
> > > different partition. I'm trying to essentially replicate existing
> > ApacheDS
> > > classes but as my own classes. Once I've got the service starting
> > using all
> > > my own classes then I can begin to modify them for my purposes.
> > >
> > >
> > >
> > > First, I just made my own version of
> > MutableBTreePartitionConfiguration,
> > > changing only the package and class names. Included a jar file
with
> > that new
> > > class in apache's lib directory, modified server.xml to now create
> the
> > > example.com partition using my new partition configuration class,
> > > everything worked perfectly.
> > >
> > >
> > >
> > > Next step, I don't think we want a BTree-based implementation, so
I
> > tried
> > > to extend directly from PartitionConfiguration. In that class I
> > attempted to
> > > pretty much duplicate the functionality in both
> > MutableBTreeConfiguration
> > > and BTreePartitionConfiguration. I can't seem to get this to work.
> > >
> > >
> > >
> > > Here's what I'm getting in apacheds's rolling log:
> > >
> > >
> > >
> > > [13:53:30] ERROR [org.apache.directory.daemon.Bootstrapper] -
Failed
> > on
> > > org.apache.directory.server.Service.init (InstallationLayout,
> String[])
> > >
> > > org.apache.directory.server.core.interceptor.InterceptorException:
> > Failed
> > > to initialize interceptor chain. [Root exception is
> > > java.lang.NullPointerException ]
> > >
> > >             at
> > >
org.apache.directory.server.core.interceptor.InterceptorChain.init(
> > > InterceptorChain.java:257)
> > >
> > >             at
> > >
org.apache.directory.server.core.DefaultDirectoryService.initialize
> (
> > > DefaultDirectoryService.java:1006)
> > >
> > >             at
> > > org.apache.directory.server.core.DefaultDirectoryService.startup(
> > > DefaultDirectoryService.java:254)
> > >
> > >             at
> > >
> >
>
org.apache.directory.server.core.jndi.AbstractContextFactory.getInitialC
> > ontext
> > > (AbstractContextFactory.java:123)
> > >
> > >             at
> > javax.naming.spi.NamingManager.getInitialContext(Unknown
> > > Source)
> > >
> > >             at
javax.naming.InitialContext.getDefaultInitCtx(Unknown
> > > Source)
> > >
> > >             at javax.naming.InitialContext.init(Unknown Source)
> > >
> > >             at javax.naming.InitialContext.<init>(Unknown Source)
> > >
> > >             at
> javax.naming.directory.InitialDirContext.<init>(Unknown
> > > Source)
> > >
> > >             at
> > org.apache.directory.server.Service.init (Service.java:96)
> > >
> > >             at org.apache.directory.daemon.Bootstrapper.callInit(
> > > Bootstrapper.java:151)
> > >
> > >             at
> > > org.apache.directory.daemon.ProcrunBootstrapper.prunsrvStart (
> > > ProcrunBootstrapper.java:65)
> > >
> > > Caused by: java.lang.NullPointerException
> > >
> > >             at
> > >
> >
>
org.apache.directory.server.core.partition.impl.btree.ExpressionEnumerat
> > or.enumConj
> > > (ExpressionEnumerator.java:250)
> > >
> > >             at
> > >
> >
>
org.apache.directory.server.core.partition.impl.btree.ExpressionEnumerat
> > or.enumerate
> > > (ExpressionEnumerator.java:140)
> > >
> > >             at
> > >
> >
>
org.apache.directory.server.core.partition.impl.btree.DefaultSearchEngin
> > e.search
> > > (DefaultSearchEngine.java:135)
> > >
> > >             at
> > >
> >
>
org.apache.directory.server.core.partition.impl.btree.BTreePartition.sea
> > rch
> > > (BTreePartition.java:431)
> > >
> > >             at
> > >
> >
>
org.apache.directory.server.core.partition.DefaultPartitionNexus.search(
> > > DefaultPartitionNexus.java:922)
> > >
> > >             at
> > > org.apache.directory.server.core.authz.GroupCache.initialize(
> > > GroupCache.java:146)
> > >
> > >             at
> > org.apache.directory.server.core.authz.GroupCache.<init>(
> > > GroupCache.java :117)
> > >
> > >             at
> > > org.apache.directory.server.core.authz.AuthorizationService.init(
> > > AuthorizationService.java:200)
> > >
> > >             at
> > >
> >
>
org.apache.directory.server.core.interceptor.InterceptorChain.register0
> (
> > > InterceptorChain.java:419)
> > >
> > >             at
> > >
> >
>
org.apache.directory.server.core.interceptor.InterceptorChain.register(
> > > InterceptorChain.java:378)
> > >
> > >             at
> > >
org.apache.directory.server.core.interceptor.InterceptorChain.init(
> > > InterceptorChain.java:243)
> > >
> > >             ... 11 more
> > >
> > >
> > >
> > > I've also attached the server.xml and java code for my new class.
> Any
> > > ideas what is going on?
> > >
> > >
> > >
> > > Thanks,
> > >
> > >
> > >
> > > Dan
> > >
> > >
> > >
> > >
> >
>
>

Re: Trying to create a new partition configuration class

Posted by Chris Custine <ch...@gmail.com>.
Hi Dan,
I think the mailing list software is stripping whatever attachment you are
sending for the code.  All we are getting on the list is server.xml.  If you
send it to my gmail address in the header I can take a look at it.

Another thing that I was looking at is where you have indexedAttributes
section commented out in your custom partition config.  If you haven't
already done so, try uncommenting that since you are still using
BTreePartitionConfig code, adn see if that helps.  The getIndexedAttributes
method of the config class gets called upstream from where the exception is
ocurring and the actual exception is happening when the Auth service inits
and tries to retrieve group names from the partition.  So I am wondering if
those indexed attributes section will have an effect.

Chris

On 6/28/07, Barber, Dan (Contractor) <Da...@polycom.com> wrote:
>
> Chris,
>
> Thanks for letting me know that. Here's the code for the class, my
> server.xml and the various logs generated when I tried to start the
> server. Again, if I can answer any questions at all, please don't
> hesistate to ask.
>
> Dan
>
> -----Original Message-----
> From: Chris Custine [mailto:chris.custine@gmail.com]
> Sent: Thursday, June 28, 2007 9:25 AM
> To: users@directory.apache.org
> Subject: Re: Trying to create a new partition configuration class
>
> Hi Dan,
> I forgot to mention that your code got stripped from the email to the
> list
> yesterday so I didn't get to look at it.  If you send it directly to me
> I
> will be glad to look at it and maybe we can get this working.
>
> Chris
>
>
> On 6/28/07, Barber, Dan (Contractor) <Da...@polycom.com> wrote:
> >
> > Chris,
> >
> > Thanks a lot for the detailed reply. I'd already picked up quite a bit
> > of this just by going through the code and figuring out where various
> > things are created, but it's good to know I was mostly on track.
> >
> > I actually am not trying to go with very small baby steps at the
> moment.
> > What I hope to do is create a JdbcPartitionConfiguration class and a
> > JdbcPartition class that are exact replicas of existing classes, so
> that
> > I've added no new functionality, build them and get a directory
> working
> > with those, then I can begin to add our own functionality.
> >
> > I made the first of those steps work just fine. I took a copy of
> > MutableBTreePartitionConfiguration, turned in into
> > JdbcPartitionConfiguration, built the code within our own package,
> jar'd
> > it, put it into the lib directory, changed example.com within
> server.xml
> > to use that new package, and started up ApacheDS. Worked like a champ.
> >
> > Now, we don't feel like we need the BTree pieces for the partition
> we'll
> > be doing, so the next step was to directly extend
> > PartitionConfiguration, to create a class at the same level of
> > inheritance as BTreePartitionConfiguration. I essentially merged the
> > code from MutableBTreePartitionConfiguration and
> > BTreePartitionConfiguration, as I discovered the various properties
> that
> > are required by the Spring implementation. That was the
> > JdbcPartitionConfiguration that I included with my email yesterday. I
> > then went through the same process but now the partition doesn't load.
> > That's when I get the following error in the log:
> >
> > [13:53:30] ERROR [org.apache.directory.daemon.Bootstrapper] - Failed
> on
> > org.apache.directory.server.Service.init (InstallationLayout,
> String[])
> > org.apache.directory.server.core.interceptor.InterceptorException:
> > Failed to initialize interceptor chain. [Root exception is
> > java.lang.NullPointerException]
> >         at
> > org.apache.directory.server.core.interceptor.InterceptorChain.init
> (Inter
> > ceptorChain.java:257)
> >         at
> >
> org.apache.directory.server.core.DefaultDirectoryService.initialize(Defa
> > ultDirectoryService.java:1006)
> >         at
> > org.apache.directory.server.core.DefaultDirectoryService.startup
> (Default
> > DirectoryService.java:254)
> >         at
> >
> org.apache.directory.server.core.jndi.AbstractContextFactory.getInitialC
> > ontext(AbstractContextFactory.java:123)
> >         at javax.naming.spi.NamingManager.getInitialContext (Unknown
> > Source)
> >         at javax.naming.InitialContext.getDefaultInitCtx(Unknown
> Source)
> >         at javax.naming.InitialContext.init(Unknown Source)
> >         at javax.naming.InitialContext.<init>(Unknown Source)
> >         at javax.naming.directory.InitialDirContext.<init>(Unknown
> > Source)
> >         at org.apache.directory.server.Service.init(Service.java:96)
> >         at
> > org.apache.directory.daemon.Bootstrapper.callInit
> (Bootstrapper.java:151)
> >         at
> >
> org.apache.directory.daemon.ProcrunBootstrapper.prunsrvStart(ProcrunBoot
> > strapper.java:65)
> > Caused by: java.lang.NullPointerException
> >         at
> >
> org.apache.directory.server.core.partition.impl.btree.ExpressionEnumerat
> > or.enumConj(ExpressionEnumerator.java:250)
> >         at
> >
> org.apache.directory.server.core.partition.impl.btree.ExpressionEnumerat
> > or.enumerate(ExpressionEnumerator.java:140)
> >         at
> >
> org.apache.directory.server.core.partition.impl.btree.DefaultSearchEngin
> > e.search(DefaultSearchEngine.java:135)
> >         at
> >
> org.apache.directory.server.core.partition.impl.btree.BTreePartition.sea
> > rch(BTreePartition.java:431)
> >         at
> >
> org.apache.directory.server.core.partition.DefaultPartitionNexus.search
> (
> > DefaultPartitionNexus.java:922)
> >         at
> >
> org.apache.directory.server.core.authz.GroupCache.initialize(GroupCache.
> > java:146)
> >         at
> >
> org.apache.directory.server.core.authz.GroupCache.<init>(GroupCache.java
> > :117)
> >         at
> >
> org.apache.directory.server.core.authz.AuthorizationService.init(Authori
> > zationService.java:200)
> >         at
> >
> org.apache.directory.server.core.interceptor.InterceptorChain.register0(
> > InterceptorChain.java :419)
> >         at
> >
> org.apache.directory.server.core.interceptor.InterceptorChain.register(I
> > nterceptorChain.java:378)
> >         at
> >
> org.apache.directory.server.core.interceptor.InterceptorChain.init(Inter
> > ceptorChain.java :243)
> >         ... 11 more
> >
> > I thought perhaps some of the entries in server.xml were somehow not
> > compatible with a Partition that doesn't extend
> > MutableBTreePartitionConfiguration, but that didn't seem to help
> > anything. I'm somewhat confused, my class should look identical to
> > MutableBTreePartitionConfiguration other than it doesn't extend
> > BTreePartitionConfiguration, it directly extends
> PartitionConfiguration.
> > There isn't anything in the code currently that expects a
> > PartitionConfiguration to have BTreePartitionConfiguration in its
> > inheritance tree is there?
> >
> > Perhaps another piece of useful information. The error that I am
> getting
> > is the same stack trace that I get if I set "optimizerEnabled" to
> false
> > within the default server.xml for example.com. I currently have no
> idea
> > whether those two are actually related, or if I just happened across
> > some bizarre coincidence, but since I found it I thought I'd include
> > that information.
> >
> > If this triggers any additional questions, please ask, I'll be happy
> to
> > provide anything I can.
> >
> > Thanks,
> >
> > Dan
> >
> > -----Original Message-----
> > From: Chris Custine [mailto:chris.custine@gmail.com]
> > Sent: Wednesday, June 27, 2007 11:09 PM
> > To: users@directory.apache.org
> > Subject: Re: Trying to create a new partition configuration class
> >
> > If I understand all of this correctly, I think the problem is that
> > PartitionConfiguration which is the base for
> > MutableBTreePartitionConfiguration and BTreePartitionConfiguration is
> > specific to JdbmPartition and instantiates the JdbmPartition.  We need
> > to
> > make some improvements to make this easier and more intuitive, but in
> > the
> > mean time you can do the following things to get you closer to a
> custom
> > partition:
> >
> > 1).  Take the PartitionConfiguration class and create a
> > JdbcPartitionConfiguration from it.  We need to make this more
> > intuitive,
> > but this is just a POJO to receive the config properties from the
> > server.xmlthat are specific to your partition, and this bean creates
> > the partition
> > object when Spring initializes.
> > 2).  You will need to implement your own actual partition (ie
> > JdbcPartition
> > which extends AbstractPartition) and return a configured instance of
> it
> > from
> > your JdbcPartitionConfiguration.getContextPartition().
> > 3).  There are a few properties in PartitionConfiguration that look
> like
> > they are required, even though we have no interface to enforce.  In
> > particular it looks like getIndexedAttributes() is called by
> > DefaultDirectoryService, so you may have to keep a stub of it in your
> > JdbcPartitionConfig.
> >
> > There may actually be other uses of methods in PartitionConfiguration
> > that
> > are required, but this is an area that needs a little clean up so bear
> > with
> > us...
> >
> > Hopefully this helps you out a bit.  This is not an area that is
> > completely
> > intuitive and I have actually never had to do this yet.  We are
> getting
> > ready to add some new optional partition types so we will undoubtedly
> be
> > running into the same issues and fixing them.  Please let me know how
> > this
> > works out for you and if there are any inaccuracies in what I said.  I
> > will
> > file a Jira issue about cleaning up the PartitionConfiguration
> > heirarchy,
> > etc. so that we get that fixed.
> >
> > Thanks,
> > Chris
> >
> > On 6/27/07, Barber, Dan (Contractor) <Da...@polycom.com> wrote:
> > >
> > >  This is the initial part of my effort to extend ApacheDS to use a
> > > different partition. I'm trying to essentially replicate existing
> > ApacheDS
> > > classes but as my own classes. Once I've got the service starting
> > using all
> > > my own classes then I can begin to modify them for my purposes.
> > >
> > >
> > >
> > > First, I just made my own version of
> > MutableBTreePartitionConfiguration,
> > > changing only the package and class names. Included a jar file with
> > that new
> > > class in apache's lib directory, modified server.xml to now create
> the
> > > example.com partition using my new partition configuration class,
> > > everything worked perfectly.
> > >
> > >
> > >
> > > Next step, I don't think we want a BTree-based implementation, so I
> > tried
> > > to extend directly from PartitionConfiguration. In that class I
> > attempted to
> > > pretty much duplicate the functionality in both
> > MutableBTreeConfiguration
> > > and BTreePartitionConfiguration. I can't seem to get this to work.
> > >
> > >
> > >
> > > Here's what I'm getting in apacheds's rolling log:
> > >
> > >
> > >
> > > [13:53:30] ERROR [org.apache.directory.daemon.Bootstrapper] - Failed
> > on
> > > org.apache.directory.server.Service.init (InstallationLayout,
> String[])
> > >
> > > org.apache.directory.server.core.interceptor.InterceptorException:
> > Failed
> > > to initialize interceptor chain. [Root exception is
> > > java.lang.NullPointerException ]
> > >
> > >             at
> > > org.apache.directory.server.core.interceptor.InterceptorChain.init(
> > > InterceptorChain.java:257)
> > >
> > >             at
> > > org.apache.directory.server.core.DefaultDirectoryService.initialize
> (
> > > DefaultDirectoryService.java:1006)
> > >
> > >             at
> > > org.apache.directory.server.core.DefaultDirectoryService.startup(
> > > DefaultDirectoryService.java:254)
> > >
> > >             at
> > >
> >
> org.apache.directory.server.core.jndi.AbstractContextFactory.getInitialC
> > ontext
> > > (AbstractContextFactory.java:123)
> > >
> > >             at
> > javax.naming.spi.NamingManager.getInitialContext(Unknown
> > > Source)
> > >
> > >             at javax.naming.InitialContext.getDefaultInitCtx(Unknown
> > > Source)
> > >
> > >             at javax.naming.InitialContext.init(Unknown Source)
> > >
> > >             at javax.naming.InitialContext.<init>(Unknown Source)
> > >
> > >             at
> javax.naming.directory.InitialDirContext.<init>(Unknown
> > > Source)
> > >
> > >             at
> > org.apache.directory.server.Service.init (Service.java:96)
> > >
> > >             at org.apache.directory.daemon.Bootstrapper.callInit(
> > > Bootstrapper.java:151)
> > >
> > >             at
> > > org.apache.directory.daemon.ProcrunBootstrapper.prunsrvStart (
> > > ProcrunBootstrapper.java:65)
> > >
> > > Caused by: java.lang.NullPointerException
> > >
> > >             at
> > >
> >
> org.apache.directory.server.core.partition.impl.btree.ExpressionEnumerat
> > or.enumConj
> > > (ExpressionEnumerator.java:250)
> > >
> > >             at
> > >
> >
> org.apache.directory.server.core.partition.impl.btree.ExpressionEnumerat
> > or.enumerate
> > > (ExpressionEnumerator.java:140)
> > >
> > >             at
> > >
> >
> org.apache.directory.server.core.partition.impl.btree.DefaultSearchEngin
> > e.search
> > > (DefaultSearchEngine.java:135)
> > >
> > >             at
> > >
> >
> org.apache.directory.server.core.partition.impl.btree.BTreePartition.sea
> > rch
> > > (BTreePartition.java:431)
> > >
> > >             at
> > >
> >
> org.apache.directory.server.core.partition.DefaultPartitionNexus.search(
> > > DefaultPartitionNexus.java:922)
> > >
> > >             at
> > > org.apache.directory.server.core.authz.GroupCache.initialize(
> > > GroupCache.java:146)
> > >
> > >             at
> > org.apache.directory.server.core.authz.GroupCache.<init>(
> > > GroupCache.java :117)
> > >
> > >             at
> > > org.apache.directory.server.core.authz.AuthorizationService.init(
> > > AuthorizationService.java:200)
> > >
> > >             at
> > >
> >
> org.apache.directory.server.core.interceptor.InterceptorChain.register0
> (
> > > InterceptorChain.java:419)
> > >
> > >             at
> > >
> >
> org.apache.directory.server.core.interceptor.InterceptorChain.register(
> > > InterceptorChain.java:378)
> > >
> > >             at
> > > org.apache.directory.server.core.interceptor.InterceptorChain.init(
> > > InterceptorChain.java:243)
> > >
> > >             ... 11 more
> > >
> > >
> > >
> > > I've also attached the server.xml and java code for my new class.
> Any
> > > ideas what is going on?
> > >
> > >
> > >
> > > Thanks,
> > >
> > >
> > >
> > > Dan
> > >
> > >
> > >
> > >
> >
>
>

RE: Trying to create a new partition configuration class

Posted by "Barber, Dan (Contractor)" <Da...@Polycom.com>.
Chris,

Thanks for letting me know that. Here's the code for the class, my
server.xml and the various logs generated when I tried to start the
server. Again, if I can answer any questions at all, please don't
hesistate to ask.

Dan

-----Original Message-----
From: Chris Custine [mailto:chris.custine@gmail.com] 
Sent: Thursday, June 28, 2007 9:25 AM
To: users@directory.apache.org
Subject: Re: Trying to create a new partition configuration class

Hi Dan,
I forgot to mention that your code got stripped from the email to the
list
yesterday so I didn't get to look at it.  If you send it directly to me
I
will be glad to look at it and maybe we can get this working.

Chris


On 6/28/07, Barber, Dan (Contractor) <Da...@polycom.com> wrote:
>
> Chris,
>
> Thanks a lot for the detailed reply. I'd already picked up quite a bit
> of this just by going through the code and figuring out where various
> things are created, but it's good to know I was mostly on track.
>
> I actually am not trying to go with very small baby steps at the
moment.
> What I hope to do is create a JdbcPartitionConfiguration class and a
> JdbcPartition class that are exact replicas of existing classes, so
that
> I've added no new functionality, build them and get a directory
working
> with those, then I can begin to add our own functionality.
>
> I made the first of those steps work just fine. I took a copy of
> MutableBTreePartitionConfiguration, turned in into
> JdbcPartitionConfiguration, built the code within our own package,
jar'd
> it, put it into the lib directory, changed example.com within
server.xml
> to use that new package, and started up ApacheDS. Worked like a champ.
>
> Now, we don't feel like we need the BTree pieces for the partition
we'll
> be doing, so the next step was to directly extend
> PartitionConfiguration, to create a class at the same level of
> inheritance as BTreePartitionConfiguration. I essentially merged the
> code from MutableBTreePartitionConfiguration and
> BTreePartitionConfiguration, as I discovered the various properties
that
> are required by the Spring implementation. That was the
> JdbcPartitionConfiguration that I included with my email yesterday. I
> then went through the same process but now the partition doesn't load.
> That's when I get the following error in the log:
>
> [13:53:30] ERROR [org.apache.directory.daemon.Bootstrapper] - Failed
on
> org.apache.directory.server.Service.init (InstallationLayout,
String[])
> org.apache.directory.server.core.interceptor.InterceptorException:
> Failed to initialize interceptor chain. [Root exception is
> java.lang.NullPointerException]
>         at
> org.apache.directory.server.core.interceptor.InterceptorChain.init
(Inter
> ceptorChain.java:257)
>         at
>
org.apache.directory.server.core.DefaultDirectoryService.initialize(Defa
> ultDirectoryService.java:1006)
>         at
> org.apache.directory.server.core.DefaultDirectoryService.startup
(Default
> DirectoryService.java:254)
>         at
>
org.apache.directory.server.core.jndi.AbstractContextFactory.getInitialC
> ontext(AbstractContextFactory.java:123)
>         at javax.naming.spi.NamingManager.getInitialContext (Unknown
> Source)
>         at javax.naming.InitialContext.getDefaultInitCtx(Unknown
Source)
>         at javax.naming.InitialContext.init(Unknown Source)
>         at javax.naming.InitialContext.<init>(Unknown Source)
>         at javax.naming.directory.InitialDirContext.<init>(Unknown
> Source)
>         at org.apache.directory.server.Service.init(Service.java:96)
>         at
> org.apache.directory.daemon.Bootstrapper.callInit
(Bootstrapper.java:151)
>         at
>
org.apache.directory.daemon.ProcrunBootstrapper.prunsrvStart(ProcrunBoot
> strapper.java:65)
> Caused by: java.lang.NullPointerException
>         at
>
org.apache.directory.server.core.partition.impl.btree.ExpressionEnumerat
> or.enumConj(ExpressionEnumerator.java:250)
>         at
>
org.apache.directory.server.core.partition.impl.btree.ExpressionEnumerat
> or.enumerate(ExpressionEnumerator.java:140)
>         at
>
org.apache.directory.server.core.partition.impl.btree.DefaultSearchEngin
> e.search(DefaultSearchEngine.java:135)
>         at
>
org.apache.directory.server.core.partition.impl.btree.BTreePartition.sea
> rch(BTreePartition.java:431)
>         at
>
org.apache.directory.server.core.partition.DefaultPartitionNexus.search
(
> DefaultPartitionNexus.java:922)
>         at
>
org.apache.directory.server.core.authz.GroupCache.initialize(GroupCache.
> java:146)
>         at
>
org.apache.directory.server.core.authz.GroupCache.<init>(GroupCache.java
> :117)
>         at
>
org.apache.directory.server.core.authz.AuthorizationService.init(Authori
> zationService.java:200)
>         at
>
org.apache.directory.server.core.interceptor.InterceptorChain.register0(
> InterceptorChain.java :419)
>         at
>
org.apache.directory.server.core.interceptor.InterceptorChain.register(I
> nterceptorChain.java:378)
>         at
>
org.apache.directory.server.core.interceptor.InterceptorChain.init(Inter
> ceptorChain.java :243)
>         ... 11 more
>
> I thought perhaps some of the entries in server.xml were somehow not
> compatible with a Partition that doesn't extend
> MutableBTreePartitionConfiguration, but that didn't seem to help
> anything. I'm somewhat confused, my class should look identical to
> MutableBTreePartitionConfiguration other than it doesn't extend
> BTreePartitionConfiguration, it directly extends
PartitionConfiguration.
> There isn't anything in the code currently that expects a
> PartitionConfiguration to have BTreePartitionConfiguration in its
> inheritance tree is there?
>
> Perhaps another piece of useful information. The error that I am
getting
> is the same stack trace that I get if I set "optimizerEnabled" to
false
> within the default server.xml for example.com. I currently have no
idea
> whether those two are actually related, or if I just happened across
> some bizarre coincidence, but since I found it I thought I'd include
> that information.
>
> If this triggers any additional questions, please ask, I'll be happy
to
> provide anything I can.
>
> Thanks,
>
> Dan
>
> -----Original Message-----
> From: Chris Custine [mailto:chris.custine@gmail.com]
> Sent: Wednesday, June 27, 2007 11:09 PM
> To: users@directory.apache.org
> Subject: Re: Trying to create a new partition configuration class
>
> If I understand all of this correctly, I think the problem is that
> PartitionConfiguration which is the base for
> MutableBTreePartitionConfiguration and BTreePartitionConfiguration is
> specific to JdbmPartition and instantiates the JdbmPartition.  We need
> to
> make some improvements to make this easier and more intuitive, but in
> the
> mean time you can do the following things to get you closer to a
custom
> partition:
>
> 1).  Take the PartitionConfiguration class and create a
> JdbcPartitionConfiguration from it.  We need to make this more
> intuitive,
> but this is just a POJO to receive the config properties from the
> server.xmlthat are specific to your partition, and this bean creates
> the partition
> object when Spring initializes.
> 2).  You will need to implement your own actual partition (ie
> JdbcPartition
> which extends AbstractPartition) and return a configured instance of
it
> from
> your JdbcPartitionConfiguration.getContextPartition().
> 3).  There are a few properties in PartitionConfiguration that look
like
> they are required, even though we have no interface to enforce.  In
> particular it looks like getIndexedAttributes() is called by
> DefaultDirectoryService, so you may have to keep a stub of it in your
> JdbcPartitionConfig.
>
> There may actually be other uses of methods in PartitionConfiguration
> that
> are required, but this is an area that needs a little clean up so bear
> with
> us...
>
> Hopefully this helps you out a bit.  This is not an area that is
> completely
> intuitive and I have actually never had to do this yet.  We are
getting
> ready to add some new optional partition types so we will undoubtedly
be
> running into the same issues and fixing them.  Please let me know how
> this
> works out for you and if there are any inaccuracies in what I said.  I
> will
> file a Jira issue about cleaning up the PartitionConfiguration
> heirarchy,
> etc. so that we get that fixed.
>
> Thanks,
> Chris
>
> On 6/27/07, Barber, Dan (Contractor) <Da...@polycom.com> wrote:
> >
> >  This is the initial part of my effort to extend ApacheDS to use a
> > different partition. I'm trying to essentially replicate existing
> ApacheDS
> > classes but as my own classes. Once I've got the service starting
> using all
> > my own classes then I can begin to modify them for my purposes.
> >
> >
> >
> > First, I just made my own version of
> MutableBTreePartitionConfiguration,
> > changing only the package and class names. Included a jar file with
> that new
> > class in apache's lib directory, modified server.xml to now create
the
> > example.com partition using my new partition configuration class,
> > everything worked perfectly.
> >
> >
> >
> > Next step, I don't think we want a BTree-based implementation, so I
> tried
> > to extend directly from PartitionConfiguration. In that class I
> attempted to
> > pretty much duplicate the functionality in both
> MutableBTreeConfiguration
> > and BTreePartitionConfiguration. I can't seem to get this to work.
> >
> >
> >
> > Here's what I'm getting in apacheds's rolling log:
> >
> >
> >
> > [13:53:30] ERROR [org.apache.directory.daemon.Bootstrapper] - Failed
> on
> > org.apache.directory.server.Service.init (InstallationLayout,
String[])
> >
> > org.apache.directory.server.core.interceptor.InterceptorException:
> Failed
> > to initialize interceptor chain. [Root exception is
> > java.lang.NullPointerException ]
> >
> >             at
> > org.apache.directory.server.core.interceptor.InterceptorChain.init(
> > InterceptorChain.java:257)
> >
> >             at
> > org.apache.directory.server.core.DefaultDirectoryService.initialize
(
> > DefaultDirectoryService.java:1006)
> >
> >             at
> > org.apache.directory.server.core.DefaultDirectoryService.startup(
> > DefaultDirectoryService.java:254)
> >
> >             at
> >
>
org.apache.directory.server.core.jndi.AbstractContextFactory.getInitialC
> ontext
> > (AbstractContextFactory.java:123)
> >
> >             at
> javax.naming.spi.NamingManager.getInitialContext(Unknown
> > Source)
> >
> >             at javax.naming.InitialContext.getDefaultInitCtx(Unknown
> > Source)
> >
> >             at javax.naming.InitialContext.init(Unknown Source)
> >
> >             at javax.naming.InitialContext.<init>(Unknown Source)
> >
> >             at
javax.naming.directory.InitialDirContext.<init>(Unknown
> > Source)
> >
> >             at
> org.apache.directory.server.Service.init (Service.java:96)
> >
> >             at org.apache.directory.daemon.Bootstrapper.callInit(
> > Bootstrapper.java:151)
> >
> >             at
> > org.apache.directory.daemon.ProcrunBootstrapper.prunsrvStart (
> > ProcrunBootstrapper.java:65)
> >
> > Caused by: java.lang.NullPointerException
> >
> >             at
> >
>
org.apache.directory.server.core.partition.impl.btree.ExpressionEnumerat
> or.enumConj
> > (ExpressionEnumerator.java:250)
> >
> >             at
> >
>
org.apache.directory.server.core.partition.impl.btree.ExpressionEnumerat
> or.enumerate
> > (ExpressionEnumerator.java:140)
> >
> >             at
> >
>
org.apache.directory.server.core.partition.impl.btree.DefaultSearchEngin
> e.search
> > (DefaultSearchEngine.java:135)
> >
> >             at
> >
>
org.apache.directory.server.core.partition.impl.btree.BTreePartition.sea
> rch
> > (BTreePartition.java:431)
> >
> >             at
> >
>
org.apache.directory.server.core.partition.DefaultPartitionNexus.search(
> > DefaultPartitionNexus.java:922)
> >
> >             at
> > org.apache.directory.server.core.authz.GroupCache.initialize(
> > GroupCache.java:146)
> >
> >             at
> org.apache.directory.server.core.authz.GroupCache.<init>(
> > GroupCache.java :117)
> >
> >             at
> > org.apache.directory.server.core.authz.AuthorizationService.init(
> > AuthorizationService.java:200)
> >
> >             at
> >
>
org.apache.directory.server.core.interceptor.InterceptorChain.register0
(
> > InterceptorChain.java:419)
> >
> >             at
> >
>
org.apache.directory.server.core.interceptor.InterceptorChain.register(
> > InterceptorChain.java:378)
> >
> >             at
> > org.apache.directory.server.core.interceptor.InterceptorChain.init(
> > InterceptorChain.java:243)
> >
> >             ... 11 more
> >
> >
> >
> > I've also attached the server.xml and java code for my new class.
Any
> > ideas what is going on?
> >
> >
> >
> > Thanks,
> >
> >
> >
> > Dan
> >
> >
> >
> >
>

Re: Trying to create a new partition configuration class

Posted by Chris Custine <ch...@gmail.com>.
Hi Dan,
I forgot to mention that your code got stripped from the email to the list
yesterday so I didn't get to look at it.  If you send it directly to me I
will be glad to look at it and maybe we can get this working.

Chris


On 6/28/07, Barber, Dan (Contractor) <Da...@polycom.com> wrote:
>
> Chris,
>
> Thanks a lot for the detailed reply. I'd already picked up quite a bit
> of this just by going through the code and figuring out where various
> things are created, but it's good to know I was mostly on track.
>
> I actually am not trying to go with very small baby steps at the moment.
> What I hope to do is create a JdbcPartitionConfiguration class and a
> JdbcPartition class that are exact replicas of existing classes, so that
> I've added no new functionality, build them and get a directory working
> with those, then I can begin to add our own functionality.
>
> I made the first of those steps work just fine. I took a copy of
> MutableBTreePartitionConfiguration, turned in into
> JdbcPartitionConfiguration, built the code within our own package, jar'd
> it, put it into the lib directory, changed example.com within server.xml
> to use that new package, and started up ApacheDS. Worked like a champ.
>
> Now, we don't feel like we need the BTree pieces for the partition we'll
> be doing, so the next step was to directly extend
> PartitionConfiguration, to create a class at the same level of
> inheritance as BTreePartitionConfiguration. I essentially merged the
> code from MutableBTreePartitionConfiguration and
> BTreePartitionConfiguration, as I discovered the various properties that
> are required by the Spring implementation. That was the
> JdbcPartitionConfiguration that I included with my email yesterday. I
> then went through the same process but now the partition doesn't load.
> That's when I get the following error in the log:
>
> [13:53:30] ERROR [org.apache.directory.daemon.Bootstrapper] - Failed on
> org.apache.directory.server.Service.init (InstallationLayout, String[])
> org.apache.directory.server.core.interceptor.InterceptorException:
> Failed to initialize interceptor chain. [Root exception is
> java.lang.NullPointerException]
>         at
> org.apache.directory.server.core.interceptor.InterceptorChain.init (Inter
> ceptorChain.java:257)
>         at
> org.apache.directory.server.core.DefaultDirectoryService.initialize(Defa
> ultDirectoryService.java:1006)
>         at
> org.apache.directory.server.core.DefaultDirectoryService.startup (Default
> DirectoryService.java:254)
>         at
> org.apache.directory.server.core.jndi.AbstractContextFactory.getInitialC
> ontext(AbstractContextFactory.java:123)
>         at javax.naming.spi.NamingManager.getInitialContext (Unknown
> Source)
>         at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
>         at javax.naming.InitialContext.init(Unknown Source)
>         at javax.naming.InitialContext.<init>(Unknown Source)
>         at javax.naming.directory.InitialDirContext.<init>(Unknown
> Source)
>         at org.apache.directory.server.Service.init(Service.java:96)
>         at
> org.apache.directory.daemon.Bootstrapper.callInit (Bootstrapper.java:151)
>         at
> org.apache.directory.daemon.ProcrunBootstrapper.prunsrvStart(ProcrunBoot
> strapper.java:65)
> Caused by: java.lang.NullPointerException
>         at
> org.apache.directory.server.core.partition.impl.btree.ExpressionEnumerat
> or.enumConj(ExpressionEnumerator.java:250)
>         at
> org.apache.directory.server.core.partition.impl.btree.ExpressionEnumerat
> or.enumerate(ExpressionEnumerator.java:140)
>         at
> org.apache.directory.server.core.partition.impl.btree.DefaultSearchEngin
> e.search(DefaultSearchEngine.java:135)
>         at
> org.apache.directory.server.core.partition.impl.btree.BTreePartition.sea
> rch(BTreePartition.java:431)
>         at
> org.apache.directory.server.core.partition.DefaultPartitionNexus.search (
> DefaultPartitionNexus.java:922)
>         at
> org.apache.directory.server.core.authz.GroupCache.initialize(GroupCache.
> java:146)
>         at
> org.apache.directory.server.core.authz.GroupCache.<init>(GroupCache.java
> :117)
>         at
> org.apache.directory.server.core.authz.AuthorizationService.init(Authori
> zationService.java:200)
>         at
> org.apache.directory.server.core.interceptor.InterceptorChain.register0(
> InterceptorChain.java :419)
>         at
> org.apache.directory.server.core.interceptor.InterceptorChain.register(I
> nterceptorChain.java:378)
>         at
> org.apache.directory.server.core.interceptor.InterceptorChain.init(Inter
> ceptorChain.java :243)
>         ... 11 more
>
> I thought perhaps some of the entries in server.xml were somehow not
> compatible with a Partition that doesn't extend
> MutableBTreePartitionConfiguration, but that didn't seem to help
> anything. I'm somewhat confused, my class should look identical to
> MutableBTreePartitionConfiguration other than it doesn't extend
> BTreePartitionConfiguration, it directly extends PartitionConfiguration.
> There isn't anything in the code currently that expects a
> PartitionConfiguration to have BTreePartitionConfiguration in its
> inheritance tree is there?
>
> Perhaps another piece of useful information. The error that I am getting
> is the same stack trace that I get if I set "optimizerEnabled" to false
> within the default server.xml for example.com. I currently have no idea
> whether those two are actually related, or if I just happened across
> some bizarre coincidence, but since I found it I thought I'd include
> that information.
>
> If this triggers any additional questions, please ask, I'll be happy to
> provide anything I can.
>
> Thanks,
>
> Dan
>
> -----Original Message-----
> From: Chris Custine [mailto:chris.custine@gmail.com]
> Sent: Wednesday, June 27, 2007 11:09 PM
> To: users@directory.apache.org
> Subject: Re: Trying to create a new partition configuration class
>
> If I understand all of this correctly, I think the problem is that
> PartitionConfiguration which is the base for
> MutableBTreePartitionConfiguration and BTreePartitionConfiguration is
> specific to JdbmPartition and instantiates the JdbmPartition.  We need
> to
> make some improvements to make this easier and more intuitive, but in
> the
> mean time you can do the following things to get you closer to a custom
> partition:
>
> 1).  Take the PartitionConfiguration class and create a
> JdbcPartitionConfiguration from it.  We need to make this more
> intuitive,
> but this is just a POJO to receive the config properties from the
> server.xmlthat are specific to your partition, and this bean creates
> the partition
> object when Spring initializes.
> 2).  You will need to implement your own actual partition (ie
> JdbcPartition
> which extends AbstractPartition) and return a configured instance of it
> from
> your JdbcPartitionConfiguration.getContextPartition().
> 3).  There are a few properties in PartitionConfiguration that look like
> they are required, even though we have no interface to enforce.  In
> particular it looks like getIndexedAttributes() is called by
> DefaultDirectoryService, so you may have to keep a stub of it in your
> JdbcPartitionConfig.
>
> There may actually be other uses of methods in PartitionConfiguration
> that
> are required, but this is an area that needs a little clean up so bear
> with
> us...
>
> Hopefully this helps you out a bit.  This is not an area that is
> completely
> intuitive and I have actually never had to do this yet.  We are getting
> ready to add some new optional partition types so we will undoubtedly be
> running into the same issues and fixing them.  Please let me know how
> this
> works out for you and if there are any inaccuracies in what I said.  I
> will
> file a Jira issue about cleaning up the PartitionConfiguration
> heirarchy,
> etc. so that we get that fixed.
>
> Thanks,
> Chris
>
> On 6/27/07, Barber, Dan (Contractor) <Da...@polycom.com> wrote:
> >
> >  This is the initial part of my effort to extend ApacheDS to use a
> > different partition. I'm trying to essentially replicate existing
> ApacheDS
> > classes but as my own classes. Once I've got the service starting
> using all
> > my own classes then I can begin to modify them for my purposes.
> >
> >
> >
> > First, I just made my own version of
> MutableBTreePartitionConfiguration,
> > changing only the package and class names. Included a jar file with
> that new
> > class in apache's lib directory, modified server.xml to now create the
> > example.com partition using my new partition configuration class,
> > everything worked perfectly.
> >
> >
> >
> > Next step, I don't think we want a BTree-based implementation, so I
> tried
> > to extend directly from PartitionConfiguration. In that class I
> attempted to
> > pretty much duplicate the functionality in both
> MutableBTreeConfiguration
> > and BTreePartitionConfiguration. I can't seem to get this to work.
> >
> >
> >
> > Here's what I'm getting in apacheds's rolling log:
> >
> >
> >
> > [13:53:30] ERROR [org.apache.directory.daemon.Bootstrapper] - Failed
> on
> > org.apache.directory.server.Service.init (InstallationLayout, String[])
> >
> > org.apache.directory.server.core.interceptor.InterceptorException:
> Failed
> > to initialize interceptor chain. [Root exception is
> > java.lang.NullPointerException ]
> >
> >             at
> > org.apache.directory.server.core.interceptor.InterceptorChain.init(
> > InterceptorChain.java:257)
> >
> >             at
> > org.apache.directory.server.core.DefaultDirectoryService.initialize (
> > DefaultDirectoryService.java:1006)
> >
> >             at
> > org.apache.directory.server.core.DefaultDirectoryService.startup(
> > DefaultDirectoryService.java:254)
> >
> >             at
> >
> org.apache.directory.server.core.jndi.AbstractContextFactory.getInitialC
> ontext
> > (AbstractContextFactory.java:123)
> >
> >             at
> javax.naming.spi.NamingManager.getInitialContext(Unknown
> > Source)
> >
> >             at javax.naming.InitialContext.getDefaultInitCtx(Unknown
> > Source)
> >
> >             at javax.naming.InitialContext.init(Unknown Source)
> >
> >             at javax.naming.InitialContext.<init>(Unknown Source)
> >
> >             at javax.naming.directory.InitialDirContext.<init>(Unknown
> > Source)
> >
> >             at
> org.apache.directory.server.Service.init (Service.java:96)
> >
> >             at org.apache.directory.daemon.Bootstrapper.callInit(
> > Bootstrapper.java:151)
> >
> >             at
> > org.apache.directory.daemon.ProcrunBootstrapper.prunsrvStart (
> > ProcrunBootstrapper.java:65)
> >
> > Caused by: java.lang.NullPointerException
> >
> >             at
> >
> org.apache.directory.server.core.partition.impl.btree.ExpressionEnumerat
> or.enumConj
> > (ExpressionEnumerator.java:250)
> >
> >             at
> >
> org.apache.directory.server.core.partition.impl.btree.ExpressionEnumerat
> or.enumerate
> > (ExpressionEnumerator.java:140)
> >
> >             at
> >
> org.apache.directory.server.core.partition.impl.btree.DefaultSearchEngin
> e.search
> > (DefaultSearchEngine.java:135)
> >
> >             at
> >
> org.apache.directory.server.core.partition.impl.btree.BTreePartition.sea
> rch
> > (BTreePartition.java:431)
> >
> >             at
> >
> org.apache.directory.server.core.partition.DefaultPartitionNexus.search(
> > DefaultPartitionNexus.java:922)
> >
> >             at
> > org.apache.directory.server.core.authz.GroupCache.initialize(
> > GroupCache.java:146)
> >
> >             at
> org.apache.directory.server.core.authz.GroupCache.<init>(
> > GroupCache.java :117)
> >
> >             at
> > org.apache.directory.server.core.authz.AuthorizationService.init(
> > AuthorizationService.java:200)
> >
> >             at
> >
> org.apache.directory.server.core.interceptor.InterceptorChain.register0 (
> > InterceptorChain.java:419)
> >
> >             at
> >
> org.apache.directory.server.core.interceptor.InterceptorChain.register(
> > InterceptorChain.java:378)
> >
> >             at
> > org.apache.directory.server.core.interceptor.InterceptorChain.init(
> > InterceptorChain.java:243)
> >
> >             ... 11 more
> >
> >
> >
> > I've also attached the server.xml and java code for my new class. Any
> > ideas what is going on?
> >
> >
> >
> > Thanks,
> >
> >
> >
> > Dan
> >
> >
> >
> >
>

RE: Trying to create a new partition configuration class

Posted by "Barber, Dan (Contractor)" <Da...@Polycom.com>.
Chris,

Thanks a lot for the detailed reply. I'd already picked up quite a bit
of this just by going through the code and figuring out where various
things are created, but it's good to know I was mostly on track.

I actually am not trying to go with very small baby steps at the moment.
What I hope to do is create a JdbcPartitionConfiguration class and a
JdbcPartition class that are exact replicas of existing classes, so that
I've added no new functionality, build them and get a directory working
with those, then I can begin to add our own functionality.

I made the first of those steps work just fine. I took a copy of
MutableBTreePartitionConfiguration, turned in into
JdbcPartitionConfiguration, built the code within our own package, jar'd
it, put it into the lib directory, changed example.com within server.xml
to use that new package, and started up ApacheDS. Worked like a champ.

Now, we don't feel like we need the BTree pieces for the partition we'll
be doing, so the next step was to directly extend
PartitionConfiguration, to create a class at the same level of
inheritance as BTreePartitionConfiguration. I essentially merged the
code from MutableBTreePartitionConfiguration and
BTreePartitionConfiguration, as I discovered the various properties that
are required by the Spring implementation. That was the
JdbcPartitionConfiguration that I included with my email yesterday. I
then went through the same process but now the partition doesn't load.
That's when I get the following error in the log:

[13:53:30] ERROR [org.apache.directory.daemon.Bootstrapper] - Failed on
org.apache.directory.server.Service.init(InstallationLayout, String[])
org.apache.directory.server.core.interceptor.InterceptorException:
Failed to initialize interceptor chain. [Root exception is
java.lang.NullPointerException]
	at
org.apache.directory.server.core.interceptor.InterceptorChain.init(Inter
ceptorChain.java:257)
	at
org.apache.directory.server.core.DefaultDirectoryService.initialize(Defa
ultDirectoryService.java:1006)
	at
org.apache.directory.server.core.DefaultDirectoryService.startup(Default
DirectoryService.java:254)
	at
org.apache.directory.server.core.jndi.AbstractContextFactory.getInitialC
ontext(AbstractContextFactory.java:123)
	at javax.naming.spi.NamingManager.getInitialContext(Unknown
Source)
	at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
	at javax.naming.InitialContext.init(Unknown Source)
	at javax.naming.InitialContext.<init>(Unknown Source)
	at javax.naming.directory.InitialDirContext.<init>(Unknown
Source)
	at org.apache.directory.server.Service.init(Service.java:96)
	at
org.apache.directory.daemon.Bootstrapper.callInit(Bootstrapper.java:151)
	at
org.apache.directory.daemon.ProcrunBootstrapper.prunsrvStart(ProcrunBoot
strapper.java:65)
Caused by: java.lang.NullPointerException
	at
org.apache.directory.server.core.partition.impl.btree.ExpressionEnumerat
or.enumConj(ExpressionEnumerator.java:250)
	at
org.apache.directory.server.core.partition.impl.btree.ExpressionEnumerat
or.enumerate(ExpressionEnumerator.java:140)
	at
org.apache.directory.server.core.partition.impl.btree.DefaultSearchEngin
e.search(DefaultSearchEngine.java:135)
	at
org.apache.directory.server.core.partition.impl.btree.BTreePartition.sea
rch(BTreePartition.java:431)
	at
org.apache.directory.server.core.partition.DefaultPartitionNexus.search(
DefaultPartitionNexus.java:922)
	at
org.apache.directory.server.core.authz.GroupCache.initialize(GroupCache.
java:146)
	at
org.apache.directory.server.core.authz.GroupCache.<init>(GroupCache.java
:117)
	at
org.apache.directory.server.core.authz.AuthorizationService.init(Authori
zationService.java:200)
	at
org.apache.directory.server.core.interceptor.InterceptorChain.register0(
InterceptorChain.java:419)
	at
org.apache.directory.server.core.interceptor.InterceptorChain.register(I
nterceptorChain.java:378)
	at
org.apache.directory.server.core.interceptor.InterceptorChain.init(Inter
ceptorChain.java:243)
	... 11 more

I thought perhaps some of the entries in server.xml were somehow not
compatible with a Partition that doesn't extend
MutableBTreePartitionConfiguration, but that didn't seem to help
anything. I'm somewhat confused, my class should look identical to
MutableBTreePartitionConfiguration other than it doesn't extend
BTreePartitionConfiguration, it directly extends PartitionConfiguration.
There isn't anything in the code currently that expects a
PartitionConfiguration to have BTreePartitionConfiguration in its
inheritance tree is there?

Perhaps another piece of useful information. The error that I am getting
is the same stack trace that I get if I set "optimizerEnabled" to false
within the default server.xml for example.com. I currently have no idea
whether those two are actually related, or if I just happened across
some bizarre coincidence, but since I found it I thought I'd include
that information.

If this triggers any additional questions, please ask, I'll be happy to
provide anything I can.

Thanks,

Dan 

-----Original Message-----
From: Chris Custine [mailto:chris.custine@gmail.com] 
Sent: Wednesday, June 27, 2007 11:09 PM
To: users@directory.apache.org
Subject: Re: Trying to create a new partition configuration class

If I understand all of this correctly, I think the problem is that
PartitionConfiguration which is the base for
MutableBTreePartitionConfiguration and BTreePartitionConfiguration is
specific to JdbmPartition and instantiates the JdbmPartition.  We need
to
make some improvements to make this easier and more intuitive, but in
the
mean time you can do the following things to get you closer to a custom
partition:

1).  Take the PartitionConfiguration class and create a
JdbcPartitionConfiguration from it.  We need to make this more
intuitive,
but this is just a POJO to receive the config properties from the
server.xmlthat are specific to your partition, and this bean creates
the partition
object when Spring initializes.
2).  You will need to implement your own actual partition (ie
JdbcPartition
which extends AbstractPartition) and return a configured instance of it
from
your JdbcPartitionConfiguration.getContextPartition().
3).  There are a few properties in PartitionConfiguration that look like
they are required, even though we have no interface to enforce.  In
particular it looks like getIndexedAttributes() is called by
DefaultDirectoryService, so you may have to keep a stub of it in your
JdbcPartitionConfig.

There may actually be other uses of methods in PartitionConfiguration
that
are required, but this is an area that needs a little clean up so bear
with
us...

Hopefully this helps you out a bit.  This is not an area that is
completely
intuitive and I have actually never had to do this yet.  We are getting
ready to add some new optional partition types so we will undoubtedly be
running into the same issues and fixing them.  Please let me know how
this
works out for you and if there are any inaccuracies in what I said.  I
will
file a Jira issue about cleaning up the PartitionConfiguration
heirarchy,
etc. so that we get that fixed.

Thanks,
Chris

On 6/27/07, Barber, Dan (Contractor) <Da...@polycom.com> wrote:
>
>  This is the initial part of my effort to extend ApacheDS to use a
> different partition. I'm trying to essentially replicate existing
ApacheDS
> classes but as my own classes. Once I've got the service starting
using all
> my own classes then I can begin to modify them for my purposes.
>
>
>
> First, I just made my own version of
MutableBTreePartitionConfiguration,
> changing only the package and class names. Included a jar file with
that new
> class in apache's lib directory, modified server.xml to now create the
> example.com partition using my new partition configuration class,
> everything worked perfectly.
>
>
>
> Next step, I don't think we want a BTree-based implementation, so I
tried
> to extend directly from PartitionConfiguration. In that class I
attempted to
> pretty much duplicate the functionality in both
MutableBTreeConfiguration
> and BTreePartitionConfiguration. I can't seem to get this to work.
>
>
>
> Here's what I'm getting in apacheds's rolling log:
>
>
>
> [13:53:30] ERROR [org.apache.directory.daemon.Bootstrapper] - Failed
on
> org.apache.directory.server.Service.init(InstallationLayout, String[])
>
> org.apache.directory.server.core.interceptor.InterceptorException:
Failed
> to initialize interceptor chain. [Root exception is
> java.lang.NullPointerException]
>
>             at
> org.apache.directory.server.core.interceptor.InterceptorChain.init(
> InterceptorChain.java:257)
>
>             at
> org.apache.directory.server.core.DefaultDirectoryService.initialize(
> DefaultDirectoryService.java:1006)
>
>             at
> org.apache.directory.server.core.DefaultDirectoryService.startup(
> DefaultDirectoryService.java:254)
>
>             at
>
org.apache.directory.server.core.jndi.AbstractContextFactory.getInitialC
ontext
> (AbstractContextFactory.java:123)
>
>             at
javax.naming.spi.NamingManager.getInitialContext(Unknown
> Source)
>
>             at javax.naming.InitialContext.getDefaultInitCtx(Unknown
> Source)
>
>             at javax.naming.InitialContext.init(Unknown Source)
>
>             at javax.naming.InitialContext.<init>(Unknown Source)
>
>             at javax.naming.directory.InitialDirContext.<init>(Unknown
> Source)
>
>             at
org.apache.directory.server.Service.init(Service.java:96)
>
>             at org.apache.directory.daemon.Bootstrapper.callInit(
> Bootstrapper.java:151)
>
>             at
> org.apache.directory.daemon.ProcrunBootstrapper.prunsrvStart(
> ProcrunBootstrapper.java:65)
>
> Caused by: java.lang.NullPointerException
>
>             at
>
org.apache.directory.server.core.partition.impl.btree.ExpressionEnumerat
or.enumConj
> (ExpressionEnumerator.java:250)
>
>             at
>
org.apache.directory.server.core.partition.impl.btree.ExpressionEnumerat
or.enumerate
> (ExpressionEnumerator.java:140)
>
>             at
>
org.apache.directory.server.core.partition.impl.btree.DefaultSearchEngin
e.search
> (DefaultSearchEngine.java:135)
>
>             at
>
org.apache.directory.server.core.partition.impl.btree.BTreePartition.sea
rch
> (BTreePartition.java:431)
>
>             at
>
org.apache.directory.server.core.partition.DefaultPartitionNexus.search(
> DefaultPartitionNexus.java:922)
>
>             at
> org.apache.directory.server.core.authz.GroupCache.initialize(
> GroupCache.java:146)
>
>             at
org.apache.directory.server.core.authz.GroupCache.<init>(
> GroupCache.java:117)
>
>             at
> org.apache.directory.server.core.authz.AuthorizationService.init(
> AuthorizationService.java:200)
>
>             at
>
org.apache.directory.server.core.interceptor.InterceptorChain.register0(
> InterceptorChain.java:419)
>
>             at
>
org.apache.directory.server.core.interceptor.InterceptorChain.register(
> InterceptorChain.java:378)
>
>             at
> org.apache.directory.server.core.interceptor.InterceptorChain.init(
> InterceptorChain.java:243)
>
>             ... 11 more
>
>
>
> I've also attached the server.xml and java code for my new class. Any
> ideas what is going on?
>
>
>
> Thanks,
>
>
>
> Dan
>
>
>
>

Re: Trying to create a new partition configuration class

Posted by Chris Custine <ch...@gmail.com>.
If I understand all of this correctly, I think the problem is that
PartitionConfiguration which is the base for
MutableBTreePartitionConfiguration and BTreePartitionConfiguration is
specific to JdbmPartition and instantiates the JdbmPartition.  We need to
make some improvements to make this easier and more intuitive, but in the
mean time you can do the following things to get you closer to a custom
partition:

1).  Take the PartitionConfiguration class and create a
JdbcPartitionConfiguration from it.  We need to make this more intuitive,
but this is just a POJO to receive the config properties from the
server.xmlthat are specific to your partition, and this bean creates
the partition
object when Spring initializes.
2).  You will need to implement your own actual partition (ie JdbcPartition
which extends AbstractPartition) and return a configured instance of it from
your JdbcPartitionConfiguration.getContextPartition().
3).  There are a few properties in PartitionConfiguration that look like
they are required, even though we have no interface to enforce.  In
particular it looks like getIndexedAttributes() is called by
DefaultDirectoryService, so you may have to keep a stub of it in your
JdbcPartitionConfig.

There may actually be other uses of methods in PartitionConfiguration that
are required, but this is an area that needs a little clean up so bear with
us...

Hopefully this helps you out a bit.  This is not an area that is completely
intuitive and I have actually never had to do this yet.  We are getting
ready to add some new optional partition types so we will undoubtedly be
running into the same issues and fixing them.  Please let me know how this
works out for you and if there are any inaccuracies in what I said.  I will
file a Jira issue about cleaning up the PartitionConfiguration heirarchy,
etc. so that we get that fixed.

Thanks,
Chris

On 6/27/07, Barber, Dan (Contractor) <Da...@polycom.com> wrote:
>
>  This is the initial part of my effort to extend ApacheDS to use a
> different partition. I'm trying to essentially replicate existing ApacheDS
> classes but as my own classes. Once I've got the service starting using all
> my own classes then I can begin to modify them for my purposes.
>
>
>
> First, I just made my own version of MutableBTreePartitionConfiguration,
> changing only the package and class names. Included a jar file with that new
> class in apache's lib directory, modified server.xml to now create the
> example.com partition using my new partition configuration class,
> everything worked perfectly.
>
>
>
> Next step, I don't think we want a BTree-based implementation, so I tried
> to extend directly from PartitionConfiguration. In that class I attempted to
> pretty much duplicate the functionality in both MutableBTreeConfiguration
> and BTreePartitionConfiguration. I can't seem to get this to work.
>
>
>
> Here's what I'm getting in apacheds's rolling log:
>
>
>
> [13:53:30] ERROR [org.apache.directory.daemon.Bootstrapper] - Failed on
> org.apache.directory.server.Service.init(InstallationLayout, String[])
>
> org.apache.directory.server.core.interceptor.InterceptorException: Failed
> to initialize interceptor chain. [Root exception is
> java.lang.NullPointerException]
>
>             at
> org.apache.directory.server.core.interceptor.InterceptorChain.init(
> InterceptorChain.java:257)
>
>             at
> org.apache.directory.server.core.DefaultDirectoryService.initialize(
> DefaultDirectoryService.java:1006)
>
>             at
> org.apache.directory.server.core.DefaultDirectoryService.startup(
> DefaultDirectoryService.java:254)
>
>             at
> org.apache.directory.server.core.jndi.AbstractContextFactory.getInitialContext
> (AbstractContextFactory.java:123)
>
>             at javax.naming.spi.NamingManager.getInitialContext(Unknown
> Source)
>
>             at javax.naming.InitialContext.getDefaultInitCtx(Unknown
> Source)
>
>             at javax.naming.InitialContext.init(Unknown Source)
>
>             at javax.naming.InitialContext.<init>(Unknown Source)
>
>             at javax.naming.directory.InitialDirContext.<init>(Unknown
> Source)
>
>             at org.apache.directory.server.Service.init(Service.java:96)
>
>             at org.apache.directory.daemon.Bootstrapper.callInit(
> Bootstrapper.java:151)
>
>             at
> org.apache.directory.daemon.ProcrunBootstrapper.prunsrvStart(
> ProcrunBootstrapper.java:65)
>
> Caused by: java.lang.NullPointerException
>
>             at
> org.apache.directory.server.core.partition.impl.btree.ExpressionEnumerator.enumConj
> (ExpressionEnumerator.java:250)
>
>             at
> org.apache.directory.server.core.partition.impl.btree.ExpressionEnumerator.enumerate
> (ExpressionEnumerator.java:140)
>
>             at
> org.apache.directory.server.core.partition.impl.btree.DefaultSearchEngine.search
> (DefaultSearchEngine.java:135)
>
>             at
> org.apache.directory.server.core.partition.impl.btree.BTreePartition.search
> (BTreePartition.java:431)
>
>             at
> org.apache.directory.server.core.partition.DefaultPartitionNexus.search(
> DefaultPartitionNexus.java:922)
>
>             at
> org.apache.directory.server.core.authz.GroupCache.initialize(
> GroupCache.java:146)
>
>             at org.apache.directory.server.core.authz.GroupCache.<init>(
> GroupCache.java:117)
>
>             at
> org.apache.directory.server.core.authz.AuthorizationService.init(
> AuthorizationService.java:200)
>
>             at
> org.apache.directory.server.core.interceptor.InterceptorChain.register0(
> InterceptorChain.java:419)
>
>             at
> org.apache.directory.server.core.interceptor.InterceptorChain.register(
> InterceptorChain.java:378)
>
>             at
> org.apache.directory.server.core.interceptor.InterceptorChain.init(
> InterceptorChain.java:243)
>
>             ... 11 more
>
>
>
> I've also attached the server.xml and java code for my new class. Any
> ideas what is going on?
>
>
>
> Thanks,
>
>
>
> Dan
>
>
>
>