Jettyでホットデプロイ

Jettyでもホットデプロイができるようなので調査。
結論から書くとクラスファイルの更新がすぐさま反映されるという意味ではなく、デプロイを検知してくれるだけっぽいです。Tomcatみたいにクラスファイルの更新を検知してくれるといいんだけど、やりかたは分からなかった。。。

Eclipseで、Jetty起動プロジェクトを作成します。Jettyの起動プロジェクトについては、以前の記事を参考に。
起動用のスクリプトjetty.xmlを記述します。ここにはWebAppContextを記述しません。代わりに、ContextDeployerを設定します。ContextDeployerはコンテキストのディレクトリで、ここにデプロイ用デスクリプタを配置するとデプロイされます。

起動用Jetty.Xml

...省略...
<set name="handler">
    <new id="Contexts" class="org.mortbay.jetty.handler.ContextHandlerCollection"/>
</set>
<call name="addLifeCycle">
  <arg>
    <new class="org.mortbay.jetty.deployer.ContextDeployer">
      <set name="contexts"><ref id="Contexts"/></set>
      <set name="configurationDir">C:\Foo\Bar\JettyHotDeploy\contexts</set>
      <set name="scanInterval">1</set>
    </new>
  </arg>
</call>
...省略...

プロジェクト内に、contextsというフォルダを用意しました。こちらにWebアプリケーション単位のデスクリプタとして、context.xmlを作成して配置します。

Webアプリケーション用context.xml

<?xml version="1.0"  encoding="ISO-8859-1"?>
<configure class="org.mortbay.jetty.webapp.WebAppContext">
  <set name="contextPath">/</set>
  <set name="resourceBase">C:\Foo\Bar\JettyHotDeploy\WebContent</set>
</configure>

これでJettyを起動します。クラスファイルを更新してもリデプロイされませんが、context.xmlを更新するとリデプロイされます。

動作確認したサンプルはこちら。


コメントを残す

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

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