本文へジャンプ

WebSphere Developer Domain > テクノロジー > 

SOA入門

第3回 SOAへの第一歩 - Webサービス化

レベル: 初級者向け
日本アイ・ビー・エム株式会社
ソフトウェア事業部 牧野あすか

前回まではSOAとはどのような考え方かそして、SOAを実現するための技術にはどのようなものがあるかについてご紹介しました。今回はSOA実践への最初の一歩としてひとつサービスを作ってみるところを非常にシンプルな例でご説明したいと思います。というのもSOAをはじめるのに最も簡単な入り口はWebサービスを試してみることといえるためです。Webサービスは、SOAの中でも標準技術として最も取り上げられることが多く、重要なキーとなります。ここではWebサービスを利用して、非常にシンプルな在庫照会機能をサービス化してみます。Webサービス化を一から手でやろうとすると煩雑ですが、今は便利なツールが出ていますので、ウィザード形式で簡単にWebサービスを作成することができます。今回はWebSphere Studioを使って、既存の在庫照会機能をWebサービス化する手順をご紹介します。

※ 尚、WebSphere Studioは、Rational Application Developerに名称変更されています。


既存の在庫照会プログラムの例

まず既存の在庫照会プログラムですが、一例として下記のようなJavaBeanを用意しました。
通常はデータベースを検索して結果を返しますが、今回はサンプルということで商品コードが0001であれば100を、それ以外であれば0を返すというシンプルな作りにしています。

通常、サーブレットからこのプログラムを利用する場合は、
  1. GetInventoryBeanをインスタンス化する
  2. setProdcodeメソッドを使って商品コードの値をセットする
  3. getResult()メソッドを実行する
  4. getQtyメソッドを使って在庫数の値を取得する
の4つのステップが必要となります。

サンプルソース

package com.demo;

public class GetInventoryBean {

    private String prodcode;
    private int   qty;

    public void getResult(){
        /*商品コードから在庫数を返す*/
        if(prodcode.equals("0001")){
            qty=100;
        }
        else{
            qty=0;
        }
    }

    public String getProdcode() {
        return prodcode;
    }
    public void setProdcode(String string) {
        prodcode = string;
    }
    public int getQty() {
            return qty;
}
上に戻る

既存プログラムをサービスとして利用しやすい形に変更する

ではこれをサービスとして利用するためにはどのようにしたらよいでしょうか?
サービスとは、下記のようになっていることが理想です。クライアントとサービスの間で何度もやりとりが発生するのは好ましくありません。その理由は大きく2つあります。

  1. 何度も繰り返すと、ネットワークトラフィックが増える。
    サービスは多くのクライアントから利用されることを想定しているため、何度も呼び出してネットワーク・トラフィックを増やすことはパフォーマンス上好ましくありません。
  2. 何度も繰り返すにはステートフルでなければならない(SOAPはステートレス)
    Webサービスで通常使われるSOAPプロトコルはステートレスのため、前回呼び出したときの状態は保持されません。何度も呼び出す場合には同じクライアントからきたことを認識するためにサービス化したオブジェクトをステートフル(状態を保持)にしておかなければなりません。しかしWebサービスではステートフルなサービスを作成することはできません。



1回のやりとりで完結するのが理想


そこで先ほどのプログラムを下記のようにラッピングし変更します。

package com.demo;
public class GetInventory {
    public int getResult(String code){
        int i;
        GetInventoryBean obj = new GetInventoryBean();
        obj.setProdcode(code);
        obj.getResult();
        i = obj.getQty();
        return i;
    }
}

これでクライアントは1回の処理で、商品コードを渡せば、戻り値として在庫数を取得することが可能となります。

上に戻る

サービスとして利用しやすい形にしたプログラムをWebサービス化する

では、変更したプログラムをWebサービス化します。今回はWebSphere StudioのWebサービスウィザードを使用します。
下記のファイルをダウンロードして実行すると、ツールを使ってWebサービスを作成する手順がFlashでご覧になれます。

WebService.exe(1.24MB)

インターフェース記述言語のWSDL

さて、Webサービス化ができると、WebSphere Studioではインターフェース記述言語であるWSDLが自動生成されています。プロジェクト・ナビゲーター・ウィンドウで、該当プロジェクトを選択し「WebContent」->「wsdl」とたどっていくとファイルが確認できます。
このWSDLファイルには、作成した在庫照会サービスを使うにあたって必要な情報が全て書かれています。例えば引数や戻り値の型、サービスの呼び出し場所などです。これらはXML形式で記述されており、サービスを利用するクライアントのプログラムが理解できる形になっています。クライアント側はこのWSDLさえ入手できれば、在庫照会サービスを利用したプログラム開発が可能となります。



生成されたwsdlファイル

SOAというと、トップダウン・アプローチで全社のビジネスプロセスの変革を云々といったイメージをもたれている方も多いかもしれません。もちろんそうしたやり方もありますが、開発者の方には、身近なところで既存資産の一部をサービス化して使ってみるやりかたも是非おすすめします。


上に戻る

前頁へ  |  次頁へ
レベルマークについて

このページで紹介されている情報はレベル別にカテゴライズされています。

上級者向け
中級者向け
初級者向け
入門者向け

SOAポータル
詳細はこちら  

ビジネスの方もITの方も貴方の「SOA度」を試してみませんか?
詳細はこちら