サンプル: セッション Bean ファサードの作成

このトピックでは、 「セッション Bean ファサードの作成」ウィザードを使用してセッション Bean ファサードを生成する方法を説明します。また、注釈を使用してセッション Bean ファサードを変更する例を幾つか挙げます。

@ws.sdo と @ws.sbf タグ・セットの参照情報については、 『セッション・ファサードと SDO のための注釈』を 参照してください。

このシナリオでは、オークション・アプリケーションのデータのパーシスタンスを管理する CMP エンティティー Bean が組み込まれた EJB プロジェクトを所有していると仮定します。 例えば、CMP エンティティー Bean がユーザー・アカウントの登録、買掛管理の処理、および入札と販売品目の管理を処理します。 プロジェクトには、Registration という EJB 2.1 CMP エンティティー Bean が組み込まれています。

Registration CMP エンティティー Bean は、特定ユーザーに関連したすべてのデータを永続させるように設計されています。 例えば、Registration Bean には以下の属性が含まれています。
  • userid (主キー)
  • email
  • passwd
  • name
  • cardtype
  • acctnum
  • expiry
  • shippingsame
  • active
  • rank
Registration CMP エンティティー Bean には、以下の関係も定義されています。
  • [0..*] accountspayable : Accountspayable
  • [0..*] bid : Bid
  • [0..*] item : Item
  • [0..*] sale : Sale
  • [0..*] sale_1 : Sale
  • [0..*] usertorole: Usertorole
  • [0..1] fk_shipaddress : Address (外部キー)
  • [0..1] fk_billingaddress : Address (外部キー)

ユーザーとユーザーの買掛管理を管理するために Registration CMP エンティティー Bean のセッション Bean ファサードと SDO を作成することにします。 「セッション Bean ファサードの作成」ウィザードを利用すれば、ファサードと SDO を素早く作成できます。

要確認: この例の場合、サンプル Bean コードは用意されていないので、 以下のステップは単にプロセスとその結果としての出力を示しています。 自分の CMP エンティティー Bean を使用してウィザードと注釈を実験できます。
  1. ウィザードを開くには、プロジェクト・エクスプローラーで Registration CMP エンティティー Bean を右クリックして、 ポップアップ・メニューから「セッション Bean ファサードの作成」を選択します。 「セッション Bean ファサードの作成」ウィザードが開きます。
  2. セッション Bean ファサードを RegistrationFacade と命名し、 Registration CMP エンティティー Bean を選択します。 「セッション Bean ファサードの作成」ウィザード、ページ 1
  3. ウィザードの次ページで SDO を指定し、それが読み取り専用でないことを確認します。
  4. サービス・データ・オブジェクト (SDO) に組み込む CMP 属性とコンテナー管理関係 (CMR) フィールドを選択します。
    • この例では、Registration Bean で定義されたすべての属性を組み込みます。 userid 主キー・フィールドを含む必須属性は、デフォルトで選択されます。 ウィザードは外部キー関係 (fk_shipaddress : Address) も選択します。
    • 次に、[0..*] accountspayable: Accountspayable CMR 関係の横のチェック・ボックスを選択します。

      「セッション Bean ファサードの作成」ウィザード (ページ 2)

      注:
      • デフォルトで選択されている必要フィールドは、SDO が読み取り専用でない場合は組み込まなくてはなりません。
      • 右側の表で現在選択されている CMR エンティティーは、左側の表では青色テキストで強調表示されています。
  5. この時点で、「終了」をクリックするか、あるいはセッション Bean ファサードを追加するビジュアル・ダイアグラムを指定するために「次へ 」をクリックすることができます。
    • ウィザードは EJB プロジェクト内に RegistrationFacadeBean セッション Bean を生成します。

      プロジェクト・エクスプローラーでのセッション Bean

      標準のエンタープライズ Bean メソッド (ejbCreate、ejbActivate、ejbPassivate、ejbRemove、getSessionContext、setSessionContext) に加えて、新規の RegistrationFacade セッション Bean には Registration SDO のための以下のメソッドも組み込まれます。
      • applyRegistrationRootChanges
      • createRegistration
      • deleteRegistration
      • getAllRegistrationObjects
      • getRegistrationByKey
      • getRegistrationRoot
      • updateRegistration

      RegistrationFacade セッション Bean には、リモート・クライアント・ビューとローカル・クライアント・ビューの両方が含まれています。これらは EJB クライアント JAR プロジェクト内に生成されます。

    • SDO Java™ クラスおよびユーティリティー Java クラスは、EJB クライアント JAR プロジェクト内に生成されます。

      プロジェクト・エクスプローラーでのセッション Bean

      • RegistrationRoot.java ファイルはルート SDO インターフェースです。 これには、非包含関係および Registration エンティティー自体のための create() メソッドが含まれています。
      • Address.java、Accountspayable.java、および Registration.java は、組み込んだそれぞれの包含 CMR 関係ごとの SDO です。各 SDO には、組み込まれた属性用の getter および setter メソッドが含まれています。
      • SdoClientFactory.java クラスは、createNewEmptyRegistrationRoot() メソッドが組み込まれたファクトリーです。
    • Registration CMP エンティティー Bean をファサード用のルート・エンティティー Bean として選択したので、RegistrationBean.java ファイルに注釈が追加されます。 その注釈は、ワークベンチが適切なセッション Bean クラスと SDO クラスを生成する際に使用されます。 このシナリオに書かれているとおりにウィザードを完了すると、以下の注釈が追加されます。
      • RegistrationBean.java ファイルの先頭で、ファサードの名前および関連した SDO 値オブジェクトの定義に @ws.sbf.session-facade タグが使用されます。 @ws.sdo.value-object タグは、以下のように SDO を定義します。
        /**
         * @ws.sbf.session-facade
         * 	name="RegistrationFacade"
         * 	value-objects="Registration"
         * @ws.sdo.value-object
         * 	name="Registration"
         * 	read-only="false"
         * Bean implementation class for Enterprise Bean: Registration
         */
        public abstract class RegistrationBean implements javax.ejb.EntityBean {
      • ウィザードでセッション Bean ファサードに組み込むよう選択された Registration エンティティー Bean 内のそれぞれの CMP 属性ごとに、RegistrationBean.java ファイルに以下の注釈が追加されます。
        /**
        	 * @ws.sdo.value-object
        	 * 	match="Registration"
        	 * Get accessor for persistent attribute: email
        	 */
        	public abstract java.lang.String getEmail();
      • ウィザードでセッション Bean ファサードに組み込むよう選択された、RegistrationBean.java ファイル内に定義されているそれぞれのコンテナー管理関係ごとに、RegistrationBean.java ファイルに以下の注釈が追加されます。
        /**
        	 * @ws.sdo.value-object
        	 * 	match="Registration"
        	 * 	target-value-object="Address"
        	 * 	contained="false"
        	 * This method was generated for supporting the relationship role named fk_shipaddress.
        	 * It will be deleted/edited when the relationship is deleted/edited.
        	 */
        	public abstract sample.AddressLocal getFk_shipaddress();
    • ウィザードで AccountsPayable エンティティー Bean に対する関係がファサードに追加されたので、以下の注釈が AccountsPayable Bean に追加されました。
      /**
       * @ws.sdo.value-object
       * 	name="Accountspayable"
       * 	read-only="false"
       * Bean implementation class for Enterprise Bean: Accountspayable
       */
  6. RegistrationBean.java 内の注釈を編集して、セッション Bean ファサードの名前を変更します。 name パラメーターの値を RegistrationFacade1 に変更して、その変更を保管します。
    /**
     * @ws.sbf.session-facade
     * 	name="RegistrationFacade1"
     * 	value-objects="Registration"
     * @ws.sdo.value-object
     * 	name="Registration"
     * 	read-only="false"
     * Bean implementation class for Enterprise Bean: Registration
     */
    変更を保管すると、ワークベンチは変更された注釈に基づいて新しい RegistrationFacade1 セッション Bean を再ビルドします。

    プロジェクト・エクスプローラーでのセッション Bean

  7. 注釈を使用して、照会をセッション Bean ファサードに追加します。
    1. RegistrationBean.java ファイルに新規の @ws.sbf.query 注釈を挿入します。 注釈を入力する際、Ctrl-Space キーを押すとコンテンツ・アシスト機能を利用できます。 以下の画像では、エディターで有効なエントリーが表示されています。
      セッション Bean ファサード注釈用のコンテンツ・アシスト
    2. 照会 FindRegistrationByEmail を指定します。
    3. コンテンツ・アシスト機能を利用して、 照会値として [select {$Registration} as r where r.email = 1] を 入力します。
    4. queries パラメーターを @ws.sbf.session-facade タグに追加することで、新規照会をセッション・ファサードに追加します。
      /**
       * @ws.sbf.session-facade
       * 	name="RegistrationFacade1"
       * 	value-objects="Registration"
       *  queries="FindRegistrationByEmail"
       * @ws.sdo.value-object
       * 	name="Registration"
       * 	read-only="false"
       * @ws.sbf.query
       *   name="FindRegistrationByEmail"
       *   query="[select {$Registration} as r where r.email = 1]"
       * Bean implementation class for Enterprise Bean: Registration
       */
      変更を保管すると、ワークベンチは新規照会で変更された注釈に基づいて RegistrationFacade1 セッション Bean を再ビルドします。 RegistrationFacade1 には、以下の 2 つの新しいメソッドが組み込まれています。
      • applyFindRegistrationByEmailChanges(FindRegistrationByEmail)
      • getFindRegistrationByEmail(Serializable[])
        注: この配列内の引数は、照会引数で定義された索引に基づいて索引付けされます。
  8. Registration エンティティー Bean に E メール (email) およびユーザー ID (userid) 属性が含まれているセッション Bean ファサードに新規の RegistrationLite SDO を追加します。
    1. Registration エンティティー Bean に、RegistrationLite という名前の新規 @ws.sdo.value-object タグを定義します。 以下のように RegistrationLite 値オブジェクトも、@ws.sbf.session-facade タグの値オブジェクト・パラメーターに (スペースで区切って) 追加する必要があります。
      /**
       * @ws.sbf.session-facade
       * 	name="RegistrationFacade1"
       * 	value-objects="Registration RegistrationLite"
       *  queries="FindRegistrationByEmail"
       * @ws.sdo.value-object
       * 	name="Registration"
       * 	read-only="false"
       * @ws.sdo.value-object
       *  name="RegistrationLite"
       * 	read-only="false"
       * @ws.sbf.query
       *   name="FindRegistrationByEmail"
       *   query="[select {$Registration} as r where r.email = 1]"
       * Bean implementation class for Enterprise Bean: Registration
       */
    2. ユーザー ID (userid) および E メール (email) 属性のための注釈を、新規の RegistrationLite オブジェクトに組み込むために更新します。
      /**
      	 * @ws.sdo.value-object
      	 * 	match="Registration"
      	 * @ws.sdo.value-object
      	 *   match="RegistrationLite"
      	 * Get accessor for persistent attribute: userid
      	 */
      	public abstract java.lang.Integer getUserid();
      /**
      	 * @ws.sdo.value-object
      	 * 	match="Registration"
      	 * @ws.sdo.value-object
      	 *   match="RegistrationLite"
      	 * Get accessor for persistent attribute: email
      	 */
      	public abstract java.lang.String getEmail();
      RegistrationLite SDO は読み取り専用として定義されておらず、ユーザー ID (userid) および E メール (email) 属性のみが SDO に組み込まれたので、必要フィールドが SDO に含まれていないことを告げる妥当性検査警告がエディターに表示されます。 キー属性が SDO に含まれていないと「作成」は失敗するので、警告が表示されます。
    RegistrationFacade1Bean には、以下のメソッドが含まれています。
    • applyRegistrationLiteRootChanges(RegistrationLiteRoot)
    • createRegistrationLite(RegistrationLite)
    • deleteRegistrationLite(RegistrationLite)
    • getAllRegistrationLiteObjects()
    • getRegistrationLiteByKey(RegistrationKey)
    • getRegistrationLiteRoot()
    • updateRegistrationLite(RegistrationLite)
  9. Status エンティティー Bean のための別の SDO を同じ RegistrationFacade1 セッション Bean ファサードに追加します。
    1. StatusBean.java ファイルで、以下の注釈を Bean 実装に追加します。
      /**
       * @ws.sbf.session-facade
       * match="RegistrationFacade1"
       * value-objects="Status"
       * @ws.sdo.value-object
       *   name="Status"
       *   read-only="true"
       * Bean implementation class for Enterprise Bean: Status
       */
    2. RegistrationBean.java ファイルで、Status 値オブジェクトをセッション Bean ファサード用に定義されたリストに追加します。
      * value-objects="Registration RegistrationLite Status"
    Status SDO を読み取り専用として定義したので、以下のメソッドが RegistrationFacade1Bean クラスに追加されます (update、create、または delete メソッドは追加されません)。
    • getAllStatusObjects()
    • getStatusByKey(StatusKey)
    • getStatusRoot()

フィードバック