このトピックでは、セッション Bean の作成方法、セッション Bean 内に最低限必要なもの、およびセッション Bean によって拡張されるさまざまなインタフェースの概要について説明します。このトピックの内容は以下のとおりです。
[WebLogic セッション Bean] ウィザードを使用すると、セッション Bean をゼロから簡単に作成できます。WebLogic EJB プロジェクトで新しいセッション Bean を設計する場合は、このウィザードを使用してテンプレートから基本セッション Bean コードを作成します。ウィザードを使用するには、Workshop で、[WebLogic EJB プロジェクト] フォルダを右クリックし、[新規] を選択して [WebLogic セッション Bean] をクリックします。
新しい Bean の作成方法の詳細については、「チュートリアル : エンタープライズ JavaBean の構築」を参照してください。
注意 : 別の EJB や EJB コントロールを介するなどの方法で、既存のセッション Bean を、アプリケーションから呼び出す場合は、そのセッション Bean の定義を変更する必要がなければ、アプリケーションに EJB Jar を追加するだけで十分です。
次のステートレス セッション Bean のコンポーネント メソッドは、製品の名前を受け取ると、その製品が既知である場合はそれを返し、その製品が見つからない場合は「不明な商品」であることを示すメッセージを返します。このメソッドは「エンティティ Bean の定義」に示されている ProductBean
を使用してデータベース内の製品をルックアップし、その価格を返します。
package mypackage; import javax.ejb.*; import weblogic.ejb.*; import weblogic.ejbgen.*; @Session(ejbName = "PriceChecker") @JndiName(local = "ejb.PriceCheckerLocalHome") @FileGeneration(remoteClass = Constants.Bool.FALSE, remoteHome = Constants.Bool.FALSE, localClass = Constants.Bool.TRUE, localClassName = "PriceCheckerLocal", localHome = Constants.Bool.TRUE, localHomeName = "PriceCheckerLocalHome") @EjbLocalRefs( { @EjbLocalRef(link = "Product") }) public class PriceCheckerBean extends GenericSessionBean implements SessionBean { private ProductHome productHome; public void ejbCreate() { try { javax.naming.Context ic = new InitialContext(); productHome = (ProductHome) ic.lookup("java:comp/env/ejb/Product"); } catch (NamingException ne) { throw new EJBException(ne); } } @LocalMethod() public String returnPrice(String product) { Product theProduct; int visitNumber; try { theProduct = productHome.findByPrimaryKey(product); } catch (FinderException fe) { return "Product not known"; } return "The price of this product is " + theProduct.getPrice(); } }
@Session アノテーションには、セッション Bean の実際の名前が指定されています。ステートフル セッション Bean では、このアノテーションには属性 type = Session.SessionType.STATEFUL
が含まれます。ejbCreate メソッドでは、Product
エンティティ Bean のローカル ホーム インタフェースへの参照が取得されます。lookup メソッドで Product
Bean をルックアップするのに使用される JNDI 参照 Product は、@EjbLocalRef アノテーションを使用してこの Bean のローカル インタフェースにマップされます。このアノテーションは PriceChecker
Bean のクラス定義の一番上で定義されます。JNDI ネーミングの詳細については、お好きな JNDI ドキュメントまたは http://java.sun.com を参照してください。
メソッド returnPrice は、このクラスのビジネス ロジックを実装します。Product
Bean を使用して特定の製品を見つけ、その価格を返します。データベース内にその製品が見つからなければ、価格の代わりに Product not known メッセージを返します。
Workshop では、セッション Bean の作成に必要なすべての情報は、Bean クラス、ローカル ビジネス インタフェース、ローカル ホーム インタフェースなどについて個別の JAVA ファイルに格納されるのではなく、単一のファイルに格納されます。セッション Bean のビルド時に、これらのクラスは自動生成されます。自動生成に必要な情報を保持するために、さまざまな ejbgen アノテーションが使用されます。特に、@FileGeneration アノテーションは PriceChecker
Bean のローカル ホームおよびビジネス インタフェースの名前を指定し、コンポーネント メソッドの @LocalMethod アノテーションはメソッドをローカル ビジネス インタフェースに定義する必要があることを指定します。
生成済みの JAVA ファイルは、リソース ビューで表示できます。このビューで、.apt_src フォルダを展開して、ソース パッケージに対応するフォルダを参照します。生成されたファイルは、これらのフォルダの中に存在します。プロジェクトのビルド フォルダを展開することで、生成されたファイルからコンパイルされた CLASS ファイルを (リソース ビューで) 参照できます。
セッション (およびエンティティ) Bean のインタフェースは、各種の有用なメソッドを含む、特定のインタフェースを拡張します。これには、以下のものがあります。
たとえば、これらのインタフェースは Bean インスタンスを削除し、またステートフル セッション Bean の場合は会話を終了する、remove メソッドを含みます。これらのインタフェースおよびそれらが定義するメソッドの詳細については、お好きな J2EE ドキュメントおよび http://java.sun.com の API リファレンスを参照してください。
すべてのセッション Bean で、javax.ejb.SessionBean インタフェースを実装している必要があります。このインタフェースは、特定の時点で EJB コンテナによって呼び出されるコールバック メソッドを定義します。コールバック メソッドは、setSessionContext、ejbActivate、ejbPassivate、および ejbRemove です。セッション Bean をゼロから定義する場合、このセッション Bean は weblogic.ejb.GenericSessionBean を拡張します。これには、これらのコールバック メソッドの空の実装が含まれます。つまり、空の実装をオーバーライドする必要がある場合にのみ、これらのメソッドを定義する必要があります。セッション Bean をインポートする場合、これらのコールバック メソッドはおそらく、Bean の ejb ファイル内で直接実装されます。コールバック メソッド、およびセッション Bean と EJB コンテナの間での対話におけるその役割の詳細については、「セッション Bean のライフサイクル」を参照してください。