IBM®
本文へジャンプ
    Japan [変更]    ご利用条件
 
 
検索範囲検索:    
    ホーム    製品    サービス & ソリューション    サポート & ダウンロード    マイアカウント    
skip to main content

developerWorks Japan  >  WebSphere  >

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

developerWorks
ページオプション

JavaScript を要するドキュメントオプションは表示されません


レベル: 初級

牧野 あすか, SWテクニカル・プランニング, IBM

2007年 10月 15日

前回までは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回のやりとりで完結するのが理想
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ファイル
生成されたwsdlファイル

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





上に戻る


ダウンロード

内容ファイル名サイズダウンロード形式
Webサービスの作成手順(Flash)webservice.exe1.24MBHTTP
ダウンロード形式について


参考文献



著者について

牧野 あすか,日本アイ・ビー・エム株式会社




記事の評価


サイト改善のため、ご意見をお寄せください。こちらのフォームからお願いいたします。



 


 


不充分・不完全である大変素晴らしい
 


この記事を共有する

del.icio.us del.icio.us newsing newsing FC2ブックマーク FC2ブックマーク
Choix! Choix! ニフティクリップ ニフティクリップ Yahoo!ブックマーク Yahoo!ブックマーク
MM/memo MM/memo CZブックマーク CZブックマーク livedoorクリップ livedoorクリップ
はてなブックマーク はてなブックマーク Buzzurl(バザール) Buzzurl(バザール)




上に戻る


    日本IBMについて プライバシー お問い合わせ