1

私がする必要があるのは、LDAP に接続し、この接続をいくつかのクラスに渡し、さまざまな処理手順を実行することです。

私が直面する問題は、コンストラクターを介してこれらのクラスに接続を渡す必要があるかどうか、またはすべてのクラスが独自の接続を管理する必要があるかどうかです。

最初のアプローチで私が目にする問題は、呼び出し元が自分自身でストリームを閉じる責任があることを知らない可能性があることです。2 番目のアプローチも適切ではないようです。接続を開いたり、閉じたり、再度開いたりしても意味がないからです。

これに関するアイデアはありますか?

4

2 に答える 2

1

LDAPを扱うクラスがいくつかある理由はわかりません。たぶん、これらの散在する操作を、LDAP操作のすべての責任を持つ単一のクラスに結合することを検討する必要があります。

それが不可能な場合、あなたの本能は正しいです。接続を開くクラスは、finallyブロックで接続を閉じる必要があります。これは、そのユースケースの作業単位を認識しているインターフェイスベースのPOJOサービスクラスである必要があります。責任がどこにあるかについては疑いの余地がありません。そのようなサービスがない場合は、作成してください。

操作が単一の作業単位の一部ではない場合は、別々のサービスで管理する必要があります。前の段落のコメントは引き続き適用されます。

LDAP接続をプールしていますか?そうだといい。

特にSpringユーザーの場合は、SpringLDAPモジュールを確認することをお勧めします。JDBCと同じように、LDAPリソースの処理が簡単になります。

于 2011-11-22T10:39:12.803 に答える
1

ユーティリティクラス、またはさまざまなサービスを提供するその他のクラスを構築することはお勧めできません。クラスは、単一のサービスまたは厳密に制御されたサービスのグループを提供する必要があります。そうでない場合は、FORTRANガベージ共通ブロックに戻ることもできます。クラス間でLDAP接続を共有するには、接続をカプセル化します(これは、APIの詳細を非表示にする目的にも役立ちます)。次に、ディレクトリサーバーのアカウントを使用して認証することにより、必要に応じてメソッドを保護します。たとえば、close()クローズ特権を持つアカウント、クローズグループのメンバー、または任意のauthn / authzに対して認証するために、メソッドが必要です。このタイプの作業には、 UnboundIDLDAPSDKを使用する必要があります。「 LDAP:プログラミングの実践」も参照してください。

于 2011-11-22T16:33:34.820 に答える