m2eclipse + Sysdeo Tomcat plugin + DevLoader で起きた問題と解決策
今日は仕事中に弄っていた Teeda で起きちゃった問題とその解決策を書くよ!
一応、実行環境は
で、
- Chura で Super Agile (Teeda + S2Dao) なプロジェクトを作り、
- Enabled Dependency Management して、
- /lib と /src/main/webapp/WEB-INF/lib を削除して、
- pom.xml を編集して Seasar ライブラリ関連を上記バージョンでそろえ、
- Tomcat プラグインは開発用クラスローダを使うようにして、
- Tomcat の DevLoader は http://jfut.featia.net/diary/20071117.html の改造版を使う
ようにした状態です。
"[ETDA0026]URI(http://www.seasar.org/teeda/extension)が見つかりません" が発生する
改造版 DevLoader 使ってるのになんで taglib 見えないの!?
ってな具合で迷った現象。
teedaExtension.dicon を下記のように弄ったら通るようになりました。
修正前
<component class="org.seasar.teeda.extension.config.taglib.impl.ServletContextTaglibManagerImpl" />
修正後
<component class="org.seasar.teeda.extension.config.taglib.impl.ClassLoaderTaglibManagerImpl" />
"javax.faces.FacesException: Undefined component type:org.seasar.teeda.extension.Text" が発生する
taglib でなんとかなったぜー!と思ったら続いてでてきたこの問題。
正直、これは解決にかなり時間かかってしまいました…。
どうやら MetaInfFacesConfigurator クラスで、META-INF/faces-config.xml を含む jar をクラスローダから拾ってきて、その URL 文字列に /WEB-INF/lib が含まれていたら読み込む、ということをやっていたのが原因。
DevLoader 使ってると /WEB-INF/lib の下に jar なんていないので、この条件にひっかかるわけがない。
なので、ちょっと荒技っぽいですが teeda.dicon を下記のように弄ったら通るようになりました。
修正前
<component class="org.seasar.teeda.core.config.faces.impl.MetaInfFacesConfigurator" autoBinding="none" />
修正後
<component class="org.seasar.teeda.core.config.faces.impl.MetaInfFacesConfigurator" autoBinding="none"> <initMethod name="setPath"> <arg> @org.seasar.teeda.core.JsfConstants@FACES_CONFIG_RESOURCES </arg> </initMethod> </component>