■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
                      2008年12月23日

    Java総合講座 - 初心者から達人へのパスポート
                  vol.132

                                セルゲイ・ランダウ
 バックナンバー: http://www.flsi.co.jp/Java_text/
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


[このメールマガジンは、画面を最大化して見てください。]


========================================================
◆ 01.SOAPのアプリケーション(Webサービス)
========================================================


さて、今回はWindows環境でのWebサービスのデプロイ作業をAntにやらせてみる
ことにしましょう。

以前、vol.127では、WebサービスのクラスをAxisのclassesフォルダーに
パッケージごとコピーするという作業を行いましたが、今回はクラス・ファ
イルではなく、JARファイルを作成してデプロイすることにします。
JARファイルはvol.127でもお話したようにAxisのlibフォルダー(ディレクトリー)に
コピーすることになります。

このJARファイルに関する作業も含めて、デプロイ作業は以下のような手順で行うこと
にします。

(1) WebサービスのJARファイルを作成し、Axisのlibディレクトリーに配置する。
(2) WSDDファイルを生成する。
(3) Axisのデプロイを実行する。


では、さっそくビルド・ファイル(通常build.xmlというファイル名で作られるファイル)
を作成してみましょう。
ただし、今回はbuild.xmlというファイル名ではなく、別のファイル名にしてみましょう。

では、前回作成したant_workフォルダーの中に次のような内容のテキスト・ファイルを
作成し、build_deploy.xmlというファイル名で保存してください。
(なお、<!-- と --> で囲まれた部分はコメントですから、入力しなくてもいいです。)

--------------------------------------------------------
<?xml version="1.0" encoding="Shift_JIS"?>
 <project name="WebServices Deploy" basedir="." default="deploy">
   <property file="build.properties" />

   <path id="axis.classpath">
     <fileset dir="${axis.dir}/lib">
        <include name="**/*.jar" />
      </fileset>
   </path>
  
   <!-- 下記のaxis-tasks.propertiesファイルはaxis-ant.jarに入っています。 -->
   <taskdef resource="axis-tasks.properties" classpathref="axis.classpath" />

   <!-- 下記のcopyタスクは標準のAntタスクです。 -->
   <target name="copy2work">
     <copy todir="${work.dir}">
       <fileset dir="${classes.dir}">
         <include name="**/**"/>
         <exclude name="**/*.java"/>
       </fileset>
     </copy>
   </target>

   <!-- 下記のjarタスクは標準のAntタスクです。 -->
   <target name="jar" depends="copy2work">
     <jar destfile="${axis.dir}/lib/webservice1.jar"
       basedir="${work.dir}"
       includes="**/**"
       excludes="**/*.java"
     />
   </target>

   <!-- 下記のaxis-java2wsdlタスクはaxis-tasks.propertiesで定義されています。 -->
   <target name="java2wsdl" depends="jar">
     <axis-java2wsdl
      classname="jp.co.flsi.lecture.soap.WebService1"
      location="http://localhost:8080/axis/services/WebService1"
      namespace="http://webservice.flsi.co.jp/"
      output="${local.wsdl}" >
     </axis-java2wsdl>
   </target>

   <!-- 下記のaxis-wsdl2javaタスクはaxis-tasks.propertiesで定義されています。 -->
   <target name="wsdl2java" depends="java2wsdl">
     <axis-wsdl2java
      implementationClassName="jp.co.flsi.lecture.soap.WebService1"
      output="${work.dir}"
      serverside="true"
      url="${local.wsdl}" >
     </axis-wsdl2java>
   </target>

   <!-- 下記のaxis-adminタスクはaxis-tasks.propertiesで定義されています。 -->
   <target name="deploy" depends="wsdl2java">
     <axis-admin port="8080" hostname="localhost" failonerror="true"
      servletpath="${axisservlet}" debug="true" xmlfile="${wsdd.deployfile}" />
   </target>

   <target name="undeploy">
     <axis-admin port="8080" hostname="localhost" failonerror="true"
      servletpath="${axisservlet}" debug="true" xmlfile="${wsdd.undeployfile}" />
   </target>
 </project>
--------------------------------------------------------

このビルド・ファイルの中身の詳しい説明は後述することにして、ここではごく簡単に
このファイルで行っている内容を解説しておきましょう。

まず、Antではプロパティー・ファイル(property file)と呼ばれるファイルを用意して
プロパティー(わかりやすく言うと、変数のこと)を設定しておくことができるのですが、
ここではbuild.propertiesという名前のプロパティー・ファイルを指定しています。

クラスパスとしてaxis.classpathという名前で、Axisのlibディレクトリー配下のすべて
のJARファイルを指定しておきます。

Antでは、各作業(具体的には何らかのプログラムやコマンドを実行すること)をタスク
(task)と呼び、代表的なものはAntに予め定義されていますが、AxisでもAnt用にタスク
を定義したファイルが用意されています。
Axisによって提供されているaxis-ant.jarというJARファイルの中に入っている
axis-tasks.propertiesというファイルの中でそのタスクの名前が定義されています。
このファイルは先ほどのaxis.classpathのクラスパスの中で見つけられます。

Antでは、実行対象をターゲット(target)と呼び、各ターゲットに名前をつけておいて、
Antの起動時に実行したいターゲットの名前を指定することができるようになっています。
ここでは、デプロイ作業の(1)を実行するためにcopy2workという名前のターゲットとjar
という名前のターゲットを定義しています。
copy2workでは、(後の作業のために)Eclipseのワークスペースに入っているWebサービス
のクラス・ファイルをディレクトリーごと作業用ディレクトリーにコピーしています。
(特にクラス・ファイルを指定しているわけではないが、ソース・ファイルを除外してい
るので結果的にはクラス・ファイルだけがコピーされる。)
一方、jarでは作業用ディレクトリー配下のクラス・ファイルからJARファイルを作成して
います。このとき、JARファイルの出力先は、Axisのlibディレクトリーにしています。


続いて、java2wsdlという名前のターゲットでは、Axis(axis-tasks.propertiesの中)で
定義されているaxis-java2wsdlというタスクを実行してJavaのファイルからWSDLファイル
を自動生成します。

続いて、wsdl2javaという名前のターゲットでは、Axis(axis-tasks.propertiesの中)で
定義されているaxis-wsdl2javaというタスクを実行してWSDLファイルからJavaのソース・
ファイルを自動生成します。このとき、(serversideという属性をtrueに設定してあること
によって)同時にWSDDファイルも自動生成されます(デプロイ作業の(2))。

続いて、deployという名前のターゲットでは、Axis(axis-tasks.propertiesの中)で
定義されているaxis-adminというタスクを実行してAxisのデプロイを行います(デプロイ作業の(3))。

あと、おまけでundeployというターゲットも用意しておきましたが、これについては
次回解説いたします。


さて、上のビルド・ファイルでは、ところどころに${axis.dir}のように ${ と } で文字列
が囲まれているところがありますが、これはその場所でプロパティー(変数)の値を引用
することを意味します。

当ファイルでは、これらのプロパティーはbuild.propertiesという名前のプロパティー・
ファイルの中で定義することにしているので、このプロパティー・ファイルも作成しま
しょう。


では、ant_workフォルダーの中に次のような内容のテキスト・ファイルを作成し、
build.propertiesというファイル名で保存してください。

--------------------------------------------------------
work.dir=./
classes.dir=C:/JavaWorks/JStudySOAP/bin
axis.dir=C:/Tomcat6.0/webapps/axis/WEB-INF
local.wsdl=./WebService1.wsdl
axisservlet=axis/services/AdminService
wsdd.dir=./jp/co/flsi/webservice
wsdd.deployfile=${wsdd.dir}/deploy.wsdd
wsdd.undeployfile=${wsdd.dir}/undeploy.wsdd
--------------------------------------------------------

ちなみに、このプロパティー・ファイルには、ディレクトリー名のようにプラットフォーム
に依存する名前を入れておいてプラットフォームごとにファイルを差し替えるようにしたり、
あるいは頻繁に使用される名前をここにまとめて入れておいて一元管理するのに使用する
と便利です。



以上のファイルの作成・保管が終わりましたら、さっそくAntを実行してみましょう。


ただし、今回はJARファイルを使用しますから、以前Axisのclassesディレクトリー

C:\Tomcat6.0\webapps\axis\WEB-INF\classes

に入れておいたクラス・ファイル(パッケージのフォルダーごとコピーしておいたもの。
つまり、jp\co\flsi\lecture\soap\WebService1.class)は必要ありませんので、予め
削除しておいてください。


その後、Tomcatを起動しておいてください(Axisを起動するため)。


では、Antを実行しましょう。コマンド・プロンプトを開き、ant_workをカレント・ディレ
クトリーにして

ant -f build_deploy.xml

というコマンドを実行してみてください。
このように、ビルド・ファイルにbuild.xml以外のファイル名を使った場合は
「-f ファイル名」という引数を指定する必要があります。

何行かメッセージが出力されて、最後に

BUILD SUCCESSFUL
Total time: 15 seconds

のようなメッセージが返ってきたら、OKです。
(ただし、Total timeの数字は環境によって異なる)

今回は、新しくJARファイルがAxisのlibディレクトリーに置かれましたので、Tomcatを
起動し直す必要があります。いったんTomcatを停止し、再度Tomcatを起動してください。


続いて、EclipseでSOAPのクライアントのプログラム(WebService1Client)を実行して
みましょう。

以前と同じ結果が返ってきますね。


(次回に続く)


では、今日はここまでにします。

何か、わからないところがありましたら、下記のWebページまで質問を
お寄せください。



┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
★ホームページ:
      http://www.flsi.co.jp/Java_text/
★このメールマガジンは
     「まぐまぐ(http://www.mag2.com)」
 を利用して発行しています。
★バックナンバーは
      http://www.flsi.co.jp/Java_text/
 にあります。
★このメールマガジンの登録/解除は下記Webページでできます。
      http://www.mag2.com/m/0000193915.html
★このメールマガジンへの質問は下記Webページにて受け付けて
 います。わからない所がありましたら、どしどしと質問をお寄
 せください。
      http://www.flsi.co.jp/Java_text/
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

Copyright (C) 2008 Future Lifestyle Inc. 不許無断複製