セションBeanを作成するには、以下のファイルを作成する必要があります。
セションBeanクラス
ホームインターフェイス
リモートインターフェイス
コマンドマップ
ビジネスクラス
デプロイメント記述 (ejb-jar.xml)
ejb-jarファイル
以下のクラスは必要に応じて作成します。
データBean
ファクトリクラス
アプリケーションクラス
セションクラス
セションBeanクラス
セションBeanクラスは、com.fujitsu.uji.ejb.bean.UjiSessionBeanクラスを継承して作成してください。メソッドを追加する必要はありません。以下の例は、セションBeanクラスのクラス名をejboffice.ejb.OfficeEJBとした場合のソースファイルです。
package ejboffice.ejb; import com.fujitsu.uji.ejb.bean.UjiSessionBean; public class OfficeEJB extends UjiSessionBean { }
ホームインターフェイス
ホームインターフェイスはcom.fujitsu.uji.ejb.UjiSessionHomeインターフェイスを継承して作成します。以下のようにcreate()メソッドを作成してください。
package ejboffice.ejb; import com.fujitsu.uji.ejb.UjiSessionHome; public interface OfficeEJBHome extends UjiSessionHome { public OfficeEJBRemote create() throws java.rmi.RemoteException, javax.ejb.CreateException, java.lang.reflect.InvocationTargetException; }
create()メソッドのシグネチャは次のようにしてください。
public [リモートインターフェイス名] create() throws java.rmi.RemoteException, javax.ejb.CreateException, java.lang.reflect.InvocationTargetException;
ここで、[リモートインターフェイス名]の部分はリモートインターフェイスのインターフェイス名で置き換えてください。
リモートインターフェイス
リモートインターフェイスはcom.fujitsu.uji.ejb.UjiSessionインターフェイスを継承して作成します。メソッドの追加定義は必要ありません。
package ejboffice.ejb; import com.fujitsu.uji.ejb.UjiSession; public interface OfficeEJBRemote extends UjiSession { }
ビジネスクラス
ビジネスクラスには、セション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の規約に従っている必要があります。この規約については“EJBの引数や返却値として使用可能なオブジェクト”を参照してください。
コマンドマップ
コマンドマップには、クライアントから受信したデータに応じて、どのビジネスクラスのメソッドを呼び出すのかを記述します。以下は記述例です。
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 セションクラス”を参照してください。
アプリケーションクラス
アプリケーションクラスは同一のJVMで動作するセションBeanのオブジェクトで共有されるデータを保持します。アプリケーションクラスに記憶させたデータは、他のセションBeanオブジェクトからも参照されます。アプリケーション独自の情報をアプリケーションクラスに記憶させたい場合は、ユーザー定義のアプリケーションクラスを使用してください。ユーザー定義のアプリケーションクラスの作成方法は、“3.4 アプリケーションクラス”を参照してください。
ファクトリクラス
ファクトリクラスはアプリケーションクラスやセションクラスのインスタンスを作成するクラスです。ユーザー定義のアプリケーションクラスやセションクラスを使用する場合は、ユーザー定義のファクトリクラスを作成し、そのクラス名を初期化パラメタで指定する必要があります。ファクトリクラスの作成方法は、“3.5 ファクトリクラス”を参照してください。初期化パラメタの設定方法は“セションBeanの初期化パラメタの設定”を参照してください。
Apcoordinatorで作成したアプリケーションの動作を設定するパラメタを初期化パラメタと呼びます。初期化パラメタの一覧は“11.2 初期化パラメタ”を参照してください。初期化パラメタの指定方法は2通りあります。
デプロイメント記述で指定する: エンタープライズBean環境のエントリとして初期化パラメタを定義する方法です。エントリ名は"uji/xxx"とします。ここで、xxxは初期化パラメタ名です。エントリの型はjava.lang.Stringを指定します。パラメタlogLevel (ログ出力レベルの設定) など、プログラムのコンパイル後に変更する可能性が高いパラメタはこの方法で指定することを推奨します。
ポイント
EJB2.0以前のEJBアプリケーションの場合、エントリの値は、セションBeanをEJBコンテナへ配備する際に変更可能です。
セションBeanクラスで指定する: 以下のように、UjiSessionBeanクラスのgetInitParametersメソッドをオーバーライドして、初期化パラメタをPropertiesクラスに格納します。
import com.fujitsu.uji.ejb.bean.*; import java.util.Properties; public class OfficeEJB extends UjiSessionBean { protected Properties getInitParameters() { Properties p=new Properties(); // ユーザー定義のファクトリクラスを指定します。 p.setProperty("factory","ejboffice.ejb.OfficeFactory"); return p; } }
パラメタfactory (ファクトリクラスの指定) など、プログラムのコンパイル後に変更する可能性が低いパラメタはこの方法で指定することを推奨します。
デプロイメント記述はEJBの構成や設定を記述するXMLファイルです。デプロイメント記述には以下の情報を記述します。
設定項目 | デプロイメント記述のタグ | 設定値 |
---|---|---|
EJBの名前 | ejb-name | セションBeanに付ける名前。同一のejb-jarファイルに複数のEJBが格納されている場合は、それぞれ異なる名前を付けます。 |
EJBのクラス | ejb-class | セションBeanクラスのクラス名 |
ホームインターフェイス | home | ホームインターフェイスのインターフェイス名 |
リモートインターフェイス | remote | リモートインターフェイスのインターフェイス名 |
セションBeanの種類 | session-type | ステートフルの場合はStateful、ステートレスの場合はStateless。 |
トランザクションの管理方法 | transaction-type | Bean管理のトランザクション区切り(Bean-managed transaction demarcation)の場合はBean、コンテナ管理のトランザクション区切り(Container-managed transaction demarcation)の場合はContainer。 |
以下にデプロイメント記述の例を示します。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd"> <ejb-jar> <enterprise-beans> <session> <display-name>OfficeEJB</display-name> <ejb-name>OfficeEJB</ejb-name> <home>ejboffice.ejb.OfficeEJBHome</home> <remote>ejboffice.ejb.OfficeEJBRemote</remote> <ejb-class>ejboffice.ejb.OfficeEJB</ejb-class> <session-type>Stateful</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans> <assembly-descriptor> <container-transaction> <method> <ejb-name>OfficeEJB</ejb-name> <method-name>*</method-name> </method> <trans-attribute>NotSupported</trans-attribute> </container-transaction> </assembly-descriptor> </ejb-jar>
ejb-jarファイルは、EJBに必要なファイルを格納したJARファイルです。ejb-jarファイルには以下のファイルを格納します。
以下のJava クラスファイル: パッケージ階層に沿ったフォルダ階層に配置します。
セションBeanクラス
ホームインターフェイス
リモートインターフェイス
ビジネスクラス
ユーザー定義のセションクラス
ユーザー定義のアプリケーションクラス
ユーザー定義のファクトリクラス
以上のクラスで使用されるユーザー定義のクラス
以下の設定ファイル: 後述する設定ファイルフォルダに配置します。
コマンドマップ
コマンドスクリプティング
リモートマップ
データBean変換マップ
デプロイメント記述 (ejb-jar.xml): /META-INFに配置します。
設定ファイルフォルダはセションBeanクラス名から次のように決まります。
/[パッケージ階層]/[クラス名]_inf
ここで、[パッケージ階層]はセションBeanクラスのパッケージに沿ったフォルダ階層、[クラス名]はセションBeanクラスのクラス名です。例えば、セションBeanクラスがejboffice.ejb.OfficeEJBなら、設定ファイルフォルダは/ejboffice/ejb/OfficeEJB_infとなります。
初期化パラメタuji.infoPathによって、設定ファイルフォルダを変更することも可能です。