matsukaz's blog

Agile, node.js, ruby, AWS, cocos2d-xなどなどいろいろやってます

Java SE 6 Update 10 以降の環境で Tomcat に Metro 1.4 を組み込む場合の注意点

Java SE 6 Update 10 以降の環境で、TomcatMetro 1.4 を組み込む場合は注意が必要です。
Metro のインストールマニュアルによると、以下のコマンドを実行すれば Metro を Tomcat に組み込めるとあります。

catalina.sh stop
ant -Dtomcat.home= -f /metro-on-tomcat.xml install
catalina.sh start

このコマンドで指定されている metro-on-tomcat.xml で実行していることは以下の2つ。

  1. Tomcat の shared/lib に Metro の JAR ファイルを配置
  2. Java SE 6 Update 3 以前の場合のみ、Java SE の endorsed ディレクトリ(デフォルトでは $JAVA_HOME/lib/endorsed ディレクトリ)に Metro の JAR ファイルを配置

1.については、Tomcat に Metro を組み込むために必要な処理です。
2.についてですが、Java SE 6 から JAX-WS が組み込まれています。当初は JAX-WS 2.0 だったんですが、Update 4 から JAX-WS 2.1 になったようで。Metro は JAX-WS 2.1 なので、Java SE 6 Update 3 以前を利用している場合は、Metro に含まれる JAX-WS 2.1 の API を読み込ませる必要があるわけです。
んで本題の注意点ですが、上記の 2. の処理が Java SE Update 10 以降の場合でも実行されてしまい、Java SE 6 の JAX-WS 2.1 ではなく、Metro の JAX-WS 2.1 が利用されてしまうという点です。
なんでこんなことになるかというと、metro-on-tomcat.xmlJava SE 6 Update 3 以前を判断するための記述が以下のようにあるんですが、

これだと Java SE 6 Update 10 以降も引っかかっちゃう(Java SE 6 Update 10 は "1.6.0_10")からです。Java SE 6 Update 1 の表記がおかしい("1.6.0_01" なら問題なかった)とも言えるけど、antで対応してなかったのもどうかと。
というわけで、Java SE 6 Update 10 以降で metro-on-tomcat.xml を実行する場合は、上記の記述を以下のように置き換えてから実行します。

    
        
            
            
            
            
        
     

ちなみに現在 Nightly Build の Metro 2.0JAX-WS 2.2 なので、Metro 2.0 を使う場合はやっぱり Java SE の endorsed ディレクトリに Metro の JAR ファイルを配置する必要があったり。