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

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

はじめに

このサンプル・アプリケーションでは、ステートレスSession EJBを使用したEJB 3.0仕様のオラクルによるサポートを実証し、EJBクライアントからの簡素化された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クラスに使用可能
  • 純粋なビジネス・インタフェース(POJI)をEJBインタフェースに使用可能
  • EJBホーム・インタフェースは不要
  • 専用のデプロイメント・ディスクリプタのかわりにアノテーションを使用可能

このデモンストレーションではHelloWorld Beanを例に、EJB 3.0を使用した簡単なステートレスEJBについて説明します。

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

EJB 3.0を使用したステートレスSession Beanの例

HelloWorld EJBのリモート・インタフェースを次に示します。 これは純粋なJavaインタフェースで、 EJBObjectを拡張しません。

                                   
                                     
package
oracle.ejb30; 
import javax.ejb.Remote;
                                       
@Remote
public interface HelloWorld 
{
public void sayHello(String name);
}
                                    
                                  
                                

Beanクラスは、ビジネス・インタフェースを実装する簡単なJavaクラスです。

                                   
                                     
package
oracle.ejb30;
                                      
import javax.ejb.Stateless; @Stateless public class HelloWorldBean implements HelloWorld { public void sayHello(String name) { System.out.println("Hello "+name +" from first EJB3.0"); }

Beanは、 @Statelessアノテーションを使用して、BeanをステートレスEJBとしてマークします。 @Remoteを使用してEJBのリモート・インタフェースとデプロイメント・ディスクリプタに注釈を付けることができますが、必須ではありません。

EJBクライアントのサンプル

EJBホーム・インタフェースが不要になり、Beanインスタンスはcreate()メソッドを起動しても作成されません。 かわりに、次のクライアント・アクセッサで示すように、依存性の注入を使用してBeanのインスタンスを注入し、EJBで直接メソッドを起動できます。

                                   
                                     
@EJB
private static HelloWorld helloWorld;
helloWorld.sayHello("Debu Panda" ); 
                                  
                                

前提条件

必須知識

アプリケーションのサンプルを完了させるには、以下を熟知している必要があります。

  • EJB 2.1
  • EJB 3.0

EJB 3.0の詳細は、OTNの次のドキュメントを参照してください。

ソフトウェア要件

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

表記法

  • %ORACLE_HOME% - Oracle Application Server 10g 10.1.3.1 Previewをインストールしたディレクトリ

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

アプリケーションの構築

このアプリケーションのJavadocは、 %HOWTO_HOME%/doc/javadoc/ディレクトリにあります。

構成ファイルは %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-slsb.html - このHow-toページ
  • src - デモンストレーションのソース
    • ejb - ステートレスSession Beanのサンプル・コードの格納先
    • client - アプリケーション・クライアント・コードの格納先

2. 環境の設定

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

  • %ORACLE_HOME% - Oracle Containers for J2EEをインストールしたディレクトリ
  • %JAVA_HOME% - JDKをインストールしたディレクトリ
  • %PATH% - %ORACLE_HOME% /ant/binを含む

3. Oracle Containers for J2EEインスタンスの起動

以上を変更した後に、次のコマンドを使用して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を修正してください。

デモ・ディレクトリにある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が稼働しているホストの名前/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/ejb30slsb.

アプリケーションを構築するには、 %HOWTO_HOME%ディレクトリで次のコマンドを入力します。

                                   
                                     
>ant
                                  
                                

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

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

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

                                   
                                     
>ant deploy
                                  
                                

5. アプリケーションの実行

次のコマンドを実行してサンプルを実行します。名前をプログラム引数として使用します。

                                   
                                     
>ant run
                                  
                                

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

まとめ

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

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