2011-11-23 3 views
1

나는 다음과 같은 구현하기 위해 노력하고있어 :LDAP 연결을 처리하는 방법은 무엇입니까?

나는 그렇게 Processor들이라고 등록하는 가져 오기 클래스가 다음 (Processor는 인터페이스와 방법 void execute()을 포함)들을 반복하여 실행 호출하여 실행합니다.

이러한 프로세서가 수행하는 작업은 LDAP에 연결하고 특정 작업을 수행하는 것입니다. 사람 목록을 검색하여 데이터베이스에 저장하거나 특정 권한을 읽어 그룹에 매핑합니다.

이 모든 것이 잘 작동합니다 ... LDAP 연결을 처리하는 방법을 모르겠습니다.

  1. 는 처분을 생성자에서 연결을 초기화 (그리고 필드에 할당) 및 제공 또는
  2. 이하지 않는 연결을 닫습니다()`있어서, 여기에

    은 몇 가지 아이디어입니다 생성자의 연결 필드를 초기화하고 초기화하고 닫습니다. execute() 메서드 또는
  3. 실행 메서드에서 연결을 만들고
  4. 이라는 모든 메서드에 전달합니다.
  5. 도 이보다 (수입자의 연결을 생성하고 모든 프로세서에 전달하고, 실행 후, 닫습니다)
+1

# 2 imo, 가능한 한 수입자에게 가능한 한 간단하게 보관하고 필요 이상으로 오랫동안 연결을 열어 두지 마십시오. – Bas

답변

2

필수 매개 변수 인 전략 메소드를 사용하여 LDAP 서버에 대한 연결을 처리하십시오. 이렇게하면 코드가 분리되어 격리됩니다. 이 작업을 위해서는 UnboundID LDAP SDK을 선호해야하며 SDK는 in-memory directory server을 생성 할 수있는 기능을 지원하므로 "모의"또는 "가짜"연결을 사용할 필요가 없습니다. 또한 블로그 게시물 "LDAP: Programming Practices"을 검토 할 수 있습니다.

+0

+1 UnboundID LDAP SDK와 InMemory DS를 이미 사용하고 있습니다. 훌륭합니다! Strategy Pattern 부분에 대해 좀 더 자세히 설명해 주시겠습니까? 나는 전략 패턴을 알고 있고 정기적으로 사용하지만 여기에 적용하는 방법을 모른다. – helpermethod

+1

그냥 생각. 서비스 공급자 (여기서 서비스 공급자는 필요한 LDAP 서비스를 제공하는 클래스 그룹 임)가 제공해야하는 서비스를 정의하는 ServerConnectionStrategy 인터페이스를 만듭니다. 이 전략은 다른 곳에서 구현되는 서비스를 정의합니다. 나는 패턴을 사용하기 위해 'execute()'메소드를 생각하고있다. 나는 다형성이 너무 오래 걸리고 코드가 부서지기 쉽다는 것을 알기 위해 매개 변수를 사용하지 않는 메소드 팬이 아닙니다. execute()가 전략 매개 변수를 사용하면 역할이 명확 해집니다. 나는 이것을 정말로 생각하지 않았다. –

1

다른 곳을 빌드 및 응용 프로그램에 주입.

CDDI를 통해 종속성 삽입 기능을 제공하는 JEE6이 없다면 Spring Framework를 사용하여 문제를 해결할 수 있습니다.

두 가지 이점이 있습니다.

  1. 접속의주기는 접속 테스트 모의 가짜 연결로 대체 될 수 그것을
  2. 사용 클래스 벗어난다.
관련 문제