ビジネスインタフェースの作成方法は以下のとおりです。
以下のインタフェースを継承します。メソッドを追加する必要はありません。
ステートレスセションBeanの場合: com.fujitsu.uji.ejb.UjiSimpleStateless
ステートフルセションBeanの場合: com.fujitsu.uji.ejb.UjiSimpleStateful
ビジネスインタフェースを以下のどちらで使用するかを指定します。
ローカルビジネスインタフェース
クライアントとセションBeanが同一のJavaVMで動作している場合のみ利用できます。
リモートビジネスインタフェース
クライアントとセションBeanが動作しているJavaVMが同一の場合でも別の場合でも利用できます。
ビジネスインタフェースに以下のアノテーションをつけることによって指定します。
ローカルビジネスインタフェースの場合: @Local
リモートビジネスインタフェースの場合: @Remote
以下は、リモートビジネスインタフェースの記述例です。
package ejboffice.ejb; import javax.ejb.Remote; import com.fujitsu.uji.ejb.UjiSimpleStateful; @Remote public interface Office extends UjiSimpleStateful { }
注意
ビジネスインタフェースはアプリケーションごとに作成する必要があります。複数のアプリケーションで同一のビジネスインタフェースは使用できません。
同一のインタフェースをリモートビジネスインタフェースとローカルビジネスインタフェースの両方として使用することはできません。
ビジネスインタフェースでjava.rmi.Remoteを継承しないでください。
リモートビジネスインタフェースを利用した場合、セションBeanの引数と返却値は値渡しとなります。ローカルビジネスインタフェースを利用した場合は参照渡しとなります。両者の違いについては33.2.6 値渡しと参照渡しの違いを参照してください。
セションBeanクラスの作成方法は以下のとおりです。
以下のクラスを継承します。
ステートレスセションBeanの場合: com.fujitsu.uji.ejb.bean.UjiSimpleStatelessBean
ステートフルセションBeanの場合: com.fujitsu.uji.ejb.bean.UjiSimpleStatefulBean
セションBeanクラスに以下のアノテーションを付けます。
ステートレスセションBeanの場合: @Stateless
ステートフルセションBeanの場合: @Stateful
implements節にビジネスインタフェースを指定します。
Apcoordinatorの初期化パラメタをセションBeanクラスで指定する場合は、getInitParametersメソッドを実装します。デプロイメント記述で指定する場合は、getInitParametersメソッドは不要です。詳細は、33.2.2 セションBeanの初期化パラメタの設定を参照してください。
以下は、ステートフルセションBeanの記述例です。
package ejboffice.ejb; import java.util.Properties; import javax.ejb.Stateful; import com.fujitsu.uji.ejb.bean.UjiSimpleStatefulBean; @Stateful public class OfficeBean extends UjiSimpleStatefulBean implements Office { protected Properties getInitParameters() { Properties p=new Properties(); p.setProperty("uji.infoPath", "/ejboffice/ejb/OfficeBean_inf"); return p; } }
注意
セションBeanクラスとビジネスインタフェースで、セションBeanの種別(ステートフルかステートレスか)を一致させる必要があります。
ビジネスクラスには、セションBeanで実行する処理を記述したメソッドを作成します。ビジネスクラスの例を示します。
package ejboffice.ejb; import ejboffice.*; import com.fujitsu.uji.DispatchContext; import com.fujitsu.uji.GenericHandler; public class OfficeHandler extends GenericHandler { // クライアントからの呼び出しを受けて実行されるメソッドを定義します。 // クライアントから受信したデータBeanが第2引数に与えられます。 public Object search(DispatchContext context, ViewBean dataBean) { // 実行する処理を記述します。 int index=dataBean.getIndex(); ... dataBean.putHeader(header); // クライアントに返却するオブジェクトをreturnで指定します。 return dataBean; } // 必要なだけメソッドを定義します。 ... }
ビジネスクラスの作成方法の詳細は3.1 ビジネスクラスを参照してください。以下では、セションBeanのビジネスクラスに特有の事項を説明します。
メソッドの返り値の型はObjectにします。セションBeanからクライアントに返すオブジェクトをメソッドのreturn文で指定します。
リモートビジネスインタフェースを使用する場合は、以下のオブジェクトがRMI over IIOPの規約にしたがっている必要があります。この規約については25.3.6 EJBの引数や返却値として使用可能なオブジェクトを参照してください。
クライアントからビジネスクラスが受け取るオブジェクト
ビジネスクラスが返すオブジェクト
セションスコープのビジネスクラスであっても、以下の場合にはビジネスクラスのdestroyメソッドが呼び出されません。
EJBコンテナが異常終了した場合
セションBeanがシステム例外を発生させた場合
セションBeanのpassivateが実行された状態でタイムアウトした場合
コマンドマップには、クライアントから受信したデータに応じて、どのビジネスクラスのメソッドを呼び出すのかを記述します。以下は記述例です。
ejboffice.ViewBean;getArea=ejboffice.ejb.OfficeHandler.getArea ejboffice.ViewBean;search=ejboffice.ejb.OfficeHandler.search ejboffice.RenewBean;find=ejboffice.ejb.OfficeHandler.find ejboffice.RenewBean;update=ejboffice.ejb.OfficeHandler.update
この記述例の1行目の意味は以下のとおりです。
クライアントから受信したデータBeanがejboffice.ViewBeanクラスで、受信したコマンド名がgetAreaなら、ビジネスクラスejboffice.ejb.OfficeHandlerのgetAreaメソッドを呼び出します。
コマンドマップの記述方法の詳細は3.6.1 コマンドマップを参照してください。
セションクラスはセションを通して使われるデータを保持するためのクラスです。セションクラスに記憶させたデータは、ビジネスクラスの実行終了後でもセションBeanのオブジェクトが存在する限り保持されます。アプリケーション独自の情報をセションクラスに記憶させたい場合は、ユーザ定義のセションクラスを使用してください。ユーザ定義のセションクラスの作成方法は3.3 セションクラスを参照してください。
アプリケーションクラスは同一のJavaVMで動作するセションBeanのオブジェクトで共有されるデータを保持します。アプリケーションクラスに記憶させたデータは、他のセションBeanオブジェクトからも参照されます。アプリケーション独自の情報をアプリケーションクラスに記憶させたい場合は、ユーザ定義のアプリケーションクラスを使用してください。ユーザ定義のアプリケーションクラスの作成方法は、3.4 アプリケーションクラスを参照してください。
ファクトリクラスはアプリケーションクラスやセションクラスのインスタンスを作成するクラスです。ユーザ定義のアプリケーションクラスやセションクラスを使用する場合は、ユーザ定義のファクトリクラスを作成し、そのクラス名を初期化パラメタで指定する必要があります。ファクトリクラスの作成方法は、3.5 ファクトリクラスを参照してください。初期化パラメタの設定方法は33.2.2 セションBeanの初期化パラメタの設定を参照してください。