設定ファイル(config.xml)

Jettyを使う場合には、Jettyサーバの設定を記述したXMLファイルを指定します。このファイルを勝手にconfig xmlと呼ぶことにします。
例えば、jarファイルからJettyを起動する際には、
java -jar start.jar admin.xml demo.xml
というように、2つのconfig.xmlを指定しています。
config xmlとは、なにかというとTomcatでのServer.xml+web.xmlに近い役割を持っています。
よく調べてみると、XMLを使ったスクリプト言語のようでもあります。(クラスをnewしたりPutしたりSetしたりすることで設定を行っている)

私の好む設定としては、Tomcatと同じように、Server.xmlに相当する設定のみを行い、Webアプリケーションごとの設定は、web.xmlに行わせるのが完結で分かりやすいと思います。
つまりaddServletなんかはconfig xmlでは行わないで、web.xmlで設定した方がTomcatなどの互換性もとりやすいと思いました。

設定ファイルについては、デフォルトでついてくるいくつかのconfigXMLを参考に自分用のconfigXMLを作成するとよいと思います。大体中身はみれば分かると思います。
実は、このconfigXMLは、スクリプト言語のようになっていて、JettyのJavadocを見れば特定のクラスにAddしたりなんだりしているのが分かると思います。

例えば、冒頭のこの部分

jetty.xml


<!-- =============================================================== -->
<!-- Configure the Jetty Server                                      -->
<!-- =============================================================== -->
<configure class="org.mortbay.jetty.Server">

  <!-- =============================================================== -->
  <!-- Configure the Request Listeners                                 -->
  <!-- =============================================================== -->

  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
  <!-- Add and configure a HTTP listener to port 8080 -->
  <!-- The default port can be changed using: java -Djetty.port=80 -->
  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
  <call name="addListener">
    <arg>
      <new class="org.mortbay.http.SocketListener">
        <set name="Port"><systemProperty name="jetty.port"
default="8080"/></set>
        <set name="MinThreads">3</set>
        <set name="MaxThreads">10</set>
        <set name="MaxIdleTimeMs">30000</set>
        <set name="LowResourcePersistTimeMs">1000</set>
        <set name="ConfidentialPort">8443</set>
        <set name="IntegralPort">8443</set>
        <set name="PoolName">main</set>
      </new>
    </arg>
  </call>

これは何をしているかというと、

  1. org.mortbay.jetty.Serverの設定を行っています。
    (同時にJavadocのorg.mortbay.jetty.Serverを見てください。)
  2. このクラスに対して、addListenerメソッドをCallします。
    (addListenerメソッドは厳密にはorg.mortbay.jetty.Serverのスーパークラスのメソッド)
  3. addListenerメソッドは3つオーバーロードされていて、そのうちのひとつの引数がHttpListenerのメソッドをCallしています。
  4. そこでHttpListenerのサブクラスである、org.mortbay.http.SocketListenerをnewしています。
  5. コンストラクタの引数はなしで、newしたあとに、Setterのメソッドを8回読んでいます。
    (setPort、setMinThreads…など)

※ 2006/10/22追記
このファイルは、Jetty5時点のXMLで、Jetty6時点ではクラス名などが若干変わっています。(Jetty6ではaddListenerではなく、addConnectorになっている。
解説している内容としてはJetty5,Jetty6とも同様です。

このようにしてインスタンスを生成したListenerをServerクラスにaddしているわけです。なかなか面白い構造になっていると思います。config XMLの詳しい書式は書いていませんが、Javadocを見れば分かるというわけです。

どうように、Contextをaddして、そこにServletをaddすればweb.xmlで設定するような内容も記述できてしまいます。実際にdemo.xmlという付属のconfig XMLを参照すると、Servletの設定までもしています。
しかし、前述したように、私はconfig XMLではweb.xmlでできる設定をすべきではないと思います。(できるだけ新しいことは覚えたくないですし。)


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)