都元ダイスケ IT-PRESS このページをアンテナに追加 RSSフィード

最近は会社ブログしか書いてません。

2007-10-31

[][][]ChuraプロジェクトでTomcatを起動させる。

ここのところ落ちていることが多いSysdeoサイト。

したがってTomcatPluginが手に入らない人が続出しとるらしい。

Churaを使ったSuperAgileな開発のチュートリアルではTomcatプラグインを使うことが前提なことが多く、上記のことでChuraプロジェクトが動かせないとかなんとかという話もある。

ぱる日記

そうなんですよ。この辺、どうすればいいのだろう、と思っています。Sysdeo Tomcatランチャープラグイン(以下、Sysdeo)のメンテナンスって、なんか微妙に感じるんですよね。サイトは英語じゃない(これはドイツ語?)、サーバは頻繁に落ちる、今どきEclipseプラグインなのに更新サイトも用意されていないオープンソースではない*1、等。ただのイメージなんですけど、今ひとつ安心できないんです。

Churaは、設計的にはSysdeoに依存してはいません。ただ、各種チュートリアルによって、事実上Sysdeoに依存してしまっている気がします。こんな所でプロプライエタリ今ひとつ感が漂うプロダクトに依存してしまうのは何とも勿体ない…。

じゃぁ代替手段は? となると、WTPという話が出て来ます。上記引用元エントリーも、ChuraWTPを利用するには?というテーマですね。他にも各所で似たような事を書いている人がいます。

しかし。

Chura を使うのであれば WTP(動的Webプロジェクト)はいらないと思うんだけど

はてなダイアリー

このエントリーを見て、多分みんな「WTPを使いたい」んじゃなくて、「Sysdeoを使いたくない」んじゃないかな、と勝手な想像をしてみました。

なんか上手い手は無いんでしょうかーー。

*1未確認ですが、オープンソースじゃないですよね?OSSだったようです。失礼いたしました。(id:koichikさんご指摘ありがとうございました。)

2007-04-29

[]Tomcat6

Tomcat6、なかなか好きなんですが、ちょっと尖り過ぎましたかね。使いこなせません(汗)

churaと関係ない所で、jspにアクセスしようとすると、以下の例外が…。

type 例外レポート

メッセージ

説明 The server encountered an internal error () that prevented it from fulfilling this request.

例外

org.apache.jasper.JasperException: JSPのクラスをコンパイルできません: 


Stacktrace:
	org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:85)
	org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
	org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:415)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:308)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:273)
	org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:308)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:63)
	org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:63)

注意 原因のすべてのスタックトレースは、Apache Tomcat/6.0.10のログに記録されています

2007-04-24

[][][]SeasarDoltengとTomcat6

しばらくブログの更新を怠っていたのですが…。Tomcat6.0.10をインストールして、いろいろいじっていました。

自分、今まで「Tomcatプロジェクト>JSP作業ディレクトリを作成」という操作って、プロジェクトに必須の操作かと思っていたのですが、

これって必要な訳では無いんですね。(とかいって間違ってるかもしれない。間違っていたらご指摘下さい。)

いや、以下の工程で、ちょっと気づいたもので…。

今回のテーマ

  • Dolten0.18.1 生成のSuperAgileプロジェクトで、
  • s2-frameworkを2.4.12、teedaを1.0.6、s2daoを1.0.42にバージョンアップし、
  • Tomcat6.0.10上で動かす。

工程

まず、各ライブラリのバージョンアップの為、pom.xmlを以下(抜粋)のように編集します。

<?xml version="1.0" encoding="UTF-8"?>
<project>
	<dependencies>
		<dependency>
			<groupId>org.apache.geronimo.specs</groupId>
			<artifactId>geronimo-jta_1.1_spec</artifactId>
			<version>1.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.geronimo.specs</groupId>
			<artifactId>geronimo-ejb_2.1_spec</artifactId>
			<version>1.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.geronimo.specs</groupId>
			<artifactId>geronimo-ejb_3.0_spec</artifactId>
			<version>1.0</version>
		</dependency>
		<dependency>
			<groupId>org.seasar.container</groupId>
			<artifactId>s2-extension</artifactId>
			<version>2.4.12</version>
		</dependency>
		<dependency>
			<groupId>org.seasar.container</groupId>
			<artifactId>s2-framework</artifactId>
			<version>2.4.12</version>
		</dependency>
		<dependency>
			<groupId>org.seasar.container</groupId>
			<artifactId>s2-tiger</artifactId>
			<version>2.4.12</version>
		</dependency>
		<dependency>
			<groupId>org.seasar.teeda</groupId>
			<artifactId>teeda-extension</artifactId>
			<version>1.0.6</version>
		</dependency>
		<dependency>
			<groupId>org.seasar.teeda</groupId>
			<artifactId>teeda-ajax</artifactId>
			<version>1.0.6</version>
		</dependency>
		<dependency>
			<groupId>org.seasar.teeda</groupId>
			<artifactId>teeda-tiger</artifactId>
			<version>1.0.6</version>
		</dependency>
		<dependency>
			<groupId>org.seasar.dao</groupId>
			<artifactId>s2-dao</artifactId>
			<version>1.0.42</version>
		</dependency>
		<dependency>
			<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 versionServlet SpecJSP Spec
6.0.102.52.1
5.5.232.42.0
4.1.362.31.2
3.3.22.21.1

上記の通り、Tomcat6よりServlet2.5及びJSP2.1に対応ということになりました。えーと、Servlet2.4, JSP2.0との違いは把握しておりません(汗)

まぁ、様々な事項を置き去りにして、ずんずん進みます。

で、Doltengでプロジェクトを生成すると、必要なライブラリとして、以下(抜粋)のライブラリがクラスパスに通されます。

  • geronimo-jsp_2.0_spec-1.0.jar
  • geronimo-servlet_2.4_spec-1.0.jar

これらのライブラリは、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リポジトリには見つかりませんでした。)

geronimoって、JSPServlet変換はどうやっているんでしょうか?

2007-02-21

[]Tomcat停止時のログ

2007/02/21 14:01:07 org.apache.coyote.http11.Http11BaseProtocol pause

情報: Coyote HTTP/1.1を http-8080 で一時停止します

2007/02/21 14:01:08 org.apache.catalina.core.StandardService stop

情報: サービス Catalina を停止します

2007/02/21 14:01:08 org.apache.coyote.http11.Http11BaseProtocol destroy

情報: Coyote HTTP/1.1を http-8080 で停止します

2007/02/21 14:01:08 org.apache.catalina.core.AprLifecycleListener lifecycleEvent

情報: Failed shutdown of Apache Portable Runtime

最後の行って「Apacheポータブルランタイムの停止に失敗しました」って意味ですよね?

何かを失敗してるんでしょうか? その割にはエラーじゃないような…。Apacheポータブルランタイムって何だろう。いまいちよく分からなかった…。