IBM i プログラムに Web サービスとしてアクセスする: 概要

EGL では、EGL 外部型を使用する方法により、IBM® i の呼び出し先プログラムまたはサービス・プログラムのロジックを公開できます。 EGL 生成プログラムは、この外部型を使用して、サービス要求元として機能するアプリケーションが rpgle、cbl、cblle、sqlrpgle、sqlcbl、および sqlcblle のいずれの種類の IBM i プログラムにもアクセスできるように、SOAP Web サービスまたは EGL REST Web サービスを作成します。
IBM i プログラムにアクセスする手順は、次のとおりです。
  1. 外部型 (HostProgram 型) を作成します。
  2. EGL デプロイメント記述子エディターの「サービス・デプロイメント」セクションで、 この外部型を選択し、その他の適切な情報を入力します。
  3. 結果として作成される Web サービスを、Java™ EE に準拠するアプリケーション・サーバーにデプロイします。
  4. リクエスターで、IBM i コードにアクセスするための call ステートメントをコーディングします。
詳しい手順については、『IBM i プログラムに Web サービスとしてアクセス: キー・ストロークの詳細』を参照してください。
サービス呼び出しの際に使用されるレコードの基礎になるレコード・パーツの設計は 、難しい作業です。ただし、Rational® Developer for Power Systems Software™: RPG and COBOL Development Tools for IBM i を使用できます。 この場合、ウィザードを使用して次の 2 つのプロジェクトの内容を作成します。
一部の IBM i (非 EGL) ホスト・プログラムは、ステートフルです。

HTTP セッション詳細はサービス・アクセス変数で保持されます。 リクエスターのセッションの存続期間は、変数が宣言されている場所によって異なります。例えば、関数呼び出しで 変数が宣言されている場合、リクエスターのセッションは、 その関数がスコープ内にある間存続します。変数がライブラリーで宣言されている 場合は、リクエスターのセッションは、そのライブラリーがスコープ内にある間 保持されます。EGL ステートフル REST サービスにアクセスする場合は、変数がスコープから 外れるのが早すぎることがないように変数を宣言してください。

例: IBM i プログラムへのアクセスを提供する外部型

IBM i プログラムへのアクセスを提供する外部型の例を以下に示します。
ExternalType GETREC type HostProgram {platformData=[@i5OSProgram{ programName="GETREC", 
                         programType=NATIVE, isServiceProgram=false, libraryName="*LIBL"}]}
   function GETREC(CUST CUSTa10, EOF char(1), COUNT decimal(2,0)){ hostName="GETREC"};
end
platformData プロパティーは配列を受け入れます。 この例では、配列は、@i5OSProgram 複合プロパティー用の単一のエントリーを持ちます。 @i5OSProgram のプロパティー・フィールドは次のとおりです。
programName
IBM i 上のプログラムの名前。デフォルトは外部型の名前です。
programType
「EGL」 (EGL で記述されているプログラムの場合) または「ネイティブ」 (COBOL または RPG で記述されているプログラムの場合) のいずれか。デフォルトは「ネイティブ」です。
isServiceProgram
プログラムが IBM i サービス・プログラムかどうかを示す Boolean 値。デフォルトは false です。
libraryName
IBM i ライブラリー。デフォルトは *LIBL です。

hostName プロパティーは、関数プロトタイプで使用可能で、プログラム関数の名前を識別します。デフォルトは関数プロトタイプの名前です。

IBM i および EGL レコード・フィールドのデータ型

ワークベンチでは、IBM i のデータ型を、ホスト・ソースから Program Call Markup Language (PCML) 定義に変換します。次に、ワークベンチはこの定義を使用して、 外部型およびレコードを作成します。

PCML ファイルが保持される理由は 2 つあります。 第 1 に、以降のウィザードの実行で入力として使用するために このファイルを更新できます。例えば、複数のプログラムのエントリー・ポイントに対応 する PCML 定義をまとめることができます。 この定義を入力ファイルとして使用すると、ウィザードによって作成される外部型 では、すべてのエントリー・ポイントを反映できます。第 2 に、IBM 技術サポートの 担当者は、保持された PCML ファイルを、必要に応じてデバッグ・ツールとして 使用できます。

次の表に、IBM i 構造化レコードと EGL 構造化レコードの対応するデータ型をリストします。

表 1. IBM i 構造化レコードと EGL 構造化レコードの対応するデータ型
IBM i 規則 EGL 外部型の EGL データ型
char charType = 1 バイト CHAR (PCML の長さ)
charType = 2 バイト UNICODE (PCML の長さ)
int 2 バイト (符号付き) 精度 != 16、長さ = 2 SMALLINT
2 バイト (符号なし) 精度 = 16、長さ = 2 INT
4 バイト (符号付き) 精度 != 32、長さ = 4 BIGINT
4 バイト (符号なし) 精度 = 32、長さ = 4 BIGINT
8 バイト (符号付き) 長さ = 8 BIGINT
packed     DECIMAL (PCML の長さ、PCML の精度)
zone     NUM (PCML の長さ、PCML の精度)
float   長さ = 4 SMALLFLOAT
  長さ = 8 FLOAT
byte     HEX (PCML の長さ * 2)

EGL ではサポートされず、PCML によって変換されることもない IBM i のデータ型に対応する、ワークベンチにより作成された EGL レコードのフィールドを更新する必要がある場合があります。PCML の詳細は、IBM WebSphere Development Studio Client for iSeries® のオンライン・インフォメーション・センターにあります (http://publib.boulder.ibm.com/infocenter/iadthelp/v7r0/topic/com.ibm.etools.iseries.webtools.doc/topics/rdtcattr.html)。

一部のホスト構造には、対応する EGL タイプがありません。次に COBOL の例を 示します。
01 P1 PIC 9(5) USAGE BINARY.
01 P2.
       02 P2A PIC X(5) OCCURS 1 to 10 TIMES 
                       DEPENDING ON P1.

EGL レコード・フィールドのデータ型

次の表に、構造化レコードと非構造化レコードの、対応するデータ型をリストします。データ型が HEX または INTERVAL である、ワークベンチにより作成された非構造化レコード・フィールドを更新する必要がある場合があります。

表 2. 構造化レコードと非構造化レコードの対応するデータ型
構造化レコードのデータ型 非構造化レコードのデータ型
BOOLEAN BOOLEAN
CHAR、DBCHAR、MBCHAR、STRING、UNICODE STRING
HEX HEX
DATE DATE
TIME TIME
TIMESTAMP TIMESTAMP
INTERVAL INTERVAL
DECIMAL、BIN(長さ)、BIGINT、INT、MONEY、NUM、SMALLINT、SMALLFLOAT 対応する数値型
BIN(長さ、小数点以下の桁数)。ただし、小数点以下の桁数 > 0。 NUM(長さ、小数点以下の桁数)
NUMC(長さ、小数点以下の桁数) NUM(長さ、小数点以下の桁数)
PACF(長さ、小数点以下の桁数) NUM(長さ、小数点以下の桁数)

フィードバック