2011-04-29 6 views
0

Apache DS (org.apache.directory.server.core.partition.Partition 구현)에서 사용자 정의 파티션을 구현 중입니다.ApacheDS 1.5.5에서 사용자 정의 파티션을 구현하는 방법은 무엇입니까?

내 맞춤 파티션에서 검색 할 수 있습니다. 그러나 필터 (예 : objectClass = "person")를 사용하려는 경우 내 파티션에서 필터링없이 검색된 모든 항목을 반환합니다.

누구든지 사용자 지정 파티션을 사용하여 "검색"메서드에서 반환 한 항목을 필터링하는 방법에 대한 예제를 제공 할 수 있습니까?

또한 누군가가 검색 방법을 구현하는 예제를 완성 해 주었다면 나를 높이 평가할 수 있습니다. 검색 범위 (OBJECT, ONELEVEL 또는 SUBTREE)와 관련하여 더 많은 정보가 필요합니다.

ApacheDS 버전 1.5.5를 사용하고 있습니다.

고맙습니다.

답변

0

나는이 작업을 몇 시간 전에 도착 솔루션을 게시 할 시간이 없었습니다.이 페이지의 예를 바탕으로

는 : How to write a simple custom partition for apache ds.

나는 초기 파티션을 구축 할 수 있었다. 그러나 이것은 내 경우에 유용하지 않았다. ApacheDS에 더 좋은 문서가 있다면 그것은 좋을 것입니다.

필터링을 위해 Apache Developers List에서 기본적으로 당신을 도울 수업이 없다고 이메일을 받았는데, 당신이 그것을 스스로 해줘야합니다. 곧 내 코드를 개선하는 데 도움이됩니다.)

if(ctx.getFilter().toString().contains("objectClass=person")) { 
    //Somehow return entries that only correspond to persons on the data base (were you store your directory entries). 
} 

사실, 통지가 위의 코드 예제는 작동하지 않습니다 ApacheDS가 속성을 변환 이후 :

는 예를 들어, 다음과 같은 일을 수행해야합니다 (방법 objectClass = 사람) 필터를 가지고 이름을 OID에 대응시킵니다. 따라서 "objectClass"대신 "objectClass"속성의 OID 인 2.5.6을 얻습니다.

이제 검색 범위와 관련하여 JPBlanc의 답변에 대해서는 거의 설명되어 있지 않으므로 나는 그가 말한 것을 반복하지 않습니다. 사용자 정의 파티션에서 트리 케이스를 다르게 처리 할 코드를 작성해야합니다. 예를 들어

:

switch (ctx.getScope()) { 

    case OBJECT: 
    //Find a particular entry on your entry database. 
    case ONELEVEL: 
    //Find all entries that match directly below a given entry. 
    case SUBTREE: 
    //Find all entries that match recursively below a given entry. 

감사합니다.

1

디렉토리가 트리입니다. 당신이 검색 할 때 당신이주는 Directory에서 LDAP와 (검색 프로토콜 데이터 단위를 쓰기) :

  1. 를 사용해서
  2. 필터를 retreive하려는 속성 검색을 시작 고개를 끄덕의 DN ((& (방법 objectClass = *))가 깊이에 대한 검색

의 깊이는 3 가능성

,536있어
    • 하위 트리 : 처음부터 고개를 끄는 재귀 적 검색에서 필터를 일치 시키십시오.
    • OneLevel : 시작 끄덕임 아래 끄덕임에서만 필터를 일치 시키십시오.
    • base : 필터를 nod 속성 (RootDSE 속성을 가져 오는 데 사용됨)과 일치 시키려고합니다.

    문제가 다시 발생하면 SCHEMA에 정의 된 유형의 구현이 있다는 사실에주의하십시오. 형식은 모두 top 형식에서 파생됩니다. 예를 들어 inetOrgPerson을 입력하면 SCHEMA에서 organizationalPerson의 자식이며 person의 자식이며 top의 자식입니다. 이 특별한 경우에 inetOrgPerson 객체는 자신의 objectClass 속성 값의 4 배를해야합니다 : 당신은 같은 필터 (& (방법 objectClass = 사람))로 검색 PDU를 작성하는 경우 그래서 당신은 person에서 발행 개체가됩니다

    objectClass: top 
    objectClass: person 
    objectClass: organizationalPerson 
    objectClass: inetOrgPerson 
    

    을, 귀하의 결과에 organizationalPersoninetOrPerson 유형. 일부 검색 도구에서

    또 다른 것은 필터가 나쁜 ((&는 (방법 objectClass = *)) 사용됩니다 (이) 모든 것을 의미하는 기본 필터를 이해 서면 또는없는 경우.

  • +0

    감사합니다. 이것은 정말 유용한 정보입니다. – jmend