最終回 Webサービス・プロバイダを作ろう(後編)

中林 紀彦
日本アイ・ビー・エム株式会社
2003/3/29

Webサービスによるポータル・アプリを作ろう

 それでは連載の締めくくりとして、Webサービスを利用したポータル的なソリューションをイメージできるクライアントを作成してみましょう。

 ユーザーIDを入力すると、郵便番号から住所(都道府県名)を検索し、都道府県名から今日と明日の天候を検索・表示するというアプリケーションです。実際には、お天気情報のWebサービスもローカルにありますが、別のサーバで提供していると考えてください。

図1 作成するポータルの全容

データベースとテーブルの準備

 ここでは、1つのテーブルを持つ以下のようなデータベースを作成します。

 
データベース:user
列名
タイプ名
長さ
NULL
UID CHARACTER 3 いいえ
UNAME CHARACTER 10 はい
WTEXT CHARACTER 7 はい
テーブル:user_address

 まずデータベースを作成するために、以下のDDLファイルを作ってdb2コマンドを実行します。

CREATE DATABASE USER;
create_db_user.ddl

$ db2 -tvf create_db_user.ddl
CREATE DATABASE USER
DB20000I CREATE DATABASE コマンドが正常に終了しました。

 次にテーブルを作成するDDLファイルを準備します。

CONNECT TO user;
CREATE TABLE user_address (
        uid     CHAR(3) NOT NULL,
        zipcode CHAR(7),
        PRIMARY KEY (uid)
);
CONNECT RESET;
create_tb_user.ddl

 上記のDDLファイルを利用して、テーブルを作成します。

$ db2 -tvf create_tb_user.ddl
CONNECT TO user

      データベース接続情報

 データベース・サーバ                               = DB2/LINUX 8.1.0
 SQL 許可 ID                                          = DB2INST1
 ローカル・データベース別名                           = USER


CREATE TABLE user_address ( uid CHAR(3) NOT NULL, uname CHAR(10), zipcode
CHAR(7), PRIMARY KEY (uid) )
DB20000I  SQL コマンドが正常に終了しました。

CONNECT RESET
DB20000I  SQL コマンドが正常に終了しました。

データのインポート

 以下の2つのファイルを用意します。ユーザーとその郵便番号を記述したCSVファイルと、それをテーブルにインポートするDDLファイルです。

CONNECT TO user;
IMPORT FROM user.csv OF DEL
MESSAGES message.log REPLACE INTO user_address;
CONNECT RESET;
import_user.ddl

001,Norihiko,3300843
002,Rie,1500043
003,Futa,2210052
user.csv

 ファイルを作成したらデータをインポートします。

$ db2 -tvf import_user.ddl
CONNECT TO user

      データベース接続情報

 データベース・サーバ                                 = DB2/LINUX 8.1.0
 SQL 許可 ID                                            = DB2INST1
 ローカル・データベース別名                             = USER


IMPORT FROM user.csv OF DEL MESSAGES message.log REPLACE INTO 
user_address

読み込まれた行数        = 3
スキップされた行数      = 0
挿入された行数          = 3
更新された行数          = 0
拒否された行数          = 0
コミットされた行数      = 3


CONNECT RESET
DB20000I  SQL コマンドが正常に終了しました。

新機能の実装

 データを準備したら、先ほどのアプリケーションをベースにポータル・アプリケーションを作成します。

 ユーザー情報はローカルのデータベースに持っているので、このデータベースを検索する準備を行います。そのために、データベース関連のコンポーネント(SQLConnection、SQLDataSet)を配置して各プロパティを設定します。

 配置したSQLConnection1をダブルクリックし、先ほど作成したデータベース用の「DB2User」という接続を作成し、プロパティを画面9のように設定します。また、LoginPromptは「False」にします。

画面9 SQLConnection1のプロパティ設定

 SQLDataSet1は、SQLConnectionを「SQLConnection1」、NoMetaDataをwTrue、CommandTextには、

'SELECT uid, uname, zipcode from user_address WHERE uid = :uid'

というSQLを入力します。パラメータuidは画面10のように設定します。

画面10 パラメータuidの設定

 これで、ローカルのデータベースuserからユーザーの郵便番号を検索する準備が整いました。

 次に、郵便番号から都道府県を検索するためのWebサービス・クライアントを実装します。このWebサービスは、Webサービス同好会(http://objectclub.esm.co.jp/webservice/)で公開されている「郵便番号検索Webサービス」を利用します。

 同Webサービスを利用するために、WSDL(http://nile.esm.co.jp:8080/wsdl/ZIPSearch.wsdl)をインポートします。

画面11 WSDLインポートウィザードの画面

 ZIPSearch1.pasというファイルが生成されるので保存します。次にHTTPRIOコンポーネント(HTTPRIO1)を追加して、WSDLLocationを「http://nile.esm.co.jp:8080/wsdl/ZIPSearch.wsdl」とし、ServiceとPortをドロップダウンリストから選択します。

画面12 HTTPRIO1のプロパティ設定

 準備の仕上げとして、[ユニットを使う]でZIPSearch1とEditコンポーネント(Edit2)を追加します。

 それでは、Button1をダブルクリックしてロジックを実装しましょう。

procedure TForm1.Button1Click(Sender: TObject);
var
  obj: ZIPSearch;
  add: ArrayOfZIPInfo;
begin
  {Edit1に入力されたユーザーIDから郵便番号を検索}
  SQLDataSet1.Params[0].Value := Edit1.Text;
  SQLDataSet1.Open;

  {「郵便番号検索Webサービスを使ってユーザーの都道府県を検索」}
  obj := HTTPRIO1 as ZIPSearch;
  add := obj.getZIPInfoByZipcode(SQLDataSet1.FieldValues['zipcode']);
  Edit2.Text := add[0].prefnamek;
  SQLDataSet1.Close;

  {「お天気Webサービス」を使ってお天気を表示}
  ClientDataSet1.Close;
  ClientDataSet1.Params[0].Value := Edit2.Text;
  ClientDataSet1.Open;
end;

 それでは、実行してみましょう。

画面13 ユーザーIDで各地の天候を表示するアプリケーション

 Edit1にユーザーIDを入力して[O.K.]ボタンをクリックすると、そのユーザーの住所の天候が表示されるはずです。

 最後にちょっとした味付けとしてLabelコンポーネントを追加し、ログインすると「ようこそ○○さん」と表示されるようにしてみましょう。ソースに、オレンジの部分を追加します。

procedure TForm1.Button1Click(Sender: TObject);
var
  obj: ZIPSearch;
  add: ArrayOfZIPInfo;
begin
  {Edit1に入力されたユーザーIDから郵便番号を検索}
  SQLDataSet1.Params[0].Value := Edit1.Text;
  SQLDataSet1.Open;

  {ようこそ◯◯さんを表示}
  Label1.Caption := 'ようこそ' + SQLDataSet1.FieldValues['uname'] + 'さん';


  {「郵便番号検索Webサービスを使ってユーザーの都道府県を検索」}
  obj := HTTPRIO1 as ZIPSearch;
  add := obj.getZIPInfoByZipcode(SQLDataSet1.FieldValues['zipcode']);
  Edit2.Text := add[0].prefnamek;
  SQLDataSet1.Close;

  {「お天気Webサービス」を使ってお天気を表示}
  ClientDataSet1.Close;
  ClientDataSet1.Params[0].Value := Edit2.Text;
  ClientDataSet1.Open;
end;

 ちゃんとユーザー名が表示されたでしょうか?

画面14 完成したポータルの画面

 ここまでできれば、パーソナル・ポータルの完成です。Webブラウザから使えるWebアプリケーションにすることも、もちろん簡単にできます(第2回参照)。12星座占いを提供するWebサービスやニュースを提供するWebサービスなどがどんどん増えてくれば、パーソナル・ポータルをさらに充実させることができます。

 また、今回の連載ではWSDLを使ってWebサービスを利用する例を紹介しましたが、UDDIで必要なサービスを検索して利用するといった例も今後増えていくことでしょう。例えば、天気予報を提供するサイトが複数存在していてUDDIに登録されていれば、要件にマッチしたWebサービス提供者を探し出す、といったことも近い将来可能になるでしょう。

最後に

 この連載に最後までお付き合いいただき、ありがとうございました。Kylixを利用すれば、Webサービス・アプリケーションを非常に簡単・短時間で作ることができます。また、DB2自体もWebサービス関連の機能を持っています。

Webサービス・プロバイダ(Web Services Object Runtime Framework for DB2):
http://www7b.software.ibm.com/dmdd/zones/webservices/worf/

Webサービス・クライアント(Web Services Consumer):
http://www7b.software.ibm.com/dmdd/zones/webservices/wsconsumer/

 KylixもDB2も、評価版を無償で利用できるので(第1回参照)、皆さんもぜひWebサービス・アプリケーションにチャレンジしてみてください。

2/2

Index
Kylix 3とDB2で作るWebサービス・アプリケーション
 最終回 Webサービス・プロバイダを作ろう(後編)
  Page 1
Webサービスの公開
 Apacheの設定
 WDSLの公開
テスト用Webサービス・クライアントの作成
 テキスト表示Webサービス・クライアントの作成
 画像を使ったWebサービス・クライアントの作成
  Page 2
Webサービスによるポータル・アプリを作ろう
 データベースとテーブルの準備
 データのインポート
 新機能の実装
最後に

連載 Kylix 3とDB2で作るWebサービス・アプリ


 Linux Squareフォーラム プログラミング関連記事
特集:オブジェクト指向に生まれ変わるPHP5[前編]
現在開発中のPHP5は、オブジェクト指向機能が大幅に強化される。次世代PHPはどのような言語になるのか?
特集:Windows開発者に贈る Kylixの全貌
注目の開発環境「Borland Kylix」がいよいよ見えてきた。ここに、英語版の発売を目前に控えたKylixの機能やアーキテクチャを紹介しよう
特集:Kylixプログラミング作法
GUIの構築やコンポーネントとコードの関係、 Object Pascalの仕様など。 これらの点を、実際に日本語ベータ版でプログラミングしながら分かりやすく解説
連載:PHP4で作るWeb-DBシステム(全5回)
PHPはWebサーバとデータベースを結びつけるものだ。そのためPHPでの開発を開始するには、OS、データベース、Webサーバ、そしてPHPと、多くのソフトウェアのインストールを行う必要がある
連載:ステップ・バイ・ステップ・シェルスクリプト(全7回)
Linuxの中でシェルスクリプトはネットワークの設定、デーモンの起動など重要な役割を果たしている。この連載では、シェルスクリプトで実用的なプログラムを組むことを目標にして、シェルの基本的な知識を説明する
連載:Kylix 3とDB2で作るWebサービス・アプリ(全5回)
Kylix 3とDB2 V8.1を使って、Webサービス・アプリを作ってみよう。トライアル版も用意されているので、実際に試しながら読んでほしい

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間