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.6070...@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