| Oracle Containers for J2EE Enterprise JavaBeans開発者ガイド 10g(10.1.3.1.0) B31852-03 |
|
この章では、次のようなEJB 2.1セッションBeanの実装方法を説明します。
詳細は、次を参照してください。
表11-1に、EJB 2.1ステートレス・セッションBeanの重要な構成要素をまとめ、次の手順でこれらの構成要素の実装方法を説明します。一般的な実装は、「Javaの使用方法」を参照してください。詳細は、「ステートレス・セッションBeanとは」を参照してください。
| 構成要素 | 説明 |
|---|---|
|
ホーム・インタフェース(リモートまたはローカル) |
|
|
コンポーネント・インタフェース(リモートまたはローカル) |
リモート・インタフェースの場合は |
|
|
オプションで、 |
|
Beanの実装 |
|
リモート・ホーム・インタフェースは、クライアントがBeanをインスタンス化するためにリモートで起動できるcreateメソッドを定義します。ローカル・ホーム・インタフェースは、Beanをインスタンス化するために同一JVM上のBeanがローカルで起動できるcreateメソッドを定義します。
javax.ejb.EJBHomeを拡張します(「リモート・ホーム・インタフェースの実装」を参照)。
javax.ejb.EJBLocalHomeを拡張します(「ローカル・ホーム・インタフェースの実装」を参照)。
リモート・コンポーネント・インタフェースは、クライアントがリモートで起動できるビジネス・メソッドを宣言します。ローカル・インタフェースは、同一JVM上のBeanがローカルで起動できるビジネス・メソッドを宣言します。
javax.ejb.EJBObjectを拡張します(「リモート・コンポーネント・インタフェースの実装」を参照)。
javax.ejb.EJBLocalObjectを拡張します(「ローカル・コンポーネント・インタフェースの実装」を参照)。
createメソッドに一致する、パラメータを持たない1つのejbCreateメソッドを実装します。
javax.ejb.SessionBeanインタフェースを実装して、定義するコンテナ・コールバック・メソッドを実装します(「EJB 2.1セッションBeanのライフ・サイクル・コールバック・メソッドの構成」を参照)。
SessionContextのインスタンスを取得するsetSessionContextメソッドを実装します(「setSessionContextメソッドの実装」を参照)。ステートレス・セッションBeanでは、このメソッドは通常は何も行いません(実際にはSessionContextをセッションBeanの状態に追加しません)。
ejb-jar.xmlファイルを構成します(「デプロイXMLの使用方法」を参照)。
例11-1に、ステートレス・セッションBeanの一般的な実装を示します。
package hello;
import javax.ejb.*;
public class HelloBean implements SessionBean {
/* ----------------------------------------
* Begin business methods. The following methods
* are called by the client code.
* -------------------------------------- */
public String sayHello(String myName) throws EJBException {
return ("Hello " + myName);
}
/* ----------------------------------------
* Begin private methods. The following methods
* are used internally
* -------------------------------------- */
...
/* ------------------------------------------------------
* Begin EJB-required methods. The following methods are called
* by the container, and never called by client code
* ------------------------------------------------------- */
public void ejbCreate() throws CreateException {
// when bean is created
}
public void setSessionContext(SessionContext ctx) {
}
// Life Cycle Methods
public void ejbActivate() {
}
public void ejbPassivate() {
}
public void ejbCreate() {
}
public void ejbRemove() {
}
}
例11-2に、例11-1に示したステートレス・セッションBeanに対応するejb-jar.xmlセッション要素を示します。
...
<enterprise-beans>
<session>
<ejb-name>Hello</ejb-name>
<home>hello.HelloHome</home>
<remote>hello.Hello</remote>
<ejb-class>hello.HelloBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
...
デプロイ・ファイルの詳細は、第26章「デプロイメント・ディスクリプタ・ファイルの構成」を参照してください。
表11-2に、EJB 2.1ステートフル・セッションBeanの重要な構成要素をまとめ、次の手順でこれらの構成要素の実装方法を説明します。一般的な実装は、「Javaの使用方法」を参照してください。詳細は、「ステートフル・セッションBeanとは」を参照してください。
リモート・ホーム・インタフェースは、クライアントがBeanをインスタンス化するためにリモートで起動できるcreateメソッドを定義します。ローカル・ホーム・インタフェースは、Beanをインスタンス化するために同一JVM上のBeanがローカルで起動できるcreateメソッドを定義します。
javax.ejb.EJBHomeを拡張します(「リモート・ホーム・インタフェースの実装」を参照)。
javax.ejb.EJBLocalHomeを拡張します(「ローカル・ホーム・インタフェースの実装」を参照)。
リモート・コンポーネント・インタフェースは、クライアントがリモートで起動できるビジネス・メソッドを宣言します。ローカル・インタフェースは、同一JVM上のBeanがローカルで起動できるビジネス・メソッドを宣言します。
javax.ejb.EJBObjectを拡張します(「リモート・コンポーネント・インタフェースの実装」を参照)。
javax.ejb.EJBLocalObjectを拡張します(「ローカル・コンポーネント・インタフェースの実装」を参照)。
createメソッドに一致するejb<METHOD>メソッドを実装します。ステートフル・セッションBeanの場合は、ホーム・インタフェースの各createメソッドに対応する引数リストをejbCreateメソッドに提供します。
javax.ejb.SessionBeanインタフェースを実装して、定義するコンテナ・コールバック・メソッドを実装します(「EJB 2.1セッションBeanのライフ・サイクル・コールバック・メソッドの構成」を参照)。
SessionContextのインスタンスを取得するsetSessionContextメソッドを実装します(「setSessionContextメソッドの実装」を参照)。ステートフル・セッションBeanでは、このメソッドは通常はSessionContextをセッションBeanの状態に追加します。
ejb-jar.xmlファイルを構成します(「デプロイXMLの使用方法」を参照)。
例11-3に、ステートフル・セッションBeanの一般的な実装を示します。
package hello;
import javax.ejb.*;
public class HelloBean implements SessionBean {
/* ----------------------------------------
* State
* -------------------------------------- */
private SessionContext ctx;
private Collection messages;
private String defaultMessage = "Hello, World!";
/* ----------------------------------------
* Begin business methods. The following methods
* are called by the client code.
* -------------------------------------- */
public String sayHello(String myName) throws EJBException {
return ("Hello " + myName);
}
public String sayHello() throws EJBException {
return defaultMessage;
}
/* ----------------------------------------
* Begin private methods. The following methods
* are used internally.
* -------------------------------------- */
...
/* ------------------------------------------------------
* Begin EJB-required methods. The following methods are called
* by the container, and never called by client code.
* ------------------------------------------------------- */
public void ejbCreate() throws CreateException {
// when bean is created
}
public void ejbCreate(String message) throws CreateException {
this.defaultMessage = message;
}
public void ejbCreate(Collection messages) throws CreateException {
this.messages = messages;
}
public void setSessionContext(SessionContext ctx) {
this.ctx = ctx;
}
// Life Cycle Methods
public void ejbActivate() {
}
public void ejbPassivate() {
}
public void ejbCreate() {
}
public void ejbRemove() {
}
}
例11-4に、例11-3に示したステートフル・セッションBeanに対応するejb-jar.xmlセッション要素を示します。
...
<enterprise-beans>
<session>
<ejb-name>Hello</ejb-name>
<home>hello.HelloHome</home>
<remote>hello.Hello</remote>
<ejb-class>hello.HelloBean</ejb-class>
<session-type>Stateful</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
...
デプロイ・ファイルの詳細は、第26章「デプロイメント・ディスクリプタ・ファイルの構成」を参照してください。
ホーム・インタフェース(リモートおよびローカル)は、セッションBeanインスタンスの作成に使用され、Beanのcreateメソッドを定義します。表11-3に示すように、定義するcreateメソッドのタイプは、作成しているセッションbeanのタイプによって決まります。
| セッションBeanタイプ | createメソッド |
|---|---|
|
ステートレス・セッションBean |
パラメータなしの1つの |
|
ステートフル・セッションBean |
Beanの状態を定義するパラメータを持つ1つ以上のcreateメソッド。 |
各createメソッドにつき、対応するejbCreateメソッドをBean実装で定義します。
リモート・クライアントは、リモート・インタフェースを介してEJBを起動します。クライアントは、リモート・ホーム・インタフェースで宣言されたcreateメソッドを起動します。コンテナは、Bean実装内の、適切なパラメータ・シグネチャを持つejbCreateメソッドにクライアント・コールを渡します。リモート・ホーム・インタフェースを開発するための要件は次のとおりです。
javax.ejb.EJBHomeインタフェースを拡張する必要があります。
createメソッドで、次の例外をスローできます。
createメソッドでも、次の例外をスローできません。
例11-5に、ステートレス・セッションBeanのHelloHomeというリモート・ホーム・インタフェースを示します。
package hello;
import javax.ejb.*;
import java.rmi.*;
public interface HelloHome extends EJBHome {
public Hello create() throws CreateException, RemoteException;
}
例11-6に、ステートフル・セッションBeanのHelloHomeというリモート・ホーム・インタフェースを示します。
様々なcreateメソッドに渡される引数を使用して、セッションBeanの状態を初期化します。
package hello;
import javax.ejb.*;
import java.rmi.*;
public interface HelloHome extends EJBHome {
public Hello create() throws CreateException, RemoteException;
public Hello create(String message) throws CreateException, RemoteException;
public Hello create(Collection messages) throws CreateException, RemoteException;
}
EJBは、同じコンテナに存在するクライアントからローカルでコールできます。したがって、同一JVM上のBean、JSPまたはサーブレットは、ローカル・ホーム・インタフェースで宣言されたcreateメソッドを起動します。コンテナは、Bean実装内の、適切なパラメータ・シグネチャを持つejbCreateメソッドにクライアント・コールを渡します。ローカル・ホーム・インタフェースを開発するための要件は、次のとおりです。
javax.ejb.EJBLocalHomeインタフェースを拡張する必要があります。
createメソッドで、次の例外をスローできます。
createメソッドでも、次の例外をスローできません。
例11-7に、ステートレス・セッションBeanのHelloLocalHomeというローカル・ホーム・インタフェースを示します。
package hello;
import javax.ejb.*;
public interface HelloLocalHome extends EJBLocalHome {
public HelloLocal create() throws CreateException;
}
例11-8に、ステートフル・セッションBeanのHelloLocalHomeというローカル・ホーム・インタフェースを示します。
様々なcreateメソッドに渡される引数を使用して、セッションBeanの状態を初期化します。
package hello;
import javax.ejb.*;
public interface HelloLocalHome extends EJBLocalHome {
public HelloLocal create() throws CreateException;
public HelloLocal create(String message) throws CreateException;
public HelloLocal create(Collection messages) throws CreateException;
}
コンポーネント・インタフェースでは、クライアントから起動可能なBeanのビジネス・メソッドを定義します。
リモート・インタフェースでは、リモート・クライアントによって起動可能なビジネス・メソッドを定義します。リモート・コンポーネント・インタフェースを開発するための要件は、次のとおりです。
javax.ejb.EJBObjectインタフェースを拡張する必要があり、そのメソッドはjava.rmi.RemoteException例外をスローする必要があります。
publicとして宣言する必要があります。
EJBExceptionおよびRemoteExceptionを含めた実行時例外は、リモート実行時例外としてクライアントに転送されます。
例11-9に、Helloというリモート・コンポーネント・インタフェースとその定義済のメソッドを示します。各メソッドは、対応するセッションBeanで実装されます。
package hello; import javax.ejb.*; import java.rmi.*; public interface Hello extends EJBObject { public String sayHello(String myName) throws RemoteException; public String sayHello() throws RemoteException; }
ローカル・コンポーネント・インタフェースでは、ローカル(同一JVM上の)クライアントから起動可能なBeanのビジネス・メソッドを定義します。ローカル・コンポーネント・インタフェースを開発するための要件は、次のとおりです。
javax.ejb.EJBLocalObjectインタフェースを拡張する必要があります。
publicとして宣言します。
例11-10に、HelloLocalというローカル・コンポーネント・インタフェースとその定義済のメソッドを示します。各メソッドは、対応するセッションBeanで実装されます。
package hello; import javax.ejb.*; public interface HelloLocal extends EJBLocalObject { public String sayHello(String myName); public String sayHello(); }
このメソッドを使用して、Beanのコンテキストの参照を取得します。セッションBeanには、コンテナによって維持され、Beanから使用可能なセッション・コンテキストが存在します。Beanは、セッション・コンテキスト内のメソッドを使用して、コンテナへのコールバック・リクエストを送信できます。
コンテナは、Beanをインスタンス化した後、setSessionContextメソッドを起動して、Beanからセッション・コンテキストを取得できるようにします。コンテナは、トランザクション・コンテキストからはこのメソッドをコールしません。この時点でBeanがセッション・コンテキストを保存しなかった場合、Beanは二度とセッション・コンテキストにアクセスできなくなります。
コンテナはこのメソッドをコールする際、SessionContextオブジェクトの参照をBeanに渡します。Beanは、この参照を後の使用のために格納できます。
例11-11に、セッション・コンテキストをsessctx変数に格納するセッションBeanを示します。
import javax.ejb.*; public class myBean implements SessionBean { SessionContext sessctx; public void setSessionContext(SessionContext ctx) { sessctx = ctx; // session context is stored in instance variable } // other methods in the bean }
|
![]() Copyright © 2002, 2008 Oracle Corporation. All Rights Reserved. |
|