Sun Java System Application Server Enterprise Edition 8.2 アップグレードと移行

ローカルインタフェース

EJB 1.1 アーキテクチャーでは、セッションおよびエンティティー Beans に 1 つのインタフェースのタイプ、つまりリモートインタフェースが備わっています。このインタフェースを通じて、クライアントやその他のアプリケーションコンポーネントからのアクセスが可能になります。リモートインタフェースは、Bean インスタンスがリモート機能を持つように設計されています。Bean は RMI を継承しており、ネットワークを通じて分散クライアントと対話します。

EJB 2.0 では、セッション Bean とエンティティー Bean は、クライアントに対して、リモートインタフェースローカルインタフェースという 2 種類のインタフェースを通して、メソッドを公開することができます。2.0 のリモートインタフェースは、1.1 で使用されているリモートインタフェースと同じものです。したがって、Bean は RMI を継承しており、ネットワーク層全体にメソッドを公開し、分散クライアントとの対話機能も同じです。

ただし、セッションおよびエンティティー Bean のローカルインタフェースは、ローカルクライアントである (つまり同じ EJB コンテナ内に共存している) EJB からの軽量アクセスをサポートしています。さらに EJB 2.0 仕様では、ローカルインタフェースを使用する EJB が同じアプリケーション内に存在する必要があります。つまり、ローカルインタフェースを使用するアプリケーションの EJB の配備記述子を、1 つの ejb-jar ファイル内に格納する必要があります。

ローカルインタフェースは標準の Java インタフェースです。これは RMI を継承していません。エンタープライズ Bean は、ローカルインタフェースを使用して、同じコンテナ内に存在するその他の Bean に対してメソッドを公開します。ローカルインタフェースを使用することで、Bean はもっと緊密にクライアントと連携し、リモートメソッド呼び出しによるオーバーヘッドなしで直接アクセスすることが可能になります。

さらに、ローカルインタフェースでは、参照セマンティクスを使用して Bean 間で値を渡すことが許可されます。オブジェクトそのものではなく、オブジェクトへの参照を渡すようになるので、大量のデータを含むオブジェクトを渡す際に発生するオーバーヘッドが軽減され、パフォーマンスが向上します。