このデモ・アプリケーションでは、Oracle Application ServerのステートフルSession Beanに対するサポートと、EJB 3.0を使用したライフ・サイクル・イベントのコールバックについて説明します。 このデモ・アプリケーションでは、ステートフルEJBを使用して、EJB 3.0の新機能を紹介します。
EJB 3.0は、以前のバージョンで開発者が直面した様々な複雑性を排除することによって、EJBアプリケーションの開発を大幅に簡素化します。 EJB 2.1を使用して簡単なステートフルEJBを作成するには、Beanクラスと2つのインタフェース、デプロイメント・ディスクリプタが必要です。 コンポーネント・インタフェース(リモートまたはローカル、あるいは両方)およびホーム・インタフェースはそれぞれ
javax.ejb.EJBObjectと
javax.ejb.EJBHomeを拡張し、Beanクラスがは
javax.ejb.SessionBeanインタフェースを実装する必要がありました。
EJB 3.0では、それら多くの要件が次のように緩和されています。
- 簡単なJavaクラス(POJO)をBeanクラスに使用可能
- Pure Javaインタフェース(POJI)をEJBインタフェースに使用可能
- EJBホーム・インタフェースは不要
- XMLデプロイメント・ディスクリプタのかわりにアノテーションを使用可能
基本的なショッピング・カートEJBを作成して、EJB 3.0を使用した簡単なステートフルEJBの例を示します。
次に、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機能の下位互換性を保証することはできません。
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