2011-11-23 97 views
1

我想實現以下:如何處理LDAP連接?

我有一個進口商類寄存器所謂Processor s,然後通過遍歷它們和調用execute(Processor是一個接口,幷包含一個方法void execute())執行它們。

這些處理器所做的是連接到LDAP,並執行某些任務,例如,檢索人員列表並將其存儲到數據庫中,或讀取某些特權並將其映射到組。

這一切工作得很好...除了我只是不知道如何處理LDAP連接。

這裏有一些想法:

  1. 初始化構造函數中的連接(並將其分配給一個字段),並提供一個dispose()`方法,其中關閉連接
  2. 不初始化構造函數中的連接字段,但在​​方法
  3. 中初始化並關閉它,然後在execute方法中創建連接並將其傳遞給所有稱爲
  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 - 非常棒!您能否詳細介紹戰略模式部分?我知道並經常使用策略模式,但不知道如何在這裏應用。 – helpermethod

+1

只是一個想法。創建一個ServerConnectionStrategy接口,該接口定義服務提供者必須提供的服務(服務提供者是提供必要LDAP服務的一組類)。該戰略定義了在其他地方實施的服務。我正在考慮使用該模式的'execute()'方法。我不喜歡那些沒有使用任何參數來表明它們的功能的方法 - 多態性可能會被採用太多並且會使代碼變得脆弱。如果execute()採用策略參數,則角色更清晰。我沒有真正想過這件事。 –

1

構建別的地方,並將它注入到應用程序中。

如果您沒有通過CDDI提供依賴注入的JEE6,那麼您可以使用Spring框架作爲解決方法。

它有兩個好處。

  1. 連接的生命週期是使用它
  2. 的連接可以與用於測試的模擬或假連接被替換的類之外。