[Seasar-user:12094] Re: 【s2directory】DirContextを使いまわしたい

Jun Futagawa [E-MAIL ADDRESS DELETED]
2007年 12月 14日 (金) 05:35:05 JST


ふたがわです。

On 2007/12/13 16:48,鈴木 順 wrote:

> 現状DirectoryDaoの各メソッドを呼ぶたびにDirContextが生成されると思います。
> その点で下記のような問題が発生しています。
> 
> 今実装している処理では1000程度のOBJECTをAD上に生成します。
> こちらの環境(低マシンスペック)やAD固有の問題かもしれませんが、
> ある程度処理が進むとDirContext生成時に下記エラーが発生します。
> (30程度のOBJECT生成後)
> 
> org.seasar.directory.exception.CommunicationRuntimeException: [EDIR0002]ディレクトリサーバに接続できませんでした。
> サーバが稼働しているか確認してください。(接続先: ldaps://xxxxxx:636)
> 	at org.seasar.directory.impl.BasicDirectoryHandler.getConnection(BasicDirectoryHandler.java:96)
> 	at org.seasar.directory.impl.BasicDirectoryHandler.search(BasicDirectoryHandler.java:162)
> 	at org.seasar.directory.impl.BasicDirectoryHandler.searchOneLevel(BasicDirectoryHandler.java:185)

ご報告ありがとうございます。

関連しそうなバグとして、NamingEnumerationを明示的にclose()していませんでした。
これは明示的にclose()するべきと下記の資料にあったため、そのように修正しました。
http://www-1.ibm.com/support/entdocview.wss?uid=swg21191219
https://www.seasar.org/issues/browse/DIRECTORY-19

上記だけでもご報告いただいた件は解決するかもしれませんが、
コネクションを毎回生成するのは効率が良くないので、
コネクションプーリングされるように修正しました。
SunのJava 2 SDK 1.4.1以降であれば利用できます。
https://www.seasar.org/issues/browse/DIRECTORY-20

directory.diconに下記の設定例を参考にconnectionPoolの
コンポーネント定義を追加してください。
http://svn.seasar.org/browse/trunk/s2directory/s2-directory/src/test/resources/directory.dicon?view=markup&root=sandbox.s2directory&pathrev=138

MavenにSNAPSHOTをDeployしてあります。

<dependency>
  <groupId>org.seasar.directory</groupId>
  <artifactId>s2-directory</artifactId>
  <version>0.6-SNAPSHOT</version>
</dependency>

テストは通っているのでたぶん上手くいくとは思いますが、
おかしな挙動がありましたらお知らせください。

> とりあえずBasicDirectoryHandlerを直して、
> DirContextをThreadLocalで管理するように変更
>   +
> COLSE部分を適宜コメントアウトし、
> Mainメソッド終了まで同じDirContextを使用するようにしたら
> 処理は20秒程度で正常に終了しました。
> (ちなみにgetConnectionの所要時間は2秒程度です)
> 
> Aspectを利用してメッソドレベルで作業単位を指定できて、
> その中では同じDirContextを使用できないか
> と画策しております。(Txと同じノリです)
> 
> そこまでをお願いするのは心苦しいので、
> BasicDirectoryHandlerを継承している各種Handler
> (INSERT/SELECT/DELETE/AUTHなど)
> をdicon上で定義していただくか、
> DirContextの生成、開放部分を切り出していただき
> それをdiconに定義していただく事などは可能でしょうか?

こちらは今回の修正方針で問題が解決しなさそうでしたら考えたいと思います。

よろしくお願いします。

# あと、もしかしたら0.6のリリースは来週になるかもしれません(汗。

-- 
ふたがわ


Seasar-user メーリングリストの案内