Web サービスとは、ネットワーク上で記述、公開、検索、呼び出しが可能な自己完結型のモジュール式アプリケーションのことです。Web サービスは、リクエストとレスポンスという単純な機能からビジネス・プロセス全体の相互作用に至るまで、カプセル化されたさまざまなビジネス機能を実行します。
Web サービスは新しいアプリケーションとして作成することも、既存のビジネス機能をラップしてサービス指向アーキテクチャー (SOA) に基づくサービスとして作成することもできます。Web サービスが別の Web サービスを利用して目的を実現することも可能です。
図 1: サービス
TXSeries for Multiplatforms は、複数言語アプリケーションのための分散 CICS (Customer Information Control System) OLTP (Online Transaction Processing) 環境です。分散ソリューションと企業システムとの間でのデータとアプリケーションの統合や、COBOL、C、C++、および PL/I で作成された CICS アプリケーションのデプロイメントに広範に使用されています。
TXSeries for Multiplatforms 7.1 サポート・パッケージ CN01 は、インバウンド SOAP リクエストをサポートします。このサポートにより、既存のプログラムをサービスとして公開することが可能になります。また、公開された既存のプログラムをサービスとしてデプロイすることで、あらゆる SOAP Web サービス・リクエスターが HTTP を介してこれらのサーバー・プログラムにアクセスできるようになります。
TXSeries における Web サービスのアーキテクチャー
図 2. Web サービスとして公開された CICS
TXSeries では上記のアーキテクチャーを使用して、CICS サーバー・プログラムを Web サービスとして公開します。
LWI (Light-Weight Infrastructure)
LWI は、最小限のフットプリントという要求に応えるインフラストラクチャーです。しかも構成するのが簡単で、セキュアに Web アプリケーションおよび Web サービスをホストします。LWI は TXSeries Web サービスの Web リクエスト・ゲートウェイとして機能します。
サーブレット・エンジンは SOAP クライアントからの SOAP リクエストを受信し、URIMapping モジュール、変換モジュール、およびコネクター・モジュールを利用して CICS プログラムからのレスポンスを取得します。そして SOAP クライアントに SOAP レスポンスまたは SOAPFault を返します。
URIMapping モジュールは SOAP クライアントが要求した URI を基に CICS プログラムおよびその接続先とする領域を検出し、これらの詳細をサーブレット・エンジンに提供します。
これはサーブレット・エンジンのサポート・モジュールで、受信した SOAP 本文から COMMAREA バイト・バッファーへの変換、またはその逆の変換を行います。
このモジュールは実際に TXSeries に接続し、COMMAREA バイト・バッファーを使用して CICS プログラムを呼び出します。COMMAREA が返されると、それをサーブレット・エンジンに渡します。
DFHLS2WS ツールは、コマンドラインまたは Java API のいずれかを使用して WSDL および WSBind 成果物を生成するための手段です。
TXSeries は WSBind ファイルの情報を使用して、実行時にアプリケーション・データ構造体と SOAP メッセージとの間のマッピングを行います。
このセクションでは、単純な従業員プログラムを例に、TXSeries でセットアップした Web サービスを構成し、デプロイしてテストする方法を説明します。また、このサンプル・プログラムの中で説明を要する重要なコマンドについても説明します。
Web サービスを構成およびテストするには、この記事に付属のサンプルを利用することができます。サンプルには、セットアップ・スクリプト (Unix ライクなプラットフォームおよび Windows プラットフォーム対応)、employee.ccs サーバー・プログラム (COMMAREA を受信)、および employee.h (ヘッダー・ファイル) の各ファイルがあり、いずれも zip 形式で提供されています。
セットアップ・スクリプトは、SFS サーバーでサンプル・レコードを生成し、必要な構成を行います。構成ファイルの中で、この必要な構成を行う部分は以下のとおりです。
リスト 1. セットアップ・スクリプト
cicssdt -s /.:/cics/sfs/sample -c create Employee sfs_Ssample B empId signedInt32 empName string 50 empSalary double " " "10 " empId Y empId a " " 1 quit cicssdt -s /.:/cics/sfs/sample -c w Employee 100 Srinivas 7000 "N" quit cicsadd -c fd -r sample -P Employee IndexName=empId |
cicssdt コマンドは Employee という名前のテーブルを作成し、empId、empName、empSalary という 3 つのフィールドを定義します。
2 番目の cicssdt コマンドが Employee テーブルにデータを入力した後、cicsadd コマンドがファイル定義のエントリーを追加します。
リスト 2. サンプル employee.ccs
EXEC CICS READ FILE("EMPL")
INTO(ca)
RIDFLD(&ca->empId)
KEYLENGTH(4)
RESP(resp);
|
上記のコードは、COMMAREA から受け取った従業員 ID を使用して従業員の詳細を SFS から読み込み、その詳細をレスポンス COMMAREA の中に入れます。
以下のフロー図に、それぞれのコンポーネントがどこに位置するのかを示します。
図 3. コンポーネントの位置
何よりもまず必要なのは、Web サービスとして公開可能な CICS プログラムを特定することです。
このサーバー・プログラムのプログラム定義を CICS 領域に定義します。つまり、PD (Program Definition) エントリーを TXSeries サーバーに追加します。そのためのコマンドは、以下のとおりです。
Cicsadd –c pd –r <region name> <PD entry name> Pathname=<Path where the program is kept> |
IPIC リスナー定義を CICS 領域に定義します。
Cicsadd –c ld –r <region name> <LD entry name> Protocol=IPIC TCPAddress="<machine IP or hostname> |
/etc/services に、このサービス用のポートのエントリーを作成し、サービス名およびポート番号を指定します。サービス・ファイルは C:\WINDOWS\system32\drivers\etc に置かれています。ファイル名は services です。
CICS 領域を起動し、コンソールのログを見て、エラーが発生していないことを確認します。
コンソール・ファイルは /var/cics_regions/<region_name>/console.000000n (n は最新コンソール・ファイルの番号) という形で存在しており、このファイルでエラーの確認をすることができます。
DFHLS2WS ツールのコマンドラインまたは Java API を使用して成果物 (WSDL および WSBind) を生成します。TXSeries アプリケーションを Web サービスとしてデプロイする際の前提条件として、アプリケーションは 8 バイト境界でコンパイルしてください。
DFHLS2WS ツールによって、CICS アプリケーションをサービス・プロバイダーとしてデプロイする作業が単純化されます。DFHLS2WS ツールを使用するときには、最初に言語データ構造体から取り掛かり、それから DFHLS2WS ツールを使って Web サービス成果物を生成する必要があります。
DFHLS2WS ツールは、必要な成果物を容易に生成できるようにするための jar ファイル一式です。その機能を使用するには、システムのクラス・パスに以下の jar ファイルが存在していなければなりません。
- common.jar
- common.resources.jar
- ecore.change.jar
- ecore.jar
- ecore.xmi.jar
- NamespaceContext.jar
- woden.jar
- wsdl4j.jar
- XmlSchema.jar
- xsd.jar
- xsd.resources.jar
- cwsa.jar
DFHLS2WS ツールは、以下のいずれかの手段で使用することができます。
- コマンドライン・モードを使用
- Java API モードを使用
どちらのモードを使用しても、以下の成果物が生成されます。
- employee.wsdl
- employee.wsbind
- employee.log
上記の 3 つの成果物のうち、サーバー・プログラムを Web サービスとして公開するために必要なのは WSDL ファイルとバインド・ファイルです。この 2 つのファイルは、LWI 内に構成する必要があります。
WSDL ファイルは SOAP over HTTP クライアント・アプリケーションによって使用されます。バインド・ファイルは、TXSeries の LWI が内部でデータを操作するために使用します。
- Windows システムでは、DFHLS2WS.bat inputParams コマンドを実行します。
- Unix システムでは、DFHLS2WS.sh inputParams コマンドを実行します。
ここで、inputParams はパラメーターが含まれている入力ファイルです。
以下のサンプル・プログラムに、Java API の使い方が示されています。
import com.ibm.cics.gen.api.Factory;
import com.ibm.cics.gen.api.IAssistantParameters;
import com.ibm.cics.gen.api.ICICSWebServicesAssistant;
import com.ibm.cics.gen.api.IAssistantResponse;
public class Test {
public static void main(String[] args) throws Exception {
String structDir = "C:\\test\\CStructures";
String structSource = "cstruct.h";
String bindFileName =
"C:\\test\\CStructures\\employee.wsbind";
String logFileName =
"C:\\test\\CStructures\\employee.log";
String wsdlFileName =
"C:\\test\\CStructures\\employee.wsdl";
IAssistantParameters params =
Factory.createAssistantParameters();
params.setParamURI
("http://localhost:8080/txws/myregion/employee");
params.setParamLANG(IAssistantParameters.LANG_C);
params.setParamPDSLIB(structDir);
params.setParamPGMINT
(IAssistantParameters.PGMINT_COMMAREA);
params.setParamPGMNAME("EMPLOYEE");
params.setParamMAPPING_LEVEL
(IAssistantParameters.MAPPING_LEVEL_2);
params.setParamREQMEM(structSource);
params.setParamRESPMEM(structSource);
params.setParamSTRUCTURE("(message, message)");
params.setParamWSBIND(bindFileName);
params.setParamWSDL(wsdlFileName);
params.setParamLOGFILE(logFileName);
ICICSWebServicesAssistant cwsa =
Factory.createCICSWebServicesAssistant();
IAssistantResponse ar = cwsa.DFHLS2WS(params);
System.out.println(
"DFHLS2WS:AssistantResponse.getReturnCode():" +
ar.getReturnCode());
System.out.println("AssistantResponse.getMessages()");
String[] msgs = ar.getAllMessages();
for (int i = 0; i < msgs.length; i++)
{
System.out.println(msgs[i]);
}
}
}
|
<TXInstall-Dir>/wui/ws_conf ディレクトリー内の TXWSMapping.xml ファイルには、プログラムごとの <uri-map> エントリーが必要です。そのためにはまず、WSDL ファイルと WSBind ファイルを手動で TXSeries の <TXInstall-Dir>/wui/ws_conf/<region-name>/ <program-name> ディレクトリーにコピーしなければなりません。
プログラムを Web サービスとして公開するには、生成された成果物を、TXSeries がインストールされたシステムの LWI に構成する必要があります。
DFHLS2WSで生成する成果物の URI には http://localhost:8082/txws/myregion/myprog を指定したので、<TXSeries install dir>/wui/ws_conf の下に以下のディレクトリーを作成します。
myregion/employee
(例: /wui/ws_conf/myregion/employee)
注: txws ディレクトリーは、TXSeries Web サービスのコンテキスト・ルートとして機能します。そのため、すべての URI はホスト名とポート番号に txws が続いていなければなりません。
上記で作成したディレクトリーに、以下の成果物をコピーします。
- employee.wsdl
- employee.wsbind
成果物をコピーしたら、次はこれらの成果物に対応するエントリーを TXWSMapping.xml に作成します。<TXSeries install dir>/wui/ws_conf ディレクトリーに、TXWSMappingSample.xml という名前のサンプル・ファイルがあり、このファイルの中に、エントリーの例がコメントアウトされて含まれています。このサンプル・ファイル <TXSeries install dir>/wui/ws_conf/TXWSMappingSample.xml をコピーして、<TXSeries install dir>/wui/ws_conf/TXWSMapping.xml に貼り付けてください。
サンプル・ファイル TXWSMappingSample.xml をコピーして、名前を TXWSMapping.xml に変更します。そして、<maps> 要素の中に <uri-map> エントリーを作成します。
<maps xmlns="http://www.ibm.com/TXSeries/TXWSMappingSchema">
<uri-maps>
<map-name>/txws/myregion/myprog</map-name>
<description> Optional description goes here </description>
<program-name> myprog</program-name>
<region-name> myregion</region-name>
<wsbind>myprog.wsbind</wsbind>
<wsdl>myprog.wsdl</wsdl>
<ipic-port>55555</ipic-por>
</uri-map>
</maps>
|
注:
- 新しいエントリーを TXWSMapping.xml に追加する場合は、<maps> タグの下に新しい <uri-map> セクションを作成してください。
- 名前空間 URI の http://www.ibm.com/TXSeries/TXWSMappingSchema は必須です。
- SOAP over HTTP を使用するクライアントは、通常の Web サービスとして CICS プログラムにアクセスすることができます。
- サーバー・プログラムのデプロイメントが正常に完了したら、ブラウザーを開き、クエリー・ストリング wsdl を指定して URL を入力すると (http://localhost:80/txws/myregion/employee?wsdl)、構成された WSDL を確認することができます。
以上の設定がすべて完了すると、クライアントを起動して、この Web サービスを呼び出せるようになります。
構成が完了した後に WSDL を表示するには、URL http://<servername>:<LWI-http-port>/<map-name>?wsdl を使用します (例: http://localhost:8082/txws/myregion/AGE?wsdl)。
Rational Developer for System z (RDz) 7.6 を使用して成果物を生成する方法
このセクションでは、RDz を使用して成果物を生成する手順を説明します。
- まず、Web サービス・プロジェクトを作成するところから始めます。RDZ 7.6 のウィザードで、「File (ファイル)」 > 「New (新規)」 > 「Project (プロジェクト)」の順に選択します。すると、「New project (新規プロジェクト)」ウィンドウが開くので、「Web Services Project (Web サービス・プロジェクト)」を選択します。
図 4. CICS 対応 Web サービス・プロジェクトの新規作成
「Next (次へ)」を選択し、次の画面でプロジェクト名を入力します。入力し終わったら、「Finish (完了)」を選択することで、新規プロジェクトが作成されます。
図 5. プロジェクト名の指定
TXSeries がサポートするのは、ボトムアップ方式の開発シナリオのみです。アプリケーション・モードにはサービス・プロバイダーを、変換タイプには解釈 XML 変換モードを指定します。
図 6. ソース・ファイルのインポート
次のステップでは、サンプルのソース・ファイルをインポートします。インポートが完了したら、「Finish (完了)」をクリックして初期セットアップを完了します。
- プロジェクトの作成が完了すると、ウィザードの左端のペインにはそのプロジェクトの名前が表示されているはずです。プロジェクト名を右クリックし、「Generate Web Services for CICS resources (CICS 対応 Web サービスのリソースを生成)」をクリックします。
図 7. 言語構造体
すると、上記のようなウィンドウがポップアップ表示されます。このウィンドウの「Request language Structure (要求言語構造体)」タブと「Response language Structure (応答言語構造体)」タブの両方で、「All-Type (全タイプ)」チェック・ボックスを選択します。このウィンドウにある「(Change COBOL Preferences (COBOL 設定の変更)」ボタンをクリックすると、「Code Page Selection (コード・ページの選択)」などの COBOL の設定を変更することができます。COBOL の設定で、IEEE 浮動小数点のみをサポートするように設定されていることを確認してください。以下に、COBOL の設定が表示された画面のスクリーン・ショットを示します。「Apply (適用)」ボタン、次に「OK」ボタンをクリックして、「Language Structures (言語構造体)」ウィンドウに戻ります。
図 8. COBOL の設定
上記のウィンドウでの作業が完了したら、「Next (次へ)」を選択します。
図 9. アプリケーションおよびサービスのプロパティー
このウィンドウでは、プログラム名を変更することができます。「Program interface (プログラム・インターフェース)」は、TXseries では COMMAREA しかサポートされません。「Service properties (サービス・プロパティー)」タブには名前空間のプロパティーが表示されます。このウィンドウの「Change WSBind Preferences (WSBind 設定を変更)」をクリックして、マッピング・レベルが 2.0 に設定されていることを確認してください。「DFSLS2WS」タブには、SOAP バージョンや WSDL バージョンなどの重要なプロパティーが示されます。これらのバージョンはデフォルトで 1.1 に設定されているはずです。
図 10. Web サービス・アシスタント (WSBind)
「Next (次へ)」を選択し、「DFHLS2WS:Application and Service Properties (DFHLS2WS: アプリケーションおよびサービス・プロパティー)」ウィンドウに進みます。
図 11. ターゲット成果物
このウィンドウでは WSDL ファイル、WSBind ファイル、およびログ・ファイルの名前をそれぞれ指定します。次に「Next (次へ)」、「Finish (完了)」の順にクリックして、成果物の生成手順を完了します。ウィザードの左端のペインに表示されたプロジェクト名を展開すると、作成された成果物を確認することができます。
図 12. 成果物の確認
生成された成果物を Web サービスとして使用できるようにするには、ステップ 3 の「生成された成果物を LWI 内に構成する」で説明した手順に従ってください。
TXSeries for Multiplatforms のインバウンド SOAP のサポートにより、分散プラットフォームで実行されている CICS プログラムを容易に Web サービスとして公開することができます。この Web サービスへの移行は、サポート・ツールによって簡単かつシームレスに行うことができます。
このような機能を備えた TXSeries は、あらゆる SOA ベースのソリューションに不可欠の部分となるはずです。
| 内容 | ファイル名 | サイズ | ダウンロード形式 |
|---|---|---|---|
| ccs CICS C program | employee.ccs | 10KB | HTTP |
| h Header File for Data Structures | employee.h | 10KB | HTTP |
| sh Configuration Shell Script | employee.sh | 10KB | HTTP |
学ぶために
- developerWorks の SOA and Web エリアにアクセスして、スキル上達には欠かせないリソースを入手してください。
- Technology bookstore で、この記事で取り上げた技術やその他の技術に関する本を探してください。
製品や技術を入手するために
- IBM 製品の評価版をダウンロードするか、あるいは IBM SOA Sandbox のオンライン試用版で、DB2®、Lotus®、Rational®、Tivoli®、および WebSphere® などが提供するアプリケーション開発ツールやミドルウェア製品を試してみてください。
議論するために
- developerWorks blogs から developerWorks コミュニティーに加わってください。
Shubhendu Banerjee はこの数年間、TXSeries に取り組んでいます。それ以前は、CTG チームのメンバーでした。彼はミドルウェア FVT スペシャリストで、アジャイルの熱心な支持者です。インド内外のさまざまなフォーラムに参加している彼は、カンファレンスに参加した経験が豊富にあります。