[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 メーリングリストの案内