directory-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jonathan Russell <jonoruss...@us.ibm.com>
Subject [Apache DS] creating a domain partition.
Date Wed, 12 Dec 2012 21:45:41 GMT
I'm using an embedded Apache DS 1.5 (so I have no server.xml, as far as 
I'm aware), and I'm trying to programmatically add a domain to my root 
partition. I've seen the instructions here:
http://directory.apache.org/apacheds/1.5/144-adding-your-own-partition-resp-suffix.html

They have an end result that I'm looking for "dc=example, dc=com", but 
they don't explain how that's created.

I see the instructions for adding a partition: 

JdbmPartition sevenseasPartition = new JdbmPartition();
sevenseasPartition.setId("sevenseas");
sevenseasPartition.setSuffix("o=sevenseas");
sevenseasPartition.setCacheSize(1000);
sevenseasPartition.init(directoryService);

// Create some indices (optional)
Set<Index<?,ServerEntry>> indexedAttrs = new HashSet<Index<?, 
ServerEntry>>();
indexedAttrs.add( new JdbmIndex<Object, ServerEntry>("objectClass"));
indexedAttrs.add( new JdbmIndex<Object, ServerEntry>("o"));
sevenseasPartition.setIndexedAttributes( indexedAttrs );

//Add partition to the directory service
directoryService.addPartition(sevenseasPartition);

// start the directory service
directoryService.startup();

// create the context entry
ServerEntry entry = new DefaultServerEntry( 
directoryService.getRegistries(), new LdapDN( "o=sevenseas") );
entry.put( "objectClass",  "top", "organization" );
entry.put("o","sevenseas");

// add the context entry
AddContextPartitionOperationContext adOpContext = new 
AddContextPartitionOperationContext( directoryService.getAdminSession(), 
sevenseasPartition );
adOpContext.add( entry, null );
directoryService.getPartitionNexus().addContextPartition( adOpContext );

However, simply changing "o" to "dc" doesn't create a domain of 
"sevenseas" as I expected. If I run this code:
           JdbmPartition sevenseasPartition = new JdbmPartition ();
            sevenseasPartition.setId ("sevenseas");
            sevenseasPartition.setSuffix ("dc=sevenseas");
            sevenseasPartition.setCacheSize (1000);
            sevenseasPartition.init (service);

            // Create some indices (optional)
            Set<Index<?, ServerEntry>> indexedAttrs = new HashSet<Index<?,

ServerEntry>> ();
            indexedAttrs.add (new JdbmIndex<Object, ServerEntry> (
"objectClass"));
            indexedAttrs.add (new JdbmIndex<Object, ServerEntry> ("dc"));
            sevenseasPartition.setIndexedAttributes (indexedAttrs);

            //Add partition to the directory service
            service.addPartition (sevenseasPartition);

            // start the directory service
            service.startup ();

            // create the context entry
            ServerEntry entry = new DefaultServerEntry (service
.getRegistries () , new LdapDN ("dc=sevenseas"));
            entry.put ("objectClass", "top", "organization");
            entry.put ("dc", "sevenseas");
            // add the context entry
            /*
             * AddContextPartitionOperationContext adOpContext = new
             * AddContextPartitionOperationContext 
(service.getAdminSession () ,
             * sevenseasPartition); adOpContext.add (entry, null);
             * service.getPartitionNexus ().addContextPartition 
(adOpContext);
             */

than I get a naming context created in my root, as I expect. But when I 
uncomment out the bottom part (thus adding the context entry), I get an 
exception:
org.apache.directory.shared.ldap.exception.LdapSchemaViolationException: 
Required attributes [2.5.4.10] not found within entry dc=sevenseas
        at 
org.apache.directory.server.core.schema.SchemaInterceptor.assertRequiredAttributesPresent(SchemaInterceptor.java:2199)
        at 
org.apache.directory.server.core.schema.SchemaInterceptor.check(SchemaInterceptor.java:1965)
        at 
org.apache.directory.server.core.schema.SchemaInterceptor.add(SchemaInterceptor.java:2054)
        at 
org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.add(InterceptorChain.java:1196)
        at 
org.apache.directory.server.core.operational.OperationalAttributeInterceptor.add(OperationalAttributeInterceptor.java:202)
        at 
org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.add(InterceptorChain.java:1196)
        at 
org.apache.directory.server.core.changelog.ChangeLogInterceptor.add(ChangeLogInterceptor.java:109)
        at 
org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.add(InterceptorChain.java:1196)
        at 
org.apache.directory.server.core.exception.ExceptionInterceptor.add(ExceptionInterceptor.java:167)
        at 
org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.add(InterceptorChain.java:1196)
        at 
org.apache.directory.server.core.interceptor.BaseInterceptor.add(BaseInterceptor.java:129)
        at 
org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.add(InterceptorChain.java:1196)
        at 
org.apache.directory.server.core.authz.AciAuthorizationInterceptor.add(AciAuthorizationInterceptor.java:455)
        at 
org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.add(InterceptorChain.java:1196)
        at 
org.apache.directory.server.core.referral.ReferralInterceptor.add(ReferralInterceptor.java:251)
        at 
org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.add(InterceptorChain.java:1196)
        at 
org.apache.directory.server.core.authn.AuthenticationInterceptor.add(AuthenticationInterceptor.java:212)
        at 
org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.add(InterceptorChain.java:1196)
        at 
org.apache.directory.server.core.normalization.NormalizationInterceptor.add(NormalizationInterceptor.java:126)
        at 
org.apache.directory.server.core.interceptor.InterceptorChain.add(InterceptorChain.java:756)
        at 
org.apache.directory.server.core.DefaultOperationManager.add(DefaultOperationManager.java:260)
        at 
org.apache.directory.server.core.interceptor.context.AbstractOperationContext.add(AbstractOperationContext.java:300)

Seeing that 2.5.4.10 is the "o" that was used in the example, I added it 
back in: 
            ServerEntry entry = new DefaultServerEntry (service
.getRegistries () , new LdapDN ("dc=sevenseas"));
            entry.put ("objectClass", "top", "organization");
            entry.put ("dc", "sevenseas");
            entry.put ("o", "something");

Which produced this exception:
org.apache.directory.shared.ldap.exception.LdapSchemaViolationException: 
Attribute dc not declared in objectClasses of entry dc=sevenseas
        at 
org.apache.directory.server.core.schema.SchemaInterceptor.assertAllAttributesAllowed(SchemaInterceptor.java:2138)
        at 
org.apache.directory.server.core.schema.SchemaInterceptor.check(SchemaInterceptor.java:1970)
        at 
org.apache.directory.server.core.schema.SchemaInterceptor.add(SchemaInterceptor.java:2054)
        at 
org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.add(InterceptorChain.java:1196)
        at 
org.apache.directory.server.core.operational.OperationalAttributeInterceptor.add(OperationalAttributeInterceptor.java:202)
        at 
org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.add(InterceptorChain.java:1196)
        at 
org.apache.directory.server.core.changelog.ChangeLogInterceptor.add(ChangeLogInterceptor.java:109)
        at 
org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.add(InterceptorChain.java:1196)
        at 
org.apache.directory.server.core.exception.ExceptionInterceptor.add(ExceptionInterceptor.java:167)
        at 
org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.add(InterceptorChain.java:1196)
        at 
org.apache.directory.server.core.interceptor.BaseInterceptor.add(BaseInterceptor.java:129)
        at 
org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.add(InterceptorChain.java:1196)
        at 
org.apache.directory.server.core.authz.AciAuthorizationInterceptor.add(AciAuthorizationInterceptor.java:455)
        at 
org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.add(InterceptorChain.java:1196)
        at 
org.apache.directory.server.core.referral.ReferralInterceptor.add(ReferralInterceptor.java:251)
        at 
org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.add(InterceptorChain.java:1196)
        at 
org.apache.directory.server.core.authn.AuthenticationInterceptor.add(AuthenticationInterceptor.java:212)
        at 
org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.add(InterceptorChain.java:1196)
        at 
org.apache.directory.server.core.normalization.NormalizationInterceptor.add(NormalizationInterceptor.java:126)
        at 
org.apache.directory.server.core.interceptor.InterceptorChain.add(InterceptorChain.java:756)
        at 
org.apache.directory.server.core.DefaultOperationManager.add(DefaultOperationManager.java:260)
        at 
org.apache.directory.server.core.interceptor.context.AbstractOperationContext.add(AbstractOperationContext.java:300)

I'm not sure how to proceed. I saw this thread in the message board: 
http://mail-archives.apache.org/mod_mbox/directory-dev/200809.mbox/%3C48D14DFC.6070201@apache.org%3E



But when I add that to the top of my ldif, it seems to have no affect on 
the behavior at runtime. I suspect the problem in my code is small, but I 
have no idea where it is. Has anyone encountered this or understand what 
I'm doing wrong? 

Thanks,
Jon

Mime
View raw message