EJB 3.0を使用したステートフルSession EJBの開発方法

日付:2006年5月6日
著者:Merrick Schincariol

はじめに

このデモ・アプリケーションでは、Oracle Application ServerのステートフルSession Beanに対するサポートと、EJB 3.0を使用したライフ・サイクル・イベントのコールバックについて説明します。 このデモ・アプリケーションでは、ステートフルEJBを使用して、EJB 3.0の新機能を紹介します。

EJB 3.0は、以前のバージョンで開発者が直面した様々な複雑性を排除することによって、EJBアプリケーションの開発を大幅に簡素化します。 EJB 2.1を使用して簡単なステートフルEJBを作成するには、Beanクラスと2つのインタフェース、デプロイメント・ディスクリプタが必要です。 コンポーネント・インタフェース(リモートまたはローカル、あるいは両方)およびホーム・インタフェースはそれぞれ javax.ejb.EJBObjectjavax.ejb.EJBHomeを拡張し、Beanクラスがは javax.ejb.SessionBeanインタフェースを実装する必要がありました。

EJB 3.0では、それら多くの要件が次のように緩和されています。

  • 簡単なJavaクラス(POJO)をBeanクラスに使用可能
  • Pure Javaインタフェース(POJI)をEJBインタフェースに使用可能
  • EJBホーム・インタフェースは不要
  • XMLデプロイメント・ディスクリプタのかわりにアノテーションを使用可能

基本的なショッピング・カートEJBを作成して、EJB 3.0を使用した簡単なステートフルEJBの例を示します。

EJB 3.0を使用したステートフルSession Bean

 

次に、Cart EJBのリモート・インタフェースを示します。

 

これは、Pure Javaインタフェースで、 EJBObjectを拡張しません。

package oracle.ejb30;
                                    
import java.util.Collection; import javax.ejb.Remote; @Remote public interface Cart { public void addItem(String item); public void removeItem(String item); public Collection getItems(); }
Here is the code for the bean class. The EJB is a plain Java class that implements its business interface.
package oracle.ejb30;

import java.util.ArrayList;
import java.util.Collection;

import javax.ejb.PostConstruct;
import javax.ejb.Stateful;
                                     
@Stateful public class CartBean implements Cart { private ArrayList items; @PostConstruct public void initialize() { items = new ArrayList(); } public void addItem(String item) { items.add(item); } public void removeItem(String item) { items.remove(item); } public Collection getItems() { return items; } }

javax.ejb.Statefulアノテーションは、BeanをステートフルSession Beanとしてマークします。 Bean名は、デフォルトでCartBeanとなります。 このBeanは javax.ejb.SessionBeanを実装しないため、 javax.ejb.PostConstructアノテーションを使用して、initialize()メソッドにEJB 2.1 BeanのejbCreate()と同様のロールを割り当てます。

注:一部のEJB 3.0 APIは、EJB 3.0の最終仕様で変更される可能性があり、ご使用のアプリケーションをEJB 3.0最終仕様に適合させるための変更が必要な場合があります。 オラクルは、この仕様の最終版に適合する将来のバージョンのOracle Application Server Containers for J2EEについて、すべてのEJB 3.0機能の下位互換性を保証することはできません。

EJBクライアント

 

EJBクライアント・コードは、EJB 3.0で大幅に簡素化されています。 クライアントはJNDIからのEJBホーム・インタフェースの検索が不要になり、ホーム・インタフェースでcreateを起動して特別にBeanインスタンスを作成する必要がなくなりました。 クライアントは、依存性の注入を使用するだけで、EJBでメソッドを直接起動できます。

次に、EJBにアクセスするクライアント・コードのスニペットを示します。

public class CartClient {
 @EJB
                                    
private static Cart cart;
public static void main(String[] args) throws Exception { System.out.println("Adding items to cart"); cart.addItem("Item1"); cart.addItem("Item2"); System.out.println("Listing cart contents"); Collection items = cart.getItems(); for (Iterator i = items.iterator(); i.hasNext();) { String item = (String) i.next(); System.out.println(" " + item); } } }

前提条件

必須知識

ソフトウェア要件

このデモンストレーションでは、次のソフトウェア・コンポーネントがインストールされ、正しく構成されている必要があります。

表記法

  • %ORACLE_HOME% - Oracle Application Server 10g 10.1.3.1 Developer Previewをインストールしたディレクトリ
  • %JAVA_HOME% - 使用するJDKがインストールされているディレクトリ
  • %HOWTO_HOME% - デモンストレーションを解凍したディレクトリ

アプリケーションの構築

重要な構成ファイルはすべて %HOWTO_HOME%/etcにあります。application.xmlなどのデプロイメント・ディスクリプタ・ファイルなどです。

アプリケーションの実行

次の手順に従って、Oracle Application Server 10g 10.1.3のスタンドアロン・インスタンスでデモンストレーションを実行します。

How-toの配布物の確認

  • build - ビルド時に作成される一時ディレクトリ
  • log - ビルド/デプロイのログを保持する一時ディレクトリ
  • etc - アプリケーションをパッケージ化するのに必要なすべてのファイル
  • lib - 配置可能なアプリケーション・アーカイブを保持
  • doc - How-toドキュメントとJavadoc
    • javadoc - 異なるソース・ファイルのJavadoc
    • how-to-ejb30-sfsb.html - このHow-toページ
  • src - デモンストレーションのソース
    • ejb - ステートフルSession Beanのサンプル・コードの格納先
    • client - アプリケーション・クライアント・コードの格納先

環境の設定

環境の構成

次の環境変数が定義されていることを確認してください。

  • %ORACLE_HOME% - Oracle Containers for J2EEをインストールしたディレクトリ
  • %JAVA_HOME% - 使用するJDKがインストールされているディレクトリ
  • %PATH% - %ORACLE_HOME% /ant/binを含む

Oracle Application Server 10g 10.1.3.1の起動

以上を変更した後に、次のコマンドを使用してOracle Containers for J2EEをスタンドアロンで起動します。

>%ORACLE_HOME%/bin/oc4j -start

Oracle Application Server管理インストールを使用している場合、上記の変更後に次のコマンドを使用します。

> %ORACLE_HOME%/opmn/bin/opmnctl startall

4. アプリケーションの生成、コンパイル、および配置

Ant 1.6.2はOracle Containers for J2EEに同梱されており、 PATH環境変数を $ORACLE_HOME/ant/binに設定する必要があります。 オペレーティング・システムによっては、現在はAntが環境変数をサポートしていないものがあります。 該当するオペレーティング・システムの場合は、 %HOWTO_HOME% ディレクトリにあるant-oracle.xmlを修正してください。

demo directoryのant-oracle.propertiesを編集し、 次のOracle Containers for J2EEスタンドアロンで示されているとおりに、プロパティに正しい値が設定されていることを確認してください。

  • oc4j.host:Oracle Containers for J2EEが稼働しているホスト (デフォルトはlocalhost)
  • oc4j.admin.port:RMIポート番号(デフォルトは23791)
  • oc4j.admin.user:管理ユーザー名(デフォルトはoc4jadmin)
  • oc4j.admin.password:管理ユーザーのパスワード(デフォルトはwelcome)
  • oc4j.binding.module:配置したWebモジュールがあるWebサイト名(デフォルトはhttp-web-site)

Oracle Application Server管理インストールを使用している場合、Oracle Application Serverのインストールにおいて管理されているOracle Containers for J2EEインスタンスの oc4j.admin.userおよび oc4j.admin.password以外の変更については、次のプロパティを変更します。

  • opmn.host:Oracle Application Serverが稼働しているhostname/IP (デフォルトはlocalhost)
  • opmn.port:Oracle Application Serverインストール時のOPMNリクエスト・ポート(デフォルトは6003)
  • oc4j.instance:管理ユーザー名(デフォルトはoc4jadmin)

環境に応じて、ant-oracle.propertiesのdeployer.uriを適切にコメントアウトする必要があります。たとえば、OPMNの管理する単一のOracle Containers for J2EEインスタンスやクラスタ化されたOracle Containers for J2EEインスタンス/グループなどです。

環境に合わせて、 jndi.propertiesのprovider.url、principalおよびcredentialの変更が必要です。 Oracle Application Serverインストールを使用している場合は、provider.urlを次の形式で使用してください。 opmn:ormi://localhost:6003:home/ejb30sfsb.

アプリケーションの構築

トップレベルの %HOWTO_HOME%ディレクトリに次のコマンドを入力します。

>ant

これで、 %HOWTO_HOME%/libディレクトリ内に ejb30sfsb.earが新しく作成されます。

構築に成功すると、このコマンドはアプリケーションをデプロイするよう試みます。 まず、OC4Jが稼働しているかをテストします。

アプリケーションのデプロイ

次のコマンドを使用して、アプリケーションを個別にデプロイすることもできます。 %ORACLE_HOME%環境変数が定義されていることを確認します。 トップレベルの %HOWTO_HOME%ディレクトリに次のコマンドを入力します。

>ant deploy

アプリケーションの実行

サンプルを次のように実行します。

>ant run

Oracle Containers for J2EEを起動したコンソールに戻ると、Cart EJBが生成した出力が表示されています。

まとめ

このドキュメントで学習した内容は、次のとおりです。

  • EJB 3.0を使用したステートフルSession Beanの開発方法
  • Oracle Application Server 10g 10.1.3.1での簡単なステートフルSession Beanの配置および実行