2009-10-13 12 views
10

Tôi đang cố chạy một ApacheDS được nhúng trong ứng dụng của mình. Sau khi đọc http://directory.apache.org/apacheds/1.5/41-embedding-apacheds-into-an-application.html Tôi tạo điều này:Chạy Apache DS được nhúng trong ứng dụng của tôi

public void startDirectoryService() throws Exception { 
    service = new DefaultDirectoryService(); 
    service.getChangeLog().setEnabled(false); 

    Partition apachePartition = addPartition("apache", "dc=apache,dc=org"); 
    addIndex(apachePartition, "objectClass", "ou", "uid"); 

    service.startup(); 

    // Inject the apache root entry if it does not already exist 
    try 
    { 
     service.getAdminSession().lookup(apachePartition.getSuffixDn()); 
    } 
    catch (LdapNameNotFoundException lnnfe) 
    { 
     LdapDN dnApache = new LdapDN("dc=Apache,dc=Org"); 
     ServerEntry entryApache = service.newEntry(dnApache); 
     entryApache.add("objectClass", "top", "domain", "extensibleObject"); 
     entryApache.add("dc", "Apache"); 
     service.getAdminSession().add(entryApache); 
    } 
} 

Nhưng tôi không thể kết nối với máy chủ sau khi chạy. Cổng mặc định là gì? Hay tôi đang thiếu một cái gì đó?

Dưới đây là giải pháp:

service = new DefaultDirectoryService(); 
    service.getChangeLog().setEnabled(false); 

    Partition apachePartition = addPartition("apache", "dc=apache,dc=org"); 

    LdapServer ldapService = new LdapServer(); 
    ldapService.setTransports(new TcpTransport(389)); 
    ldapService.setDirectoryService(service); 

    service.startup(); 
    ldapService.start(); 

Trả lời

4

tôi đã không thể làm cho nó chạy không với cringe của , Của Kevin cũng không phải phiên bản của Jörg Pfünder. Đã nhận được liên tục NPE từ trong thử nghiệm JUnit của tôi. Tôi đã sửa lỗi đó và biên soạn tất cả trong số họ đến một giải pháp làm việc:.

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(); 
    } 

} 
1

Cổng mặc định cho LDAP là 389.

+0

Nhưng là nó cổng mặc định cho Apach eDS quá? Và ApacheDS có tạo truy cập LDAP với mã trên không ...? – cringe

+0

Tôi sử dụng Apache Directory Studio để duyệt LDAP, nhưng tôi không quen với việc chạy ApacheDS được nhúng. Vừa trả lời câu hỏi của bạn về cổng mặc định cho LDAP. – JuanZe

+0

Tôi đã tải xuống mã mẫu và các thư viện và chạy nó từ Eclipse. Đầu ra cho thấy: log4j: WARN Không thể tìm thấy trình bổ sung cho trình ghi nhật ký (org.apache.directory.server.schema.registries.DefaultNormalizerRegistry). log4j: WARN Vui lòng khởi tạo hệ thống log4j đúng cách. entry Tìm thấy: ServerEntry dn [n]: dc = Apache, dc = Org objectClass: extensibleObject objectClass: miền objectClass: top dc: Apache – JuanZe

6

Dưới đây là một phiên bản rút gọn về cách chúng tôi sử dụng nó:

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(); 
+0

Cảm ơn, đó là nó. Tôi đã phải thay đổi một số dòng để phù hợp với phiên bản ApacheDS của tôi. Bạn có thể xem kết quả trong câu hỏi. – cringe

1

Dự án này đã giúp tôi: Embedded sample project

tôi sử dụng phụ thuộc này trong pom.xml:

<dependency> 
    <groupId>org.apache.directory.server</groupId> 
    <artifactId>apacheds-server-integ</artifactId> 
    <version>1.5.7</version> 
    <scope>test</scope> 
</dependency> 
0

Hơn nữa, trong 2,0 * dir làm việc và những con đường khác không được quy định tại nữa DirectoryService, mà đúng hơn là trong lớp học riêng biệt InstanceLayout, mà bạn cần phải nhanh chóng và sau đó gọi

InstanceLayout il = new InstanceLayout(BASE_PATH); 
directotyService.setInstanceLayout(il);