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. |
|