EGL インターフェースを使用すると、EGL サービス、Web サービス (EGL で 作成された)、または Java™ コードにアクセスできます。
Interface HelloWorld type JavaObject {javaName = "HelloWorld", packageName = "com.ibm.examples.helloWorld"} function sayHello(name String) returns (String); end
EGL サービスの中にコーディングしたい機能を記述するためのインターフェースを作成できます。 インターフェースが完成した後で、ユーザー自身または他の人がサービスをコーディングできます。 これを、「インターフェースを実装する」と言います。 主な意味は、サービスには、 インターフェース内に記述されたすべての機能が収められるということです。 インターフェースは、サービスが実行しなければならない一種の契約を提供します。
1 つのサービスが複数のインターフェースを実装でき、 また複数のサービスが同じインターフェースを実装できます。
インターフェース・パーツの変数を宣言することのランタイムにおける効果は、 関連するサービス・パーツの変数を宣言することの効果と同じですが、 インターフェースを使用すると、サービス内のロジックの開示を避けることができます。 ロジックを他人から離しておくことは、競争上の理由からも適切であり (ソース・ コードを組織の外部の開発者から隠せます)、また、複雑さを減少させます (組織の 内部か外部かを問わず、開発者に、実装の詳細ではなく、サービスが提供する機能性に 集中できます)。
組織の外部で作成された Web サービスにアクセスするには、 そのサービスへのアクセス方法を詳しく記したサービス固有の Web サービス記述言語 (WSDL) の定義が存在していなければなりません。
WSDL 定義を EGL WSDL ウィザードへの入力データとして使用します。 これにより、コード内の変数の基礎となるサービス固有のインターフェース・パーツが作成されます。
インターフェースを介してサービスにアクセスする場合、そのインターフェースは、 サービス実装が置かれているロケーションにバインドされていなければなりません。 このバインディングには、実装へのアクセスに使用されるプロトコルについての詳細が含まれています。
通常の状態では、バインディング情報を、 「サービス・バインディング・ライブラリー」と呼ばれる特殊タイプの EGL ライブラリーで宣言された変数内に指定します。 「サービス・バインディング・ライブラリー」は、 『ServiceBindingLibrary 型のライブラリー・パーツ』で説明されています。 もう 1 つの可能性として、インターフェースがバインディングを assignment 文で受け取る場合があります。 これが可能になるのは、assignment 文の右辺にあるインターフェースまたはサービスがサービス・バインディング・ライブラリー内で宣言されている場合か、 あるいは、そのインターフェースまたはサービスがバインディングを以前の assignment 文で受け取った場合です。 3 番目の可能性は、関数パラメーターとして機能しているインターフェースが、 既にバインディングを持つ引数を受け取ることによってバインディングを受け取る場合です。
JavaObject 型の EGL インターフェースを使用すると、Java インターフェースまたはクラスで 使用できる機能の一部またはすべてにアクセスできます。 この使用法では、EGL インターフェースは Java コードのビューを提供します。
組織のための効率的ストラテジーは、EGL および Java の両方の専門知識を持つ開発者に、 他の EGL 開発者が使用するためのインターフェース・パーツを作成するように依頼することです。 汎用のために提供されているインターフェース・パーツのリストについては、 『JavaObject 型のインターフェース』を参照してください。
EGL はインターフェースのラージ・セットを提供して、 Web 開発者が実行時に JSF ユーザー・インターフェース・コントロールにアクセスできるようにしています。例えば、ユーザーの入力に応じてテキスト・ボックスの色を変更することができます。 この機能の概要については、『JSF コンポーネント・ツリー』を参照してください。
JSF コンポーネント・ツリーと対話する場合、EGL インターフェース・ テクノロジーが EGL コード内からの Java オブジェクトのインスタンス化を 許可しない (EGL バージョン 6.0.1 現在で) という事実を無視することができます。 この問題の詳細については、 『JavaObject 型のインスタンス化および EGL インターフェース』を参照してください。