Каталог Apache, добавляющий раздел программно

Я пытаюсь создать раздел программно. Я попытался следовать примеру на веб-сайте ApacheDS (https://directory.apache.org/apacheds/basic-ug/1.4.3-adding-partition.html#adding-a-partition-programmatically).), но этот пример точно не правильно.

Вот мой код:

LdapConnection connection = new LdapNetworkConnection(host, port);     
connection.bind(admin, password);

connection.loadSchema();
SchemaManager schemaManager = connection.getSchemaManager();
Dn suffixDn = new Dn(schemaManager, "dc=newParition,dc=com");

JdbmPartition newPartition = new JdbmPartition(schemaManager);
newPartition.setId("newParition");
newPartition.setSuffixDn(suffixDn);
newPartition.setCacheSize(1000);
newPartition.setPartitionPath(new URI("file:///var/lib/apacheds-2.0.0-M15/default/partitions/newParition"));

newPartition.addIndex(new JdbmIndex("objectClass", false));
newPartition.addIndex(new JdbmIndex("dc", false));

Entry contextEntry = new DefaultEntry(schemaManager, suffixDn);
contextEntry.put("objectClass", "domain", "top");
contextEntry.put("dc", "newParition");

newPartition.initialize();
newPartition.add(new AddOperationContext(null, contextEntry)); 

Я вижу следующую ошибку, когда пытаюсь добавить contextEntry в раздел:

org.apache.directory.api.ldap.model.exception.LdapSchemaViolationException: ERR_219 Entry dc=newParition,dc=com contains no entryCsn attribute: Entry …

Это даже не похоже на то, что раздел добавляется на мой сервер (когда я перезапускаю свой сервер apacheds, я не вижу никаких новых namingContexts под корневым DSE). Я думаю, что здесь я пропускаю некоторые шаги, но не уверен, что это такое.


person user2668815    schedule 11.02.2014    source источник
comment
Я получаю ту же ошибку? Нашли ли вы какое-либо решение. Нашли ли вы какой-либо способ создания раздела с помощью кода.... Пожалуйста, опубликуйте решение   -  person rishiAgar    schedule 19.01.2015


Ответы (1)


Совет из списка рассылки разработчиков Apache DS:

"// ВСЕГДА добавляйте запись, используя API CoreSession". Посетите http://apaste.info/KHX, чтобы увидеть почти полный пример того, как добавить раздел. Отсутствующий класс EmbeddedServer выглядит следующим образом:

 private static final class EmbeddedServer {
    private DirectoryService directoryService;
    private LdapServer ldapService;

    public EmbeddedServer(final String host, final int port) throws Exception {
        init(host, port);
    }

    private void init(final String host, final int port) throws Exception {

        DefaultDirectoryServiceFactory factory = new DefaultDirectoryServiceFactory();
        factory.init("Test");
        this.directoryService = factory.getDirectoryService();
        this.directoryService.getChangeLog().setEnabled(false);
        this.directoryService.setShutdownHookEnabled(true);
        this.directoryService.setInstanceLayout(new InstanceLayout("/tmp/ldapServer"));

        this.ldapService = new LdapServer();
        this.ldapService.setTransports(new TcpTransport(host, port));
        this.ldapService.setDirectoryService(this.directoryService);
    }

    public void start() throws Exception {

        this.directoryService.startup();
        this.ldapService.start();
    }

    public void stop() throws Exception {

        this.ldapService.stop();
        this.directoryService.shutdown();
    }
}
person Sebastian    schedule 29.09.2014
comment
Срок действия пасты истек, что делает этот ответ непригодным для использования. - person rve; 06.07.2015
comment
Блин, паста не мной была предоставлена. К сожалению, альтернативу предоставить не могу. - person Sebastian; 07.07.2015