my application is osgi-based, which contains an embedded ADS instance in a form
of an osgi bundle. i am in the process of upgrading from 1.5.7 to 2.0.0m17. i
have a security dir that contains a schema subdirectory extracted from 1.5.7
shared-ldap-schema-0.9.19.jar before the ldap starts up. so i performed the
same for 2.0.0m17 by extracting the same subdirectory from
apacheds-service-2.0.0-M17.jar. as my application starts up, i am using java to
start up the embedded ADS instance. it worked flawlessly using ADS 1.5.7, but i
am having problems with 2.0.0m17. below is the bundle's java code that i have
adjusted from 1.5.7 to accommodate 2.0.0m17:
package com.myembeddedldap;
import org.apache.directory.server.constants.ServerDNConstants;
import org.apache.directory.server.core.DefaultDirectoryService;
import org.apache.directory.server.core.partition.impl.btree.jdbm.JdbmPartition;
import org.apache.directory.server.core.partition.ldif.LdifPartition;
import org.apache.directory.server.core.api.schema.SchemaPartition;
import org.apache.directory.server.ldap.LdapServer;
import org.apache.directory.server.protocol.shared.transport.TcpTransport;
import org.apache.directory.api.ldap.model.name.Dn;
import org.apache.directory.api.ldap.model.schema.SchemaManager;
import org.apache.directory.api.ldap.schemaloader.LdifSchemaLoader;
import org.apache.directory.api.ldap.schemamanager.impl.DefaultSchemaManager;
import org.apache.directory.api.ldap.model.schema.registries.SchemaLoader;
import org.apache.directory.server.core.api.InstanceLayout;
import org.apache.directory.server.core.shared.DefaultDnFactory;
import java.io.*;
import java.util.List;
public class MyEmbeddedLDAP {
private DefaultDirectoryService directoryService_;
private LdapServer ldapServer_;
private static final File SECURITY_DIR = new File("security");
public void start()
throws Exception {
directoryService_ = new DefaultDirectoryService();
directoryService_.setInstanceLayout(new InstanceLayout(SECURITY_DIR));
directoryService_.setAllowAnonymousAccess(true);
directoryService_.setAccessControlEnabled(false);
// directoryService.setExitVmOnShutdown(false);
directoryService_.setShutdownHookEnabled(false);
directoryService_.getChangeLog().setEnabled(false);
SchemaLoader loader = new LdifSchemaLoader(new File(SECURITY_DIR,
"schema"));
SchemaManager schemaManager = new DefaultSchemaManager(loader);
schemaManager.loadAllEnabled();
directoryService_.setSchemaManager(schemaManager);
directoryService_.setDnFactory(new DefaultDnFactory(schemaManager, null));
LdifPartition ldifPartition = new LdifPartition(schemaManager,
directoryService_.getDnFactory());
SchemaPartition schemaPartition = new SchemaPartition(schemaManager);
schemaPartition.setWrappedPartition(ldifPartition);
directoryService_.setSchemaPartition(schemaPartition);
List<Throwable> errors = schemaManager.getErrors();
if (!errors.isEmpty()) {
for (Throwable thr : errors) {
System.out.println(thr.getMessage());
}
}
JdbmPartition systemPartition = new JdbmPartition(schemaManager,
directoryService_.getDnFactory());
systemPartition.setId("system");
systemPartition.setPartitionPath(new File(SECURITY_DIR,
"system").toURI());
systemPartition.setSuffixDn(new Dn(ServerDNConstants.SYSTEM_DN));
systemPartition.setSchemaManager(schemaManager);
directoryService_.setSystemPartition(systemPartition);
ldapServer_ = new LdapServer();
ldapServer_.setTransports(new TcpTransport(10389));
ldapServer_.setDirectoryService(directoryService_);
directoryService_.startup();
ldapServer_.start();
}
public void stop()
throws Throwable {
directoryService_.shutdown();
ldapServer_.stop();
}
}
yet unlike my bundle with the ADS 1.5.7, i am getting the following error when
my ADS 2.0.0m17 bundle attempts to start:
org.apache.directory.api.ldap.model.exception.LdapOtherException:
org.apache.directory.api.ldap.model.exception.LdapOtherException
at
org.apache.directory.server.core.api.partition.AbstractPartition.initialize(AbstractPartition.java:94)
at
org.apache.directory.server.core.DefaultDirectoryService.initialize(DefaultDirectoryService.java:1795)
at
org.apache.directory.server.core.DefaultDirectoryService.startup(DefaultDirectoryService.java:1244)
at
com.teamcenter.esb.internal.ldap.EmbeddedLDAPServer.start(EmbeddedLDAPServer.java:75)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)[:1.7.0_01]
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)[:1.7.0_01]
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.7.0_01]
at java.lang.reflect.Method.invoke(Method.java:601)[:1.7.0_01]
at
org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:297)[7:org.apache.aries.blueprint.core:1.1.0]
at
org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:958)[7:org.apache.aries.blueprint.core:1.1.0]
at
org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:712)[7:org.apache.aries.blueprint.core:1.1.0]
... 34 more
Caused by: java.lang.RuntimeException:
org.apache.directory.api.ldap.model.exception.LdapOtherException
at
org.apache.directory.server.core.api.schema.SchemaPartition.doInit(SchemaPartition.java:226)
at
org.apache.directory.server.core.api.partition.AbstractPartition.initialize(AbstractPartition.java:89)
... 44 more
Caused by: org.apache.directory.api.ldap.model.exception.LdapOtherException
at
org.apache.directory.server.core.api.partition.AbstractPartition.initialize(AbstractPartition.java:94)
at
org.apache.directory.server.core.api.schema.SchemaPartition.doInit(SchemaPartition.java:219)
... 45 more
Caused by: java.lang.NullPointerException
at java.io.File.<init>(File.java:389)[:1.7.0_01]
at
org.apache.directory.server.core.partition.ldif.LdifPartition.doInit(LdifPartition.java:143)
at
org.apache.directory.server.core.api.partition.AbstractPartition.initialize(AbstractPartition.java:89)
what am i doing wrong?
thank you!