EJB 2.xクライアントとの下位互換性をサポートするEJB 3.0の開発方法

日付:2006年6月12日
著者: Debu Panda

はじめに

このデモ・アプリケーションでは、Oracle Application Server 10g 10.1.3.1に対するEJB 3.0仕様へのサポート、EJBHomeのオプション使用に対するサポート、および古いEJB 2.xクライアントを分断せずにEJBコンポーネントをEJB 3.0に移行する方法について説明します。 ここでは、ステートフルEJBを例に説明します。

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インタフェースに使用できること
  • EJBHomeインタフェースが不要であること
  • 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();
}
                                

>次に、Beanクラスのコードを示します。 EJBは、ビジネス・インタフェースを実装する簡単なJavaクラスです。

                                   
                                     
package oracle.ejb30;
import java.util.ArrayList;
import java.util.Collection;
import javax.ejb.Init;
import javax.ejb.Stateful;

@Stateful
                                       
@RemoteHome(CartHome.class)
public class CartBean implements Cart {
private ArrayList items;

@Init
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;
        }
}
                                    
                                  
                                

@Init注釈で注釈されるメソッドはすべて、EJB 2.1クライアントがステートフルSession Beanインスタンスのcreateメソッドを起動すると起動します。 @RemoteHome(CartHome.class)注釈は、Beanのホーム・インタフェースをoracle.ejb30.CartHomeとしてマークします。

EJBクライアント

EJBクライアント・コードは、EJB 3.0では大幅に簡素化されます。 クライアントはJNDIからのEJBホーム・インタフェースの検索を必要とせず、ホーム・インタフェースのcreateを起動して特別にBeanインスタンスを作成する必要はありません。 クライアントは、EJBでメソッドを簡単に直接起動できます。

ただし、分散システムで使用されるEJBの場合は、すべてのアプリケーションにデプロイされたクライアント・コードの変更を適用する余裕がない場合があります。 したがって、EJBHomeオブジェクトの検索とcreateメソッドの呼び出しに基づいてBeanのインスタンスを取得する旧式のルックアップを使用した、既存のクライアント・コード・ベースのサポートが必要となる場合もあります。

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

                                   
public class CartClient {
public static void main(String[] args) throws Exception {
Context context = new InitialContext();
System.out.println("Looking up Cart");
CartHome cartHome = 

Cart cart = cartHome.create();


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をインストールしたディレクトリ
  • %JAVA_HOME% - 使用するJDKがインストールされているディレクトリ
  • %HOWTO_HOME% - デモンストレーションを解凍したディレクトリ

アプリケーションの構築

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

アプリケーションの実行

次の手順は、Oracle Application Server 10g 10.1.3. 1 のスタンドアロンのインスタンスでデモンストレーションを実行する方法です。

配布方法の確認

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

環境の設定

環境の設定

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

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

Oracle Application Server 10g 10.1.3.の起動

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

>%ORACLE_HOME%/bin/oc4j -start

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

> %ORACLE_HOME%/opmn/bin/opmnctl startall

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

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

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

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

IOracle Application Server管理インストールを使用している場合、Oracle Application Serverのインストールで管理されているOracle Containers for J2EE(OC4J)インスタンスの 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(OC4J)インスタンスやクラスタ化されたOC4Jインスタンス/グループなどです。

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

アプリケーションの構築

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

>ant

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

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

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

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

>ant deploy

アプリケーションの実行

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

>ant run

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

[java] Looking up Cart
[java] Adding items to cart
[java] Listing cart contents
[java]   Item1
[java]   Item2

まとめ

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

  • オプションのEJBHomeインタフェースのあるEJB 3.0を使用したステートフルSession Beanの開発
  • EJB 2.xクライアントとの互換性を分断せずにOracle Application Server 10g 10.1.3.1で簡単なステートフルSession Beanをデプロイおよび実行する方法