[Seasar-user:5474] Re: ComponentAutoRegisterでパッケージ名前方一致のClassPatternを複数登録したときの挙動について
Minoru Taki
[E-MAIL ADDRESS DELETED]
2006年 12月 14日 (木) 15:57:09 JST
瀧です。
試していないのですが、
<initMethod name="addClassPattern">
<arg>"example."</arg>
<arg>".*Impl"</arg>
</initMethod>
<initMethod name="addClassPattern">
<arg>"example2."</arg>
<arg>".*Impl"</arg>
</initMethod>
で駄目ですかね?
----- Original Message -----
From: "Hidenoshin Yoshida" <[E-MAIL ADDRESS DELETED]>
To: <[E-MAIL ADDRESS DELETED]>
Sent: Thursday, December 14, 2006 3:25 AM
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
>
Seasar-user メーリングリストの案内