Running Apache DS embedded in my application
Here is an abbreviated version of how we use it:
File workingDirectory = ...;Partition partition = new JdbmPartition();partition.setId(...);partition.setSuffix(...);DirectoryService directoryService = new DefaultDirectoryService();directoryService.setWorkingDirectory(workingDirectory);directoryService.addPartition(partition);LdapService ldapService = new LdapService();ldapService.setSocketAcceptor(new SocketAcceptor(null));ldapService.setIpPort(...);ldapService.setDirectoryService(directoryService);directoryService.startup();ldapService.start();
the 2.x sample is located at folloing link :
I wasn't able to make it run neither with cringe's, Kevin's nor Jörg Pfünder's version. Received constantly NPEs from within my JUnit test. I have debugged that and compiled all of them to a working solution:
public class DirContextSourceAnonAuthTest { private static DirectoryService directoryService; private static LdapServer ldapServer; @BeforeClass public static void startApacheDs() throws Exception { String buildDirectory = System.getProperty("buildDirectory"); File workingDirectory = new File(buildDirectory, "apacheds-work"); workingDirectory.mkdir(); directoryService = new DefaultDirectoryService(); directoryService.setWorkingDirectory(workingDirectory); SchemaPartition schemaPartition = directoryService.getSchemaService() .getSchemaPartition(); LdifPartition ldifPartition = new LdifPartition(); String workingDirectoryPath = directoryService.getWorkingDirectory() .getPath(); ldifPartition.setWorkingDirectory(workingDirectoryPath + "/schema"); File schemaRepository = new File(workingDirectory, "schema"); SchemaLdifExtractor extractor = new DefaultSchemaLdifExtractor( workingDirectory); extractor.extractOrCopy(true); schemaPartition.setWrappedPartition(ldifPartition); SchemaLoader loader = new LdifSchemaLoader(schemaRepository); SchemaManager schemaManager = new DefaultSchemaManager(loader); directoryService.setSchemaManager(schemaManager); schemaManager.loadAllEnabled(); schemaPartition.setSchemaManager(schemaManager); List<Throwable> errors = schemaManager.getErrors(); if (!errors.isEmpty()) throw new Exception("Schema load failed : " + errors); JdbmPartition systemPartition = new JdbmPartition(); systemPartition.setId("system"); systemPartition.setPartitionDir(new File(directoryService .getWorkingDirectory(), "system")); systemPartition.setSuffix(ServerDNConstants.SYSTEM_DN); systemPartition.setSchemaManager(schemaManager); directoryService.setSystemPartition(systemPartition); directoryService.setShutdownHookEnabled(false); directoryService.getChangeLog().setEnabled(false); ldapServer = new LdapServer(); ldapServer.setTransports(new TcpTransport(11389)); ldapServer.setDirectoryService(directoryService); directoryService.startup(); ldapServer.start(); } @AfterClass public static void stopApacheDs() throws Exception { ldapServer.stop(); directoryService.shutdown(); directoryService.getWorkingDirectory().delete(); } @Test public void anonAuth() throws NamingException { DirContextSource.Builder builder = new DirContextSource.Builder( "ldap://localhost:11389"); DirContextSource contextSource = builder.build(); DirContext context = contextSource.getDirContext(); assertNotNull(context.getNameInNamespace()); context.close(); }}