tomcat7 の Parallel deployment を試してみる

最初に……
同様の機能は jboss にも glassfish にもありますよってことで

「Parallel deployment」は、TomcatにおけるWebアプリケーションのバージョン管理機能です

http://www.atmarkit.co.jp/fjava/rensai4/tomcat7_03/01.html#02

とあるのですが、実際どのくらい使えるのか触ってみないとわからないですよねって事で触ってみた。

最初の登録

war ファイルにバージョン番号を特定の書式で書いておくとアプリケーションのバージョン管理ができます。

appName##version.war

pom には下記のように書いておくと楽ですね。

  <build>
    <finalName>servlet-test##${project.version}</finalName><!-- こんな感じでバージョンを記述 -->
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <configuration>
          <failOnMissingWebXml>false</failOnMissingWebXml>
        </configuration>
      </plugin>
    </plugins>
  </build>

で、tomcat にアップロードをすると
こんな感じでバージョンが反映されているのがわかります。

実際にアクセス

当たり前だけど普通にアクセスして動きます。

新しいバージョンをデプロイ


こんな感じで複数バージョンが共存しています。

他のブラウザからアクセス

セッションが共有されないように他のブラウザからアクセスしてみると見事共存して動いていることがわかります

古い方のレスポンスが終わる前に古い方を削除してみる

古い方のコネクションが残ってるまま古い方を削除したらどうなるのでしょう?
$ rm -rf servlet-test\#\#1.0.0.war servlet-test\#\#1.0.0/

削除完了した後も古い方も動き続けています。

無事に終了


無事に終了しましたね。

結論

アプリケーションのデプロイや削除は manage の画面からやっても
普通にコマンドラインで cp や rm でやっても同じ結果でした。

同じアプリが同時に二個動くのでメモリや CPU のコストもそうですが、static な値や DB へのコネクションなどが倍になったりする可能性もあるでそこは注意しないとですが、便利ですね!!!

ソース
https://github.com/yoshiori/servlet-test