レベル: 初級 Srinivasan R. Mottupalli, Senior Software Engineer, IBM Gagan Maheshwari, Technical Lead, IBM Vishwas Mahadevaiah, Software Engineer, IBM
2009年 02月 12日 IBM® Informix® の 4GL 関数を Web サービスとしてデプロイする方法を学びましょう。この記事では、w4gl と呼ばれるユーザー・インターフェース (UI) ツールと、(w4gl が使用する) w4glc と呼ばれるバックエンド・ツールの概要を説明します。
Informix 4GL
Informix 4GL (略して I4GL) は、Informix データベース・サーバーを操作するためのプログラミング言語をサポートしています。I4GL にはフォームやレポートを作成するための言語を備えたリッチな環境が用意されており、この環境を利用することでリレーショナル・データベース・アプリケーションの開発を容易に行うことができます。I4GL がサポートするコンパイラーは、4GL アプリケーションを C 言語に変換することも、マシンに依存しない p-code に変換することもできます (p-code は P-Code Runner を使うことで実行することができます)。4GL についての詳細は 4GL Reference Manual を参照してください。
Web サービスと SOA (Service-Oriented Architecture)
SOA はシステムの開発および統合の手段を提供するアーキテクチャー・スタイルであり、SOA を利用することによって、さまざまなアプリケーションが相互にデータを交換することができます。SOA は、サービスをオペレーティング・システムや、サービスの作成に使用したプログラミング言語、ベースとなるアプリケーションに付随するその他の技術と疎結合することを目標としています。Web サービスは商用に使うことが可能な関数の集合であり、どんなプラットフォームやプログラミング言語からでもアクセスすることができます。これらの関数の集合は一連の入力を受け取って、特定のタスクを行い、一連の出力を返します。例えば、さまざまなサード・パーティーによってクレジットカードの認証サービスが提供されている場合、そうした Web サービスを使うごとに何らかのコストが発生し、利用者がそのコストを負担します。SOA を利用すると、企業はビジネス・プロセスをサプライヤーやベンダー、その他のビジネス・パートナーに容易に関連付けられるようになります。
SOA 環境での I4GL
I4GLのリッチな言語サポートを利用すると、SQL 文を埋め込んでデータベース・オブジェクトにアクセスするようなユーザー・インターフェースやビジネス・ロジックを容易に実装することができます。多くの Informix ユーザーは I4GL をフロントエンド・ツールとして使ってデータベース・アプリケーションを作成しています。これらのアプリケーションには対話性の側面とビジネス・ロジックの両方が含まれています。このようなビジネス・ロジックは他の多くのアプリケーションで共通に利用することができます。SOA を利用して I4GL の設計を補完することで、I4GL の関数を Web サービスとしてデプロイすることができます。
図 1 は I4GL-SOA のアーキテクチャーの概要を示しています。
図 1. I4GL-SOA のアーキテクチャーの概要
I4GL は、4GL アプリケーションを C プログラムに変換できるように設計されています (その C プログラムを他の C プログラムにリンクすることができます)。同様に、どんな C アプリケーションからでも API を利用して I4GL 関数を呼び出すことができます。このように I4GL には柔軟性があるため、Apache の AXIS2 C Web サービス API を利用することで、Web サービスをデプロイしたり、利用したりすることもできます。
4GL 関数を Web サービスとして利用またはデプロイするために、I4GL には w4gl と呼ばれる対話型のツールが用意されており、このツールを使って必要な入力をユーザーから収集してデータベースに記録することができます。そして w4gl は必要な情報を w4glc と呼ばれる非対話型のツールに渡します (w4glc は要求された操作を実行する Perl スクリプトです)。w4glc ツールは W4GL が収集した情報を保存するためのデータベースを管理しているため、必要に応じてサービスを再生成してデプロイメントしたり、利用したりすることもできます。
サービス・プロバイダーとしての I4GL
Web サービスとしてデプロイする 4GL 関数が指定されると、W4GL は必要なスケルトンやヘッダー、ラッパー・ファイルを自動生成します。Web サービスの仕様は構成ファイルを使って指定します。
4GL-SOA のアーキテクチャー
図 2 は SOA 環境での 4GL のアーキテクチャーを示しています。ユーザー・インターフェース w4gl の役割は、ユーザーから Web サービスの定義を受け付け、構成ファイルを生成することです。バックエンドの Perl スクリプト w4glc はこの構成ファイルを参照し、構成ファイルの指示に従ってコードを生成し、Web サービスをデプロイまたは利用するための環境を提供します。
図 2. 4GL SOA のアーキテクチャー
前提条件
- Informix 4GL 7.50.xC2 (現在は Linux® プラットフォームのみでサポートされています。この制約は主に、他のプラットフォームでは AXIS2C を利用できないことによるものです)。
- JRE 1.4.2 以降
- AXIS2C 1.5 (4GL 7.50.xC2 以降にバンドルされています)
- Perl ツール
- IDS 9 以降 (XPS でもサポートできるはずです)
プログラム・デザイン・データベース
プログラム・デザイン・データベースは I4GL では新しいものではありません。このデータベースには、I4GL ツールが使用する特別なテーブルがいくつか含まれています。
このデータベースは W4GL ツールでも使われ、W4GL の特別なテーブルが保存されます。これらのテーブルには Web サービスとその定義に関する w4gl からのユーザー入力が保存されており、これらのデータを使って Web サービスが生成されます。
プログラム・デザイン・データベースの名前はデフォルトで syspgm4gl ですが、必要なデータベース名を PROGRAM_DESIGN_DBS という環境変数を使って指定することもできます。この環境変数によって指定される名前の方がデフォルトよりも優先されます。このデータベースの設計を以下に示します。
例えば、
export PROGRAM_DESIGN_DBS=mydb |
図 3. プログラム・デザイン・データベース
構成ファイル
構成ファイルには、ある特定の Web サービスの仕様が含まれています。w4glc ツールはこの構成ファイルを利用してコードを生成し、また要求されたタスク (デプロイメントやパッケージ化など) を実行します。
この構成ファイルは W4GL ツール (拡張子は .4cf) によって生成され、プログラム・デザイン・データベースを読み取ることによって構成ファイルのパラメーターにデータが追加されます (構成ファイルの例をリスト 1 に示します)。
構成ファイルが生成される前に、構成ファイルのすべてのパラメーターの値は W4GL ツールを通じて入力されます。デプロイメントが要求されると、この構成ファイルが Perl スクリプト (w4glc) に渡され、指定された 4GL 関数が Web サービスとしてデプロイされます。
これらのデータはプログラム・デザイン・データベースの中に永続化されるため、いつでも構成ファイルを再生成することができ、また必要に応じて再デプロイすることができます。これは Web サーバーの保守を行う際に特に便利です。
リスト 1 は W4GL によって作成された構成ファイルの例を示しています。
リスト 1. 構成ファイル
[SERVICE]
TYPE=publisher
INFORMIXDIR=/tools_4xpm/sqldist
DATABASE=i4glsoa
CLIENT_LOCALE=en_us.utf8
DB_LOCALE=en_us.utf8
I4GLVERSION=7.50.xC2
WSHOME=/work/axisdist
WSVERSION=AXIS2C
TMPDIR= /tmp/w4gl
PORTNO= 9090
INFORMIXSERVER = ids_11.50
INFORMIXSQLHOSTS = /work/env/sqlhosts
SERVICENAME= ws_visa_valid
[FUNCTION]
NAME= validate_visa_card
INPUT= CHAR(16), CHAR(5), CHAR(3)
OUTPUT= CHAR(8)
[END-FUNCTION]
[DIRECTORY]
NAME= /work/4glApp
FILE= visaverify.4gl
[END-DIRECTORY]
[END-SERVICE]
|
では構成ファイルの中のパラメーターを見てみましょう。
[SERVICE] … [END-SERVICE]: このブロックには、1 つの関数を Web サービスとしてデプロイするためのすべてのパラメーターが含まれています。
TYPE: 動作タイプ (publisher または consumer) を決定します。
DATABASE: 4GL 関数が使った可能性のあるデータベースの名前
I4GLVERSION: 4GL のバージョン (監査用)
WSHOME: Web サービスのインストール・ディレクトリーのパス
WSVERSION: Web サーバーのバージョン (監査用)
TMPDIR: 生成される中間ファイルを保持するための一時作業ディレクトリー
PORTNO: axis サーバーがリッスンする対象となるポート番号
SERVICENAME: 公開されるサービスの名前
[FUNCTION] … [END-FUNCTION]: デプロイされる関数の詳細を含むブロック
NAME: 4GL 関数の名前
INPUT: この 4GL 関数の入力引数のデータ型 (関数の定義の中にあるとおり、左から右に 1 対 1 で対応している必要があり、また引数の数と一致している必要があります)
OUTPUT: この 4GL 関数から返される結果のデータ型 (関数の定義の中にあるとおり、左から右に 1 対 1 で対応している必要があり、また引数の数と一致している必要があります)
[DIRECTORY] … [END-DIRECTORY]: コンパイルが必要なファイルのリストと、(Web サービスをデプロイするためにバンドルが必要な) それらのファイルのオブジェクトとを含むブロック
NAME: ソース・ファイル (4gl、C、または ESQL/C ファイル) が置かれているディレクトリーの絶対パス
FILE: 上記のディレクトリーの下に存在するファイル (4gl、C、または ESQL/C ファイル) の名前
CLIENT_LOCALE: 4GL のロケール
DB_LOCALE: データベースのロケール
INFORMIXSERVER: Informix サーバーの名前
INFORMIXSQLHOSTS: Informix sqlhosts ファイルの絶対パス
Perl スクリプト
$INFORMIXDIR/bin ディレクトリーの中にある Perl スクリプト (w4glc) は W4GL ツールの背後にあるワーカーです。このスクリプトは非対話型のプログラムです。構成ファイルを独自に作成すれば、W4GL を使わずにこのスクリプトを使用することもできます。ただし、プログラム・デザイン・データベースへのデータの追加と構成ファイルの生成には W4GL ツールを使うことをお薦めします。W4GL ツールを使うことで、デプロイされた Web サービスが消失したり、あるいは Web サービスの移植が必要になったりした場合にも、同じ構成ファイルを再生成して再デプロイすることができるからです。
リスト 2. w4glc の構文
w4glc { [-help] [-version] | [-silent] [-force] [-check] [-generate]
[-compile] [-deploy] [-package] } <cfgfile> |
注: w4glc を実行する際のオプションは上記以外にもあるかと思いますが、この記事では説明を省略します。
silent - このオプションによってコンパイラーのメッセージがすべて非表示になります。
force - このオプションによって、既存のファイルまたはディレクトリーがある場合にそれらが強制的に再利用されます。
check - このオプションによって、提供される構成ファイルに対して基本的な sanity チェックが行われます。このチェックによって、ソース・ファイルやディレクトリーが存在すること、また環境が適切に設定されていることが確認されます。
generate - このオプションによって (デプロイしたり、利用したりするための) コードが生成されます。コードの生成は構成ファイル内で指定される TYPE に依存します。こうして生成されるコードは Web サービスを提供するのに必要なファイルです。
compile – このオプションによって、生成されたすべてのファイルがコンパイルされ、オブジェクト・ファイルが作成されます。またこのオプションによって、そのままデプロイできる共有オブジェクトも生成されます。
deploy – このオプションによって、オブジェクトやその他必要なファイルが Web サービスのディレクトリーにコピーされます。Web サーバーは起動時にこのディレクトリーを参照し、新たにデプロイされた Web サービスを認識します。
package – このオプションによって、後で本番用のマシンにデプロイするためのファイル群を開発マシン上で準備することができます。このファイル群は、新しいマシンにコピーできるように、圧縮された tar ファイル (gzip または bzip2)、または zip ファイルとしてパッケージ化されます。
W4GL ツール
W4GL ツールは Informix 4GL を使って作成されています。このツールを使うとプログラム・デザイン・データベースの中のデータを操作することができます。またこのツールには、Web サービスを別のマシンに移植できるようにパッケージ化するためのオプションも用意されています (ただし移植先のマシンの構成とプラットフォームは元のマシンと同じである必要があります)。Web サービスをパッケージ化して移植するという発想のベースとなっているのは、データはすべてデータベースの中にあるため、W4GL を使ってこのデータを利用することで、同じサービスをさまざまなプラットフォームに対して生成することができるというものです。
図 4. W4GL ツールのメニューの階層構成
Web サービスに関する情報を書き込む
対話型の W4GL ツールを使うと、Web サービスに関する情報をデータベースに書き込むことができます。また W4GL ツールには、構成ファイルを生成して Web サービスとしてデプロイするためのインターフェースも提供されています。Web サービスの情報を書き込む前に、Web サービスをデプロイする対象となるアプリケーション・サーバーのホスト名とそのアプリケーション・サーバーに関する情報を書き込んでおく必要があります。
ホスト名を書き込む
Web サービスをデプロイする対象となるアプリケーション・サーバーが稼働するホスト名を指定する必要があります (リスト 3)。ホスト名には DNS 名または IP アドレスを使います。また、Web サービスの中間ファイルが作成される一時ディレクトリーの絶対パスも指定します。エスケープ・キー (Esc) を押して変更をコミットすると、マシンの ID が自動的に生成されます。
リスト 3. ホスト名を書き込む
+------------------------------------------------------------------------------+
|HOST NAME: Query Next Previous Add Modify Remove Exit |
|See existing Host name details. |
|--------------------------------[ syspgm4gl ]-------------------[Help: CTRL-W]|
| |
| HOST INFORMATION |
| |
| Machine ID [ 3] |
| Host Name [service.server.test.com ] |
| Temporary Directory [/tmp/w4gl ] |
| [ ] |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| A new host name was added. |
+------------------------------------------------------------------------------+
|
アプリケーション・サーバーの情報を書き込む
アプリケーション・サーバーの詳細情報も書き込まなければなりません。詳細情報としては、アプリケーション・サーバーが稼働する環境についての情報と先ほど書き込んだホスト名を指定する必要があります。
Web サービスの情報を書き込む
リスト 4 は ws_visa_valid という新しい Web サービスを追加する様子を示しています。この画面では、Web サービスに関して必要な情報をすべて入力します (Web サービスとしてデプロイする必要のある 4GL 関数の名前、その関数の入力パラメーター、出力パラメーター、その 4GL 関数が依存するファイル群など)。こうした詳細をすべて指定した後、Exit オプションを選択すると、変更を保存するか破棄するかを促すメッセージが表示されます。
リスト 4. Web サービスを追加する
+------------------------------------------------------------------------------+
|ADD: Detail Input Output File Exit |
|Add the files associated with this web service. |
|--------------------------------[ syspgm4gl ]-------------------[Help: CTRL-W]|
| Service ID [ 2] |
| Service Name [ws_visa_valid ] |
| Function Name [validate_visa_card ] |
| Notes [ ] |
| [ ] |
| [ ] |
| [ ] |
| [ 3] Input parameters [ 1] Output parameters |
| [ 1][CHAR(16) ][ 1][CHAR(8) ] |
| [ 2][CHAR(5) ][ ][ ] |
| [ 3][CHAR(3) ][ ][ ] |
| [ ][ ][ ][ ] |
| [ ][ ][ ][ ] |
| [ ][ ][ ][ ] |
| [ ][ ][ ][ ] |
| [ ][ ][ ][ ] |
| |
| 1 output parameters added. |
+------------------------------------------------------------------------------+
|
この例では、3 つの入力パラメーターと 1 つの出力パラメーターを持つ ws_visa_valid という名前の Web サービスを追加しています。
構成ファイルを生成する
Web サービスの情報を追加したら、Web サービスをデプロイするための構成ファイルを生成する必要があります。そのための詳細情報はすべて、ポップアップ・ウィンドウをアクティブにすると取得することができます。
リスト 5. 構成ファイルを生成する
+------------------------------------------------------------------------------+
|INSTALL: Generate Deploy Package Exit |
|Generate the configuration file for a web service. |
|--------------------------------[ syspgm4gl ]-------------------[Help: CTRL-W]|
| |
| GENERATE CONFIGURATION |
| |
| Service ID [ 2] Machine ID [ 3] Server ID [ 0] Database ID [ 1] |
| |
| Service Name [ws_visa_valid ] |
| Host Name [service.server.test.com ] |
| Temp Directory [/tmp/w4gl ] |
| [ ] |
| App-Server Name [axis_server ] |
| Port Number [ 9090] |
| Database Name [i4glsoa ] |
| |
| |
| |
| |
| |
| Ctrl+B = List of Web services. Press Esc to Accept or Ctrl+C to Cancel. |
+------------------------------------------------------------------------------+
|
4GL 関数をデプロイする
Web サービスそのものの情報を含め、Web サービスを提供するための重要なすべての情報が設定され、構成ファイルが生成できると、deploy オプションを使って必要な Web サービスをデプロイすることができます。
先ほど生成した構成ファイルを使って Web サービスをデプロイします (リスト 6)。
リスト 6. Web サービスをデプロイする
+------------------------------------------------------------------------------+
|INSTALL: Generate Deploy Package Exit |
|Deploy the web service. |
+------------------------------------------------------------------------------+
| |
| CONFIGURATION TO DEPLOY |
| |
| File Name [ws_visa_valid_ service.server.test.com.4cf ] |
| |
| |
| |
| |
| |
| |
| |
| Configuration file ws_visa_valid_ service.server.test.com.4cf deployed |
| |
+------------------------------------------------------------------------------+
|
Web サービスをデプロイするごとに、その Web サービスを再起動する必要があります。再起動することによって、新たにデプロイされた Web サービスを他のアプリケーションから利用できるようになります。
デプロイされた 4GL 関数を Web サービスとして利用する
デプロイされた Web サービスは、他の言語 (Java™、C、PHP やその他の最近の言語) で作成された任意のアプリケーションから利用することができます。4GL 7.50.xC2 には C インターフェースを使って Web サービスを利用するための i4glsoademo というデモ・プログラムが付属しています。環境を設定したら、i4glsoademo プログラムを呼び出します。このプログラムは Web サービスとしてデプロイされた 4GL 関数に郵便番号を渡し、その郵便番号に対応する市と州を取得するものです。
Web サービスをパッケージ化する
package オプションを利用すると、別のホスト (オペレーティング・システムおよび構成が現在のホストと同じもの) にWeb サービスを移植することができます。このオプションは Web サービスの名前を引数に取り、その Web サービスを移植可能なファイルにパッケージ化します。
リスト 7. Web サービスをパッケージ化する
+------------------------------------------------------------------------------+
|INSTALL: Generate Deploy Package Exit |
|Package the web service. |
+------------------------------------------------------------------------------+
| |
| SERVICE NAME TO PACKAGE |
| |
| Service Name [ws_visa_valid ] |
| |
| |
| |
| |
| |
| |
| |
| The web service has been successfully packaged. |
| |
+------------------------------------------------------------------------------+
|
Web サービスとしてのストアード・プロシージャー
4GL 関数を Web サービスとして利用できることから、4GL 関数を使用してストアード・プロシージャーを Web サービスとして利用する可能性も開けてきます。リスト 8 はその一例を示しています。
リスト 8. ストアード・プロシージャー
CREATE FUNCTION LOG10(val INTEGER)
DEFINE retval DECIMAL(16,10);
CALL SPL_LOGN(val, 10) RETURNING retval;
RETURN retval;
END FUNCTION
|
制限
- 現在は Linux プラットフォーム以外では利用できませんが、他のプラットフォームでも利用できるようになる予定です。
- 4GL でサポートされている複合データ型は、まだサービスとしてデプロイすることはできません。例えば RECORD や BLOB など。
まとめ
既存の 4GL 関数を Web サービスとして利用できるようになると、最近のどのプログラミング言語からでもそれらの関数を利用できるため、さまざまな可能性が開けてきます。Informix 4GL を利用している既存のユーザーは、引き続き 4GL を使ってコーディングを容易に行うことができる一方、彼らの Web アプリケーションで使われているどのプログラミング言語からでも 4GL 関数を利用して、Web サービスにアクセスできるようになります。4GL コードの中から Web サービスを利用するという方法は、他の言語でコーディングされた既存の Web サービスを活用するための、もう 1 つの方法と言うことができます。
参考文献 学ぶために
製品や技術を入手するために
- developerWorks から直接ダウンロードできる IBM ソフトウェアの試用版を利用して皆さんの次期開発プロジェクトを構築してください。
議論するために
著者について  | 
|  | Srinivasan R. Mottupalli はバンガロールにある IBM の ISL のシニア・ソフトウェア・エンジニアです。彼は設計開発のエンジニアとして、IDS、XPS (Extended Parallel Server)、I4GL (Informix 4GL) などに従事してきました。 |
 | 
|  | Gagan Maheshwari は IBM の技術リーダーの 1 人です。彼は設計開発のエンジニアとして IDS と I4GL (Informix 4GL) に従事してきました。 |
 | 
|  | Vishwas T Mahadevaiah は IBM の IDS チームで 1 年半ソフトウェア・エンジニアとして業務を行ってきました。彼は Informix 4GL に対する UTF8 の実装と SOA のサポートに従事した経験があります。また DRDA 関連のリリースに従事した経験もあります。 |
記事の評価
|