EGL サービスと Web サービス

サービス とは同じプラットフォームまたは別のプラットフォーム上に常駐するアプリケーション・コンポーネントであるクライアント によって呼び出すことのできる、一連の操作です。 EGL で開発するサービスは、次のいずれか、または両方の方法でデプロイできます。
開発時において、サービスとは実装コードを組み込んだパーツのことです。 次に、単純な例を挙げます。
  Service echoString
    function returnString 
      (inputString string in) 
      returns (string)

      return (inputString);
    end
  end
サービス・パーツはライブラリー・パーツに似ています。
ライブラリーとサービスは、以下の点が異なっています。

ご使用のコードでサービス・パーツを直接使用する代わりに、そのパーツに基づく変数を作成します。 このサービス・パーツにはランタイム・サービスのロジックが組み込まれていますが、アクセスに必要な詳細は組み込まれていません。 しかし実行時には、特定のロケーションで実行されるサービスに、変数がバインドされ (変数がサービスを参照し) ます。 このバインディングにはサービスにアクセスするために使用するプロトコルに関する詳細が組み込まれています。

ユーザーは、EGL ライブラリー型のサービス・バインディング・ライブラリー で宣言された変数に、バインディング情報を指定します。変数は、EGL ライブラリーから直接アクセスする任意の変数でそうであるように、実行単位に対してグローバルです。 ほとんどの場合、その変数に対する初期バインディングにより、実行単位の任意のクライアントで必要な、サービス固有のすべての機能が提供されます。

ライブラリーのプロパティー、runtimeBind の設定で、サービスに対する変数の初期バインディングの決定を開発時に行うか、デプロイメント時に行うかが決まります。
上級ユーザーに対して、EGL は次のような機能を提供します。

EGL Web サービス以外の Web サービスにアクセスするには、EGL インターフェースを使用する必要があります。 インターフェースは、EGL で開発されたサービスにアクセスするための 2 次的な方法にもなります。 この件の概要については、『EGL インターフェース』を参照してください。

実行時処理

どの EGL クライアントも、サービスの関数記述に相当する関数記述を含む生成済みプロキシーによって、サービスにアクセスできます。 次のような構成が可能です。
  • EGL クライアントは直接接続により、EGL サーバーにアクセスします。この場合、クライアントとサービスは同じ実行単位にあります。
  • EGL クライアントは TCP/IP を介して EGL サービスにアクセスします。この場合、EGL ランタイムは対話のクライアント側とサービス側の両方で使用されます。
  • EGL クライアントは Web サービスにアクセスします。この場合、Web サービス記述言語 (WSDL) の定義が転送元と転送先の両方で使用されます。
    1. 生成済みプロキシーは、EGL がサービス・バインディング・ライブラリーを 生成したときに作成された Java JAX-RPC スタブを呼び出します。
    2. このスタブは WSDL 定義から得られた情報を使用して、サービスに XML ベースの SOAP (Simple Object Access Protocol) メッセージを送信します。このメッセージには、EGL 生成のデータ型と、サービスに送付されたデータ型と、サービスから受け取ったデータ型との間の有効なマッピングが含まれています。
      注: たいていはデフォルトの変換で十分ですが、特定フィールドの @xsd プロパティーを設定する (『@xsd』を参照) ことにより、デフォルトを上書きすることができます。
    3. スタブは戻された SOAP メッセージを受信します。このメッセージは Web サービスからの業務データか、ServiceInvocationException 型の例外です。 後者の詳細については、『EGL システム例外』を参照してください。
    4. スタブは WSDL 定義からの情報を使用して、この場合は SOAP データ型から プロキシーで使用される Java データ型に変換します。
    5. スタブはデータとコントロールをプロキシーに戻します。
    6. プロキシーはコントロールをクライアントに戻します。
EGL により生成された Web サービスが使用中の場合、次のイベントが転送のサービス側で起こります。
  • 呼び出しに応じて、Web サービスのランタイム・コードはサービス側の WSDL 定義を使用し、サービスが使用できるデータを作成します。
    注: EGL は Web サービスで WSDL 定義を生成し、(ほとんどの場合、) EGL 生成フィールドから WSDL エレメントへのデフォルト変換を使用します。 『@xsd』で説明されているように、特定フィールドの @xsd プロパティーを設定することによってデフォルトを上書きすることができます。 この場合、プロパティー設定の目的は、実行時にサービスに対して提供されるデータの種類を制限する、一連の妥当性検査規則を確立することです。
  • Web サービスのランタイム・コードはデータを Web サービスに送信し、Web サービスがデータを戻したときに次のように振舞います。
    1. サービス側 WSDL 定義を使用して XML ベースの SOAP メッセージを作成する
    2. そのメッセージをクライアントに戻す

実行時のサービス・バインディング

同じ操作を、別のサーバー上で提供する 2 つのサービスの場合を考えてみます。 クライアントに対してユーザーは、データベースからの値の取り込みといったランタイム条件に応えて、あるサービスまたは別のサービスを選択できるように調整できます。 このような柔軟性は次の方法で実現できます。
  • ServiceLib』に説明されているように、ロケーションを設定する ServiceLib 関数を使う方法
  • 次のステップのように、複数の変数を使用する方法
    1. サービス・バインディング・ライブラリーに変数を作成する。 変数は同じサービス・パーツに基づき、かつ、異なるランタイム・ロケーションに バインドされます。
    2. クライアント変数 (これも、サービス・パーツに基づく) を宣言する。
    3. 実行時の条件により、1 つまたは別のグローバル変数をクライアント変数に割り当てる。 assignment 文は、try ブロックの OnException 節に置くことができます。この節はサービス呼び出しが失敗したことに応じて呼び出されるからです。(特に、ServiceInvocationException 型の例外に応答)
    4. クライアント変数を使用してサービスにアクセスする。

    ServiceInvocationException の詳細については、『EGL システム例外』を参照してください。

複数の変数を使用するかどうかは次の規則によります。
  • assignment 文左辺の変数が、次の場合にバインディングを 受信する
    • 変数のみが右辺にある場合。この変数は、サービス・バインディング・ライブラリーで宣言されたか、または前の文でバインディングを受信した、サービスまたはインターフェースを表します。
    • 関数のみが右辺にある場合。この関数はバインドされたインターフェースまたはサービスを戻します。
  • 関連した引数にバインディングがある場合は、関数仮パラメーターがバインディングを受信します。

ビルド記述子オプション

EGL サービスを生成する場合は、ビルド記述子オプション serviceRuntime を使用することができますが、デフォルト値で十分です。

Web サービスを生成する場合、次のビルド記述子オプションが使用できます。
  • J2EELevel
  • serverType
  • serviceRuntime
  • WebServiceEncodingStyle
Web サービスまたは Web サービスにバインドされたインターフェースを参照するサービス・バインディング・ライブラリーを生成する場合は、次のビルド記述子オプションが使用できます。
  • J2EELevel
  • serverType
  • serviceRuntime

デプロイメント

EGL サービスのデプロイは、J2EE 以外の Java アプリケーションの デプロイに相当します。 詳細については、『J2EE の外部での Java アプリケーションのデプロイ』を 参照してください。

Web サービスのデプロイは Web アプリケーションのデプロイに相当します。詳細については、『EGL 生成コード用の J2EE ランタイム環境の設定』を参照してください。

フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.