m2eclipse + Sysdeo Tomcat plugin + DevLoader で起きた問題と解決策

今日は仕事中に弄っていた Teeda で起きちゃった問題とその解決策を書くよ!


一応、実行環境は

で、

  1. Chura で Super Agile (Teeda + S2Dao) なプロジェクトを作り、
  2. Enabled Dependency Management して、
  3. /lib と /src/main/webapp/WEB-INF/lib を削除して、
  4. pom.xml を編集して Seasar ライブラリ関連を上記バージョンでそろえ、
  5. Tomcat プラグインは開発用クラスローダを使うようにして、
  6. 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>

Teeda おもしろいよ!

この二つさえクリアすれば、DevLoader 使ってサクサク開発できるので Teeda が面白くなるかも?
とにかく Teeda 弄ってみます。
その後 Wicket やります><