• ウェブサービスを書いてみる - コネクタ編

    アクセス解析をapacheのログとまとめて行えると便利なので、コネクタを利用してapache→Tomcatへの接続ルートを用意する。 ウチのサーバの場合、外に公開するのはNAT内のapache(TCP:80)だけにしておきたいので、Tomcat(TCP:8080)を野ざらしにしない意味もある。

    mod_jk

    • Apache Tomcat - Apache Tomcatから、トップ→[Download/Tomcat Connectors]。
    • JKをダウンロードする。今回使用したのは「JK 1.2.15 Source Release tar.gz」
    • アーカイブを適当な場所に展開してビルドする。このエントリは事後に書いているので細かいことは忘れてしまったが、たぶん下のような感じ。
      > ./configure --with-apxs=/usr/sbin/apxs
      > make
    • できあがった「mod_jk.so」をapacheのmodule置き場に配置し、confにモジュールのロードとログの設定を書く。/etc/httpd/conf.d/tomcat.conf
      LoadModule jk_module modules/mod_jk.so
      JkLogFile /var/log/httpd/mod_jk.log
      JkLogLevel info
    • ウチのサーバの場合、仮想ホスト運用しているので、必要なVirtualHostディレクティブ内にJKのマウント設定を書く。何もかも外に出す必要はないので最低限の範囲で。そうしないとAdminServiceへも外からアクセスできてしまう。
      JkMount /KeitaisoWS/services/KeitaisoKaisekiService* ajp13

    起動

    • apache→TomcatへTCPセッションが張られるので、Tomcatが先に起動している必要があるみたいだ。
    • Tomcatを再起動した場合、apacheにSIGHUPを送るなどして再接続が必要。これってapacheが先に起動していた場合でもセッションが確立していなかったら改めて接続を試みる、みたいな動きに出来ないのかな。。
    • ブラウザから、http://passing.breeze.cc/KeitaisoWS/services/KeitaisoKaisekiService?wsdl にアクセスしてコネクタが働いているか確認する。
    • ブラウザから、http://passing.breeze.cc/KeitaisoWS/ にアクセスしてコネクタが働いていないことを確認する。
  • ウェブサービスを書いてみる - サーバに載せる

    ここまででローカルPC内でウェブサービスクライアント~サービス間の疎通を行うことが出来た。
    今度はサービスプロバイダを実際にサービスを公開するサーバに載せる。
    今回使用したサーバは、OS=FedoraCore3、Java=JDK5.0 update5を使用している。

    導入

    • Windows上で環境構築した際に使用したzipアーカイブをlinux上でどしどし展開する。
      • /home/
        • apache-tomcat-5.5.15/
        • apache-tomcat/ (シンボリックリンク)
        • sen-1.2.1/
        • sen/ (シンボリックリンク)
    • senについては、プロジェクトのホームページからダウンロードしたアーカイブでなくて、Windows上で「辞書の準備」までした状態当該ディレクトリをアーカイブし、そのままサーバ上に展開すると、辞書を改めて用意しなくていいので手間が省ける。

    Tomcat

    • ウェブアプリからsenを実行できるようにするため、conf/catalina.propertiesに以下の内容を追記する。
      sen.home=/home/sen
    • bin/startup.shを実行して起動。

    デプロイ

    • こんな感じのターゲットで、ローカルの資産をWARに固めてTomcatにデプロイする。そのまま、Axisでのデプロイも行って、サービスを登録する。
      リモートからサービスをデプロイするには(AdminServiceを使うには)、server-config.wsddでenableRemoteAdminをtrueにしておく必要がある。org.apache.axis.utils.Adminを用いてserverサイドのconfigを「ローカルで」生成し、これを雛形にしてリモートAdminを有効にした状態で、WebContent/WEB-INF/sever-config.wsddとして放り込んだ。で、そのままTomcatにデプロイしてAdminClientからサービスをデプロイ、とゆー、大雑把な手段。。。
      <taskdef resource="axis-tasks.properties" />
      <taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask"/>
      <taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask"/>
      
      <property name="dist" value="./dist" />
      <property name="web" value="./WebContent" />
      <property name="war" value="KeitaisoWS.war" />
        
      <target name="deploy_ws" depends="deploy2server">
          <axis-admin
              port="8080"
              hostname="passing.breeze.cc"
              failonerror="true"
              servletpath="/KeitaisoWS/services/AdminService"
              xmlfile="./src/cc/breeze/ws/keitaiso/deploy.wsdd"
              username="AdminServiceを使うためのユーザ。user.lstに書いておく"
              password="パスワード"
          />
      </target>
      
      
      <target name="make_war">
          <delete dir="${dist}" />
          <mkdir dir="${dist}"/>
          <mkdir dir="${dist}/WEB-INF"/>
          <mkdir dir="${dist}/WEB-INF/classes"/>
          <mkdir dir="${dist}/WEB-INF/lib"/>
          <copy todir="${dist}">
              <fileset dir="${web}">
                  <include name="**/*.*"/>
                  <exclude name="**/*.java"/>
                  <exclude name="**/jsp_servlet/*.class"/>
                  <exclude name="**/build.xml"/>
                  <exclude name="**/build.properties"/>
              </fileset>
          </copy>
          <copy todir="${dist}/WEB-INF/classes">
              <fileset dir="build/classes">
                  <include name="**/*.*"/>
                  <exclude name="**/jsp_servlet/*.class"/>
                  <exclude name="**/*.java"/>
                  <exclude name="**/*.wsdd"/>
              </fileset>
          </copy>
      </target>
      
      
        
      <target name="deploy2server" depends="make_war,undeploy" >
          <delete file="${war}" failonerror="false" />
          <jar jarfile="${war}" basedir="${dist}" manifest="${dist}/META-INF/MANIFEST.MF"/>    
          <deploy url="http://passing.breeze.cc:8080/manager"
              username="Tomcatのmanagerを使うためのユーザ"
              password="パスワード"
              path="/KeitaisoWS"
              war="${war}"
          />
      </target>
      
      
      <target name="undeploy">
          <undeploy url="http://passing.breeze.cc:8080/manager"
              username="Tomcatのmanagerを使うためのユーザ"
              password="パスワード"
              path="/KeitaisoWS"
              failonerror="false"
              />
      </target>
      
      		
    • Tomcatのmanagerを使うためのユーザは、サーバ側Tomcat導入ディレクトリのconf/tomcat-users.xmlに書いておく。
    • ブラウザからhttp://passing.breeze.cc:8080/managaer/htmlにアクセスしてTomcatに配備されたか確認する。
    • ブラウザからhttp://passing.breeze.cc:8080/KeitaisoWS/ →「リスト」にアクセスしてサービスが配備されたか確認する。