SeasarとDoltengとTomcat6
しばらくブログの更新を怠っていたのですが…。Tomcat6.0.10をインストールして、いろいろいじっていました。
自分、今まで「Tomcatプロジェクト>JSP作業ディレクトリを作成」という操作って、プロジェクトに必須の操作かと思っていたのですが、
これって必要な訳では無いんですね。(とかいって間違ってるかもしれない。間違っていたらご指摘下さい。)
いや、以下の工程で、ちょっと気づいたもので…。
今回のテーマ
工程
まず、各ライブラリのバージョンアップの為、pom.xmlを以下(抜粋)のように編集します。
<?xml version="1.0" encoding="UTF-8"?> <project> <dependencies> <dependency><!-- 1.1にバージョンアップ --> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-jta_1.1_spec</artifactId> <version>1.0</version> </dependency> <dependency><!-- 最新バージョンのs2-frameworkで必要なので追加 --> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-ejb_2.1_spec</artifactId> <version>1.0</version> </dependency> <dependency><!-- 最新バージョンのs2-frameworkで必要なので追加 --> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-ejb_3.0_spec</artifactId> <version>1.0</version> </dependency> <dependency><!-- 2.4.12にバージョンアップ --> <groupId>org.seasar.container</groupId> <artifactId>s2-extension</artifactId> <version>2.4.12</version> </dependency> <dependency><!-- 2.4.12にバージョンアップ --> <groupId>org.seasar.container</groupId> <artifactId>s2-framework</artifactId> <version>2.4.12</version> </dependency> <dependency><!-- 2.4.12にバージョンアップ --> <groupId>org.seasar.container</groupId> <artifactId>s2-tiger</artifactId> <version>2.4.12</version> </dependency> <dependency><!-- 1.0.6にバージョンアップ --> <groupId>org.seasar.teeda</groupId> <artifactId>teeda-extension</artifactId> <version>1.0.6</version> </dependency> <dependency><!-- 1.0.6にバージョンアップ --> <groupId>org.seasar.teeda</groupId> <artifactId>teeda-ajax</artifactId> <version>1.0.6</version> </dependency> <dependency><!-- 1.0.6にバージョンアップ --> <groupId>org.seasar.teeda</groupId> <artifactId>teeda-tiger</artifactId> <version>1.0.6</version> </dependency> <dependency><!-- 1.0.42にバージョンアップ --> <groupId>org.seasar.dao</groupId> <artifactId>s2-dao</artifactId> <version>1.0.42</version> </dependency> <dependency><!-- 1.0.42にバージョンアップ --> <groupId>org.seasar.dao</groupId> <artifactId>s2-dao-tiger</artifactId> <version>1.0.42</version> </dependency> </dependencies> </project>
そして、プロジェクトディレクトリにおいて「del /Q src\main\webapp\WEB-INF\lib\*」「mvn eclipse:eclipse war:inplace」を実行します。
これにより、クラスパスの再構成及び、アプリケーションのlibディレクトリが更新されます。
F5でプロジェクトを更新。すると、viewフォルダがソースフォルダ指定から外れているので、復帰させます。
Tomcatプロジェクト>JSP作業ディレクトリを作成 を行います。
そしてTomcat6を起動。http://localhost:8080/chura/ にアクセスすると、index.jspが実行され、Hello, worldが表示されます。現在、自分でもうまくいきません。( → http://d.hatena.ne.jp/cepoc/20070429/1177876121 ) この時はなんでうまくいったんだろう…。
JSP作業ディレクトリを作成していると、Jasperにより生成された work/org.apache.jsp/index_jsp.java がエラーを起こします。(この点に関しては、後の考察にて)なので、作業ディレクトリは作成しない方向で。
次に、Teedaのviewにアクセスしてみる。何も作っていないので、デフォルトで存在する http://localhost:8080/chura/view/error/error.html にアクセス。白画面で、何も表示されなければOKです。
という感じで、成功、かな?
考察
Tomcat5→6の変更点についてのまとめは、libディレクトリの共通化など改良点多数なのですが、ひとまず置いておいて。
Apache Tomcat version | Servlet Spec | JSP Spec |
---|---|---|
6.0.10 | 2.5 | 2.1 |
5.5.23 | 2.4 | 2.0 |
4.1.36 | 2.3 | 1.2 |
3.3.2 | 2.2 | 1.1 |
上記の通り、Tomcat6よりServlet2.5及びJSP2.1に対応ということになりました。えーと、Servlet2.4, JSP2.0との違いは把握しておりません(汗)
まぁ、様々な事項を置き去りにして、ずんずん進みます。
で、Doltengでプロジェクトを生成すると、必要なライブラリとして、以下(抜粋)のライブラリがクラスパスに通されます。
これらのライブラリは、Tomcat5.5 においては、TOMCAT_HOME/common/lib にある、以下のライブラリと互換性のあるライブラリだと思います。
work/org.apache.jsp/index_jsp.java がエラーを起こすのは、上記geronimoのライブラリが、Servlet2.5, JSP2.1に対応していないから、ですね。
そしたら、2.5/2.1対応のgeronimoに差し替えたらどうなるでしょうか?
pomにさらなる変更を加えます。
<dependency> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-jsp_2.1_spec</artifactId> <version>1.0-M1</version> </dependency> <dependency> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-servlet_2.5_spec</artifactId> <version>1.1-M1</version> </dependency>
「del /Q src\main\webapp\WEB-INF\lib\*」「mvn eclipse:eclipse war:inplace」を実行→F5でプロジェクトを更新→viewフォルダをソースフォルダ指定に復帰させます。
一応、workフォルダは空にしておき、Tomcat6を起動。そしてさっきのように、http://localhost:8080/chura/ にアクセス。
DEBUG 2007-04-24 22:30:40,473 [http-8080-1] HOT deployを開始します DEBUG 2007-04-24 22:30:43,941 [http-8080-1] HOT deployを終了しました 2007/04/24 22:30:43 org.apache.catalina.core.StandardWrapperValve invoke 致命的: サーブレット jsp のServlet.service()が例外を投げました java.lang.NullPointerException at org.apache.jsp.index_jsp._jspInit(index_jsp.java:22) at org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:52) at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:157) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:320) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:63) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:63) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445) at java.lang.Thread.run(Thread.java:595)
ぁ。ダメですね。現在の所、原因不明です。
こちらは http://localhost:8080/chura/view/error/error.html 上手く行くようです。
さて、ここでJSP作業ディレクトリをソースフォルダに追加してみますと…。jasper系のクラスが無い、ということで、やはりエラーが出ています。ダメでしたか…。geronimo-jasperってライブラリは無いですよねぇ。(Maven2リポジトリには見つかりませんでした。)