[CONTAINER-175] SAX サポートクラスの final を外し,OGNL の処理中にクラスを読み込むのを Class#forName() から ClassLoader#loadClass() に変更しました. Created: 2008-03-11 Updated: 2008-04-01 Resolved: 2008-03-12 |
|
| Status: | Resolved |
| Project: | S2Container |
| Component/s: | S2Container |
| Affects Version/s: | 2.4.23 |
| Fix Version/s: | 2.4.24 |
| Type: | Improvement | Priority: | Major |
| Reporter: | Feng Dihai | Assignee: | koichik |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | None | ||
| Environment: |
Windows Vista |
||
| Description |
|
提案 しかしdiconファイルを記述する時、componentのclass属性またはOGNL式の中にjava.langパッケージ以外はすべてフル・クラス名で記入しなければなりません。場合によって開発者に大きな負担になりかねません。javaのimport句のように明示的にパッケージとクラスのインポート機能をS2Containerに追加することを提案いたします。 実現方法の説明 宣言及び引用方法 <?xml version="1.0" encoding="UTF-8" ?> <?java-import java.util.*; com.mydomain.commons.*; com.mydomain.util.DebugUtil; ?> <components> <component name="foo" class="DebugUtil"> <property name="map"> #@TreeMap@{"key1" : "value1", "key2" : "value2"} </property> </component> </components> 実装クラス
使用方法 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd"> <components> <include condition="#ENV == 'ut'" path="warmdeploy.dicon"/> <include condition="#ENV == 'ct'" path="hotdeploy.dicon"/> <include condition="#ENV != 'ut' and #ENV != 'ct'" path="cooldeploy.dicon"/> <component name="dicon" class="org.seasar.framework.container.patch.EnhancedXmlS2ContainerBuilder"/> </components> 以上、ご検討をお願いいたします。 |
| Comments |
| Comment by koichik [ 2008-04-01 ] |
|
リリース後に問題が解消していないことが分かっても手遅れなので,対応後の確認および報告はリリースの前にお願いします. |
| Comment by Feng Dihai [ 2008-04-01 ] |
|
2.4.24のリリースを待っているので、返事が遅れて申し訳ございません。 ご返答の中では、
実際importは個別diconファイルをスコープとし、インクルードより構築されたS2コンテナの階層と関係はありません。よってS2コンテナのインスタンスごとにSmartClassLoaderは必要です。上記のコンポーネント定義に、「 instance="prototype" 」を追加するすてきです: <component class="org.seasar.framework.container.patch.SmartClassLoader" instance="prototype" />
PIの使用に関して賛否両論に分かれているみたい(http://www.advogato.org/article/522.html)だけど、<?xml-stylesheet ..?>のような日常的にも使われています。 私はクラス・インポートの拡張機能を<?java-import ..?>ベースに実装するつもりです。 |
| Comment by koichik [ 2008-03-12 ] |
|
この拡張では import の定義に PI が使われていますが,要素を使うことも可能です.
また,SmartClassLoader を使うために XmlS2ContainerBuilder を拡張する必要はありません.s2container.dicon に以下のように設定するだけで,そのクラスローダが使われます. <component class="org.seasar.framework.container.patch.SmartClassLoader"/>
|
| Comment by koichik [ 2008-03-12 ] |
|
SNAPSHOT をデプロイしたのでご確認ください.
|
| Comment by koichik [ 2008-03-12 ] |
|
修正しました. |
| Comment by Feng Dihai [ 2008-03-12 ] |
この2点でも対応していただければ、大変助かります。そうすればおしゃったとおり、Seasar2本体ではなく拡張機能が勝手に作られるようになります。 よろしいければ、対応の予定を教えていただきませんか? |
| Comment by koichik [ 2008-03-11 ] |
|
Seasar プロジェクトしては dicon ファイルの入力を補完する Eclipse Plugin "Kijimuna" を用意しています. このため,本提案を取り込む必要性はあまりありません. また,Seasar2 に対する機能追加は基本的に終了しています. 以上の点から,本提案のパッチを取り込むよりも,このような拡張がしやすいように改善するということでいかがでしょうか? 具体的には,以下の 2 点に対応すれば,「きれいに実装できないところ」がなくなるように思われます.
|
| Comment by Feng Dihai [ 2008-03-11 ] |
|
実装のソース・ファイルはこちらからダウンロードできます: by Feng Dihai |