第4回 Webサービス・プロバイダを作ろう(前編)

連載もいよいよ大詰め。最後のテーマ「Webサービス・プロバイダ」の作成だ。データベースを利用したWebサービス・プロバイダも簡単に作れることが実感できるだろう。(編集局)

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

 第3回では、Webサービスを利用するアプリケーション(Webサービス・クライアント)の作成方法を紹介しました。そこで、今回はWebサービスを提供するアプリケーション(Webサービス・プロバイダ)の作成手順を解説します。

 前回はサービス利用者側の話をしましたが、今回はサービスを提供する側の話です。サービスの提供者(Webサービス・プロバイダ)は、サービスを作成してUDDIレジストリに登録するか、WSDLを利用者に公開します()。利用者はUDDIレジストリやWSDLから利用できるサービスを探し、SOAPを使って提供者にリクエストします。最後に、提供者はリクエストに基づき、SOAPを使って利用者にサービスを提供します。

図1 Webサービスの構成(再掲)

データベースの準備

 今回は、気象情報をWebサービスで提供するアプリケーションを作成していきます。

 まず、気象情報を格納するデータベースを準備します。このデータベースは、日付別・都道府県別の気象情報を持つテーブル(weather)と、天気の画像データを持つテーブル(weather_img)で構成します。

データベース:weather
列名
タイプ名
長さ
NULL
列名
タイプ名
長さ
NULL
WDATE DATE 4 いいえ WTEXT CHARACTER 20 いいえ
WPREF CHARACTER 10 いいえ WIMAGE BLOB 5120 はい
WTEXT CHARACTER 20 はい
テーブル:weather テーブル:weather_img

データベース、テーブル、インデックスの作成

 では、上記の仕様を満たすデータベースを作成しましょう。まず、以下のようなDDLファイルを用意します。

CREATE DATABASE WEATHER;
create_db_weather.ddl

 このDDLファイルを使って、DB2のインスタンス・ユーザー(この連載ではdb2inst1)でデータベースを作成します。

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

 データベースを作成したら、次はテーブルです。以下のようなDDLファイルを用意します。

CONNECT TO weather;
CREATE TABLE weather_img (
        wtext   CHAR(20) NOT NULL,
        wimage  BLOB(5 K),
        PRIMARY KEY (wtext)
);
CREATE TABLE weather (
        wdate   DATE NOT NULL,
        wpref   CHAR(10) NOT NULL,
        wtext   CHAR(20),
        PRIMARY KEY (wdate, wpref)
);
CONNECT RESET;
create_tb_weather.ddl

 DB2コマンドを実行し、テーブルを作成します。

$ db2 -tvf create_tb_weather.ddl
CONNECT TO weather

      データベース接続情報

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


CREATE TABLE weather_img ( wtext        CHAR(20) NOT NULL, wimage       BLOB(5 K
), PRIMARY KEY (wtext) )
DB20000I  SQL コマンドが正常に終了しました。

CREATE TABLE weather ( wdate    DATE NOT NULL, wpref    CHAR(10) NOT NULL, wtext CHAR(20), PRIMARY KEY (wdate, wpref) )
DB20000I  SQL コマンドが正常に終了しました。

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

 以上で、データベースの中に2つのテーブルが作成されます。

データの挿入

 テーブルを用意したら、中に入れるデータを準備します。以下のような、日付別・都道府県別気象情報テーブル(weather)用のCSVファイルと、天気画像テーブル(weather_img)用のCSVおよび画像ファイルを用意します。

2003-02-25,東京都,曇り
2003-02-26,東京都,雪
2003-02-27,東京都,晴れ
2003-02-25,神奈川県,曇り
2003-02-26,神奈川県,雪
2003-02-27,神奈川県,晴れ
2003-02-25,千葉県,曇り
2003-02-26,千葉県,雪
2003-02-27,千葉県,晴れ
2003-02-25,埼玉県,曇り
2003-02-26,埼玉県,雪
2003-02-27,埼玉県,晴れ
2003-02-25,栃木県,曇り
2003-02-26,栃木県,雪
2003-02-27,栃木県,晴れ
2003-02-25,群馬県,曇り
2003-02-26,群馬県,雪
2003-02-27,群馬県,晴れ
2003-02-25,茨城県,曇り
2003-02-26,茨城県,雪
2003-02-27,茨城県,晴れ
weather.csv

晴れ,1.gif
曇り,2.gif
雨,3.gif
雪,4.gif
雷,5.gif
暴風雨,6.gif
晴れ時々曇り,7.gif
晴れのち曇り,8.gif
晴れ時々雨,9.gif
晴れのち雨,10.gif
weather_img.csv

 気象情報テーブル用データの日付は、データを取り出すときに「CURRENT DATE」で今日の日付を、「date(days(CURRENT DATE) + 1)」で明日の日付のデータを取り出すので、適宜変更してください。また、都道府県と天候についても好みに応じて変更してください。

 天気画像については、インターネットでフリーの画像ファイルを探してみるといいでしょう。今回は、IILdotJP(http://www.iil.jp/)の天気アイコンを利用させていただきました。また、weather_img.csv中の画像ファイル名は適宜修正してください。

 画像ファイルを扱う際のポイントは、weather_imgテーブルのBLOB型()のサイズを画像のファイルサイズ以上にすることです。

注:BLOB型については
http://www.db2.jp/db2manual/ja_JP/index.htm?openup=admin/r0008472.htm
を参照ください。

 データをインポートするために以下のDDLファイルを用意します。

CONNECT TO weather;
IMPORT FROM weather.csv OF DEL
MESSAGES message.log REPLACE INTO weather;
CONNECT RESET;
import_weather.ddl

CONNECT TO weather;
IMPORT FROM weather_img.csv OF DEL
LOBS FROM /home/db2inst1/kylix/atmark/db2/images/
MODIFIED BY LOBSINFILE
MESSAGES message.log REPLACE INTO weather_img;
CONNECT RESET;
import_img.ddl

 画像ファイルのPATH(下線部分)は環境に合わせて修正してください。ディレクトリを指定する際、最後に「/」がないとエラーになるので気を付けましょう。また、画像ファイルがないか、PATHが間違っていても正常に終了したように見えるので注意する必要があります。

 では、weatherテーブルへデータをインポートします。

$ db2 -tvf import_weather.ddl
CONNECT TO weather

      データベース接続情報

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


IMPORT FROM weather.csv OF DEL MESSAGES message.log REPLACE INTO
 weather

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


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

 次に、weather_imgテーブルへデータをインポートします。

$ db2 -tvf import_img.ddl
CONNECT TO weather

      データベース接続情報

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


IMPORT FROM weather_img.csv OF DEL LOBS FROM /home/db2inst1/kylix/
atmark/db2/images/ MODIFIED BY LOBSINFILE MESSAGES message.log 
REPLACE INTO weather_img

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


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

 うまくインポートできたでしょうか? 確認のため、簡単なSQLを用意してデータをチェックしてみましょう。以下のtest.sqlファイルを作成して、db2コマンドを実行します。

connect to weather;
select * from weather, weather_img
        where weather.wtext = weather_img.wtext;
connect reset;
test.sql

$ db2 -tvf test.sql
(中略)
  21 レコードが選択されました。

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

 BLOB型の画像データも含めて、以下のように見えれば成功です。

2003-02-25 群馬県     曇り                 曇り                 x'4 749
4638396128002800F700000000006B6B6B7373737B7B7B8484848C8C8C9494949C9C9
CA5A5A5ADADADB5B5B5BD

1/2

Index
Kylix 3とDB2で作るWebサービス・アプリケーション
 第4回 Webサービス・プロバイダを作ろう(前編)
Page 1
データベースの準備
 データベース、テーブル、インデックスの作成
 データの挿入
  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 記事ランキング

本日 月間