2.2.2 Enterprise Beanのインタフェース
Enterprise Beanの実装で利用できるインタフェースについて説明します。利用できるインタフェースの一覧を次の表に示します。
インタフェース名 |
説明 |
---|---|
リモートホームインタフェース※1 |
EJB仕様1.1以降で規定されている,javax.ejb.EJBHomeを継承した,リモートクライアント用のインタフェースです。主に,Enterprise Beanインスタンスの取得のために使用します。 |
リモートコンポーネントインタフェース※2 |
EJB仕様1.1以降で規定されている,javax.ejb.EJBObjectを継承した,リモートクライアント用のインタフェースです。主に,ビジネスメソッドを定義します。 |
リモートビジネスインタフェース |
リモートクライアントからEnterprise Beanを呼び出すためのビジネスメソッドを定義するインタフェースです。規定されたインタフェースを継承する必要はありません。 |
ローカルホームインタフェース |
EJB仕様2.0以降で規定されている,javax.ejb.EJBLocalHomeを継承した,ローカルクライアント用のインタフェースです。主に,Enterprise Beanインスタンスの取得のために使用します。 |
ローカルコンポーネントインタフェース |
EJB仕様2.0以降で規定されている,javax.ejb.EJBLocalObjectを継承した,ローカルクライアント用のインタフェースです。主に,ビジネスメソッドを定義します。 |
ローカルビジネスインタフェース |
ローカルクライアントからEnterprise Beanを呼び出すためのビジネスメソッドを定義するインタフェースです。規定されたインタフェースを継承する必要はありません。 |
なお,このマニュアルの説明では,複数のインタフェースをまとめた総称を使用することがあります。説明で使用するインタフェースの総称を次に示します。
インタフェースの総称 |
説明 |
---|---|
ホームインタフェース |
次のインタフェースの総称です。
|
コンポーネントインタフェース |
次のインタフェースの総称です。
|
ビジネスインタフェース |
次のインタフェースの総称です。
|
リモートインタフェース |
次のインタフェースの総称です。
ただし,リモートコンポーネントインタフェース,リモートビジネスインタフェースだけを指すこともあります。 |
ローカルインタフェース |
次のインタフェースの総称です。
ただし,ローカルコンポーネントインタフェース,ローカルビジネスインタフェースだけを指すこともあります。 |
これらのインタフェースは,Session BeanまたはEntity Beanの場合に実装します。Message-driven Beanの場合はこれらのインタフェースを持ちません。
Session Beanの場合,ローカルインタフェースからの呼び出しにNo-Interface viewを使用できます。この場合は,インタフェースの実装を省略できます。No-Interface viewについては,「2.16 ローカルビジネスインタフェースの省略(No-Interface viewの利用)」を参照してください。
(1) リモートインタフェース
リモートインタフェースではJava RMIのインタフェースの規定に従い,RMI-IIOP通信によってEnterprise Beanの呼び出しをします。クライアントが異なるJavaVMに存在するEnterprise Beanを呼び出すことができますが,実行時に通信上のオーバーヘッドが発生します。メソッド実行時の引数および戻り値は値渡し(pass by value)になります。
(2) ローカルインタフェース
ローカルインタフェースの場合,Enterprise Beanの呼び出しはJavaのメソッド呼び出しで実行され,通信が発生しません。クライアントは同一J2EEアプリケーションに存在する場合にだけ,このインタフェースを利用できます。また,ローカルインタフェースを利用する場合には,リモートインタフェースと異なり,メソッド実行時の引数および戻り値は参照渡し(pass by reference)になります。
(3) ビジネスインタフェースに対応する機能
ビジネスインタフェースを使用した場合でも,次の機能を使用できます。
-
ローカル呼び出し最適化機能
機能の詳細については,「2.13.1 EJBのリモートインタフェースでのローカル呼び出しの最適化」を参照してください。
-
リモートインタフェースの値の参照渡し機能
機能の詳細については,「2.13.2 EJBのリモートインタフェースの値の参照渡し」を参照してください。
-
RMI-IIOP通信でのタイムアウト
機能の詳細については,「2.11.5 RMI-IIOP通信のタイムアウト」を参照してください。
通信タイムアウトの設定は,定義ファイルまたはAPIで設定します。ビジネスインタフェースを使用した場合のタイムアウトの設定についての注意事項を次に示します。
-
定義ファイルで設定する場合
DI機能を使用するときに,EJBコンテナ内でJNDIを使用するため,JNDIの通信タイムアウトのプロパティも有効になります。
-
APIで設定する場合
スレッドには設定できますが,オブジェクトには設定できません。
また,タイムアウトの発生時には,ビジネスインタフェースがjava.rmi.Remoteを継承している場合はjava.rmi.RemoteException(org.omg.CORBA.TIMEOUT),java.rmi.Remoteを継承していない場合はjavax.ejb.EJBException(RemoteException(org.omg.CORBA.TIMEOUT))が送出されます。
-
-
EJBのチェック機能
機能の詳細については,「2.3 EJB仕様準拠のチェック」を参照してください。
-
J2EEアプリケーションの実行時間監視のメソッドタイムアウト機能
機能の詳細については,マニュアル「アプリケーションサーバ 機能解説 運用/監視/連携編」の「5.3.2 J2EEアプリケーション実行時間の監視とは」を参照してください。
アノテーションを指定したEJBのメソッド呼び出し処理では,次の表に示すメソッド単位にタイムアウト値を適用できます。
表2‒8 タイムアウトの適用範囲 インタフェース
メソッド
Stateless
Session Bean
Stateful
Session
Bean
Singleton Session Bean
Message
Driven
Bean
PersistenceAPI
ビジネスインタフェース
ビジネスメソッド※1
○
○
○
−
−
ホームまたはコンポーネントインタフェース※2
create
×
○
−
−
−
ビジネスメソッド
○
○
−
−
−
remove
×
○
−
−
−
javax.ejb.TimedObject
ejbTimeout
○
−
○
−
−
(4) ビジネスインタフェースのEnterprise Bean呼び出し
ここでは,同一J2EEサーバ内のほかのJ2EEアプリケーションで動作するビジネスインタフェースを呼び出す場合と,ほかのJ2EEサーバで動作するビジネスインタフェースを呼び出す場合について説明します。
どちらの場合も,呼び出し元のEJB-JARファイルまたはWARファイルに,呼び出し先のEnterprise Beanのビジネスインタフェース,およびインタフェースで使用するユーザ作成クラスを含めます。また,自動的にバインドされる名称(Portable Global JNDI名またはHITACHI_EJBから始まる名称),またはユーザ指定名前空間機能で設定した別名を使用してルックアップします。ルックアップで使用する名称については,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」の「2.5 HITACHI_EJBから始まる名称でのルックアップ」を参照してください。
-
同一J2EEサーバ内のほかのJ2EEアプリケーションで動作するビジネスインタフェースのEnterprise Beanを呼び出す場合
呼び出し元のEJB-JARファイルまたはWARファイルに,呼び出し先のEnterprise Beanのビジネスインタフェースおよびインタフェースで使用するユーザ作成クラスを含めてください。
また,J2EEサーバ用ユーザプロパティファイルのejbserver.rmi.localinvocation.scopeキーが「none」の場合は,呼び出し先のEnterprise Beanに対してcjgetstubsjarコマンドを使用してスタブを取得し,呼び出し元のEARファイルに含めてください。※
-
ほかのJ2EEサーバで動作するビジネスインタフェースのEnterprise Beanを呼び出す場合
呼び出し先のEnterprise Beanに対してcjgetstubsjarコマンドを使用してスタブを取得し,呼び出し元のEARファイルに含めてください。※
- 注※
-
アプリケーション間のビジネスインタフェース呼び出しで,ダイナミッククラスローディング機能を使用する場合は,スタブを含める必要はありません。ただし,ダイナミッククラスローディング機能は,性能上,推奨しません。