[Seasar-user:5479] Re: ComponentAutoRegisterでパッケージ名前方一致のClassPatternを複数登録したときの挙動について
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2006年 12月 14日 (木) 18:00:49 JST
小林 (koichik) です.
S2.3 系・S2.4 系とも修正してコミットしました.
ClassPatterh のパッケージ名に "example" を指定した場合,
"example.〜" にはマッチしますが,"example2.〜" には
マッチしないようにしました.
次のリリースに含まれます.
Date: Thu, 14 Dec 2006 03:25:06 +0900
From: Hidenoshin Yoshida <[E-MAIL ADDRESS DELETED]>
To: [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:5455] ComponentAutoRegisterでパッケージ名前方一致のClassPatternを複数登録したときの挙動について
> 吉田です。
>
> S2.3.8を業務で利用しているのですが
> ComponentAutoRegisterの自動設定で、同一クラスが
> 複数登録されてしまう現象が発生しました。
>
> バージョンが古いせいかと思いましたので、最新のS2.4.6でも
> 試してみたところ、よく似た現象が発生しましたので
> MLに報告させていただきたいと思います。
> (一応検索はしたのですが、もし既出でしたらすみません)
>
> ルートパッケージとして
> ・example
> ・example2
>
> のようなパターンが存在するとします。
> example.daoパッケージにDaoインターフェイスが一つ
> example.dao.implパッケージにその実装が一つ
> example2.daoパッケージにDaoインターフェイスが一つ
> example2.dao.implパッケージにその実装が一つ
>
> ・・・のような形で、一つのインターフェイスに一つずつ
> 実装を作成し、ComponentAutoRegisterで自動登録させようと
> しています。
>
> このときに、ClassPatternを
>
> <initMethod name="addClassPattern">
> <arg>"example"</arg>
> <arg>".*Impl"</arg>
> </initMethod>
> <initMethod name="addClassPattern">
> <arg>"example2"</arg>
> <arg>".*Impl"</arg>
> </initMethod>
>
> のような形で登録すると、example2のDaoを呼ぼうとしたときに
> TooManyRegistrationRuntimeExceptionが発生しました。
> デバッグモードで調べてみたところ、
> ClassPattern.isAppliedPackageNameの中で、パッケージ名が
>
> pName.startsWith(packageName);
>
> としてチェックされている為、パッケージ名としては別でも
> 文字列として前方一致するようなクラスパターンを複数登録している場合、
> Componentも複数登録されてしまうようです。
> 定義するルートパッケージがディレクトリ名と一致しないと自動登録
> できませんので、この場合exampleとexample2のルートパッケージは
> 同時には設定できませんでした。
> (ComponentAutoRegisterをルートパッケージ毎に複数登録すれば
> 当現象は発生しませんでした。)
>
> 業務的には、現在はエラーが起こったクラスが存在しなくなった為、
> 問題とはなっておりません。
>
> ただ、現在運用中のシステムは今後もS2.3を使い続ける予定の為、
> この現象に対する対処を確認させていただければと思います。
> AbstractComponentAutoRegister.processClassの中で
> register処理を一度しか実行されないように
> 修正して頂くことは可能でしょうか?
>
>
> 以上、よろしくお願いします。
>
> --
> 吉田秀之進
> [E-MAIL ADDRESS DELETED]
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
--
<signature>
<name>Koichi Kobayashi</name>
<e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
</signature>
Seasar-user メーリングリストの案内