public ApacheDSContainer(String root, String ldifs) throws Exception {
    this.ldifResources = ldifs;
    service = new DefaultDirectoryService();
    List<Interceptor> list = new ArrayList<Interceptor>();

    list.add(new NormalizationInterceptor());
    list.add(new AuthenticationInterceptor());
    list.add(new ReferralInterceptor());
    //        list.add( new AciAuthorizationInterceptor() );
    //        list.add( new DefaultAuthorizationInterceptor() );
    list.add(new ExceptionInterceptor());
    //       list.add( new ChangeLogInterceptor() );
    list.add(new OperationalAttributeInterceptor());
    //        list.add( new SchemaInterceptor() );
    list.add(new SubentryInterceptor());
    //        list.add( new CollectiveAttributeInterceptor() );
    //        list.add( new EventInterceptor() );
    //        list.add( new TriggerInterceptor() );
    //        list.add( new JournalInterceptor() );

    service.setInterceptors(list);
    partition = new JdbmPartition();
    partition.setId("rootPartition");
    partition.setSuffix(root);
    this.root = root;
    service.addPartition(partition);
    service.setExitVmOnShutdown(false);
    service.setShutdownHookEnabled(false);
    service.getChangeLog().setEnabled(false);
    service.setDenormalizeOpAttrsEnabled(true);
  }
  public void start() {
    if (isRunning()) {
      return;
    }

    if (service.isStarted()) {
      throw new IllegalStateException("DirectoryService is already running.");
    }

    logger.info("Starting directory server...");
    try {
      service.startup();
      server.start();
    } catch (Exception e) {
      logger.error("Server startup failed ", e);
      return;
    }

    try {
      service.getAdminSession().lookup(partition.getSuffixDn());
    } catch (LdapNameNotFoundException e) {
      try {
        LdapDN dn = new LdapDN(root);
        Assert.isTrue(root.startsWith("dc="));
        String dc = root.substring(3, root.indexOf(','));
        ServerEntry entry = service.newEntry(dn);
        entry.add("objectClass", "top", "domain", "extensibleObject");
        entry.add("dc", dc);
        service.getAdminSession().add(entry);
      } catch (Exception e1) {
        logger.error("Failed to create dc entry", e1);
      }
    } catch (Exception e) {
      logger.error("Lookup failed", e);
    }

    running = true;

    try {
      importLdifs();
    } catch (Exception e) {
      logger.error("Failed to import LDIF file(s)", e);
    }
  }