Cubby on Jetty

cubby on jetty

今回の脱線: jettyのmaven2リポジトリは構成がバージョンによってむちゃくちゃなのでdependencyの指定に注意

夜中のCubbyの続きです。無事、スケルトンはできあがったのですが、なぜかJettyで動かしたいという脱線欲が出てきてしまいました。
僕はEclipseTomcatプラグインがなぜかあまり好きではないのです。理由は分からないですが、Tomcatにしか対応していないとか、勝手にアプリケーションサーバをダウンロードしてくれないとか、そういう所のような気がします。

そこでJettyのランチャを書いて、そいつをEclipse上で[Run as...]とか[Debug as...]するようにしようと思います。

まずは、作成したCubbyのスケルトンプロジェクトのpom.xmlに以下のdependencyを追加します(ちなみに僕は、maven2-eclipse-pluginを使ってますので、とりあえずtestスコープにしました)。

....
    <dependency>
      <groupId>org.mortbay.jetty</groupId>
      <artifactId>jetty</artifactId>
      <version>6.1.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mortbay.jetty</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.1-6.0.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mortbay.jetty</groupId>
      <artifactId>jsp</artifactId>
      <version>2.1-6.0.1</version>
      <scope>test</scope>
    </dependency>
...

と、さらっと書きましたが、この構成を探し当てるまでが一苦労なのでした。まず、jettyのmaven2リポジトリには、jsp関連だけで以下のようなartifactIdがあります。その中にjettyのリリースに応じていくつものバージョンがある訳ですがですが、これがあったりなかったり、はたまたあったかと思ったらpom.xmlだけだったり…。リリースの度にリポジトリの構成をたびたび見直したような感じ。

[DIR] jsp-2.0/ 12-Sep-2008 08:58 -
[DIR] jsp-2.1-glassfish/ 16-Jul-2008 02:19 -
[DIR] jsp-2.1-jetty/ 05-Aug-2008 16:22 -
[DIR] jsp-2.1/ 12-Sep-2008 08:57 -
[DIR] jsp-api-2.0/ 12-Sep-2008 08:58 -
[DIR] jsp-api-2.1-glassfish/ 16-Jul-2008 02:15 -
[DIR] jsp-api-2.1/ 12-Sep-2008 08:56 -
[DIR] jsp-api/ 04-Jan-2007 13:23 -
[DIR] jsp/

http://repo1.maven.org/maven2/org/mortbay/jetty/

試行錯誤の結果、バージョン違いでも動くことが分かりましたので、とりあえず上記の構成に落ち着きました。

さてさて、ランチャーの方は次のように /src/main/test 以下に記述しました。

package goking.cubby_report.jetty;

import org.mortbay.jetty.Connector;
import org.mortbay.jetty.Handler;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.handler.DefaultHandler;
import org.mortbay.jetty.handler.HandlerCollection;
import org.mortbay.jetty.nio.SelectChannelConnector;
import org.mortbay.jetty.webapp.WebAppContext;
import org.mortbay.jetty.webapp.WebXmlConfiguration;

public class JettyRunner {
	
	public static void main(String args[]) throws Exception {
		
		Server server = new Server();

		Connector connector = new SelectChannelConnector();
		connector.setPort(8080);
		server.setConnectors(new Connector[]{connector});
		
		WebAppContext context = new WebAppContext();
		context.setContextPath("/cubby-report");
		context.setWar("src\\main\\webapp");
		
		WebXmlConfiguration conf = new WebXmlConfiguration();
		conf.setWebAppContext(context);
		
		HandlerCollection handlers= new HandlerCollection();
		handlers.setHandlers(new Handler[]{context, new DefaultHandler()});
		
		server.setHandler(handlers);

		server.start();
		server.join();
	}
	
}

これを、[Run as...]で起動して、今のところ問題なく動いてます。もちろん、[Debug as...]で起動すれば、ブレークポイントもはれますよ。
なお、ランチャの作成の際には以下のサイトをチラ見しました。

Jettyサーバを使ってみる
2006/02/27 by civic

http://civic.xrea.jp/dev/jetty/

一応、スナップショットもつけとこ。

というわけで、肝心のCubbyでのサンプルアプリの作成は…明日の朝だな…。
それにしても "Cubby on Jetty" って韻を踏んでていい感じ。