Feb 14, 2006

Jetty にチャレンジ

Jetty とは

Jetty はオープンソースの Servlet Engine。 Tomcat と同カテゴリのソフトウェア。 Servlet Engine なので当然 Servlet をディプロイすることも可能なのだけれど、 今回は Jetty そのものをアプリケーション内に取り込んでみる。 Servlet を登録するよりもコーディングは面倒になるが、色々融通が利くようになる。

Jetty 公式サイト
http://jetty.mortbay.org/jetty/index.html

Jetty の初期化 & 起動

まずは Jetty を初期化する。今回使用している Jetty のバージョンは 6.0 beta8。

InputStream is = null;
Server server = null;
try {
  is = this.getClass().getResourceAsStream("/jetty.xml");
  XmlConfiguration configuration = new XmlConfiguration(is);
  Object obj = configuration.newInstance();
  server = (Server) obj;
} finally {
  if (is != null) {
    is.close();
  }
}

MyHandler myHandler = new MyHandler();
server.setHandler(myContextHandler);
server.start();
jetty.xml はこんな↓感じ。
<?xml version="1.0"?>

<!DOCTYPE Configure PUBLIC 
          "-//Mort Bay Consulting//DTD Configure//EN" 
          "http://jetty.mortbay.org/configure.dtd">

<Configure id="Server" class="org.mortbay.jetty.Server">
    <Set name="ThreadPool">
      <New class="org.mortbay.thread.BoundedThreadPool">
        <Set name="minThreads">10</Set>
        <Set name="maxThreads">100</Set>
      </New>
    </Set>
    <Set name="connectors">
      <Array type="org.mortbay.jetty.Connector">
        <Item>
          <New class="org.mortbay.jetty.nio.SelectChannelConnector">
            <Set name="port">80</Set>
            <Set name="maxIdleTime">50000</Set>
            <Set name="Acceptors">10</Set>
          </New>
        </Item>
      </Array>
    </Set>
</Configure>

ハンドラの作成

リクエストを受け取ったときに実行されるハンドラを用意する。 但し、この時点では HttpSession は使えないので要注意。

public class MyHandler extends AbstractHandler {

  public MyHandler() {
    super();
  }

  public boolean handle(final String target,
         final HttpServletRequest request,
         final HttpServletResponse response, final int dispatch)
           throws IOException, ServletException {

    // TODO: ここで何か処理をする
  }
}

HttpSession の準備

HttpSession を使う場合はもう少し面倒なコーディングが必要。 ハンドラを ContextHandler と SessionHandler でラッピングすると HttpSession が使用できるようになる。 ハンドラのの登録は jetty.xml を使って行っても良い。

  SessionManager sessionManager = new HashSessionManager(new Random(
          System.currentTimeMillis()));
  sessionManager
          .setMetaManager(new AbstractSessionManager.NullMetaManager());

  MyHandler myHandler = new MyHandler();
  SessionHandler sessionHandler = new SessionHandler();
  sessionHandler.setHandler(myHandler);
  sessionHandler.setSessionManager(sessionManager);
  MyContextHandler myContextHandler = new MyContextHandler();
  myContextHandler.setContextPath("/");
  myContextHandler.setHandler(sessionHandler);

  this.server.setHandler(myContextHandler);

TrackBack ping me at
http://www.in-vitro.jp/blog/index.cgi/Library/20060214_01.trackback
Post a comment

writeback message: Ready to post a comment.