EJB 3.0およびJDK 1.4を使用したステートレスSession EJBの開発方法

日付:2005年1月18日
著者:Jason Haley

はじめに

このサンプル・アプリケーションでは、JDK 1.4環境でのEJB 3.0仕様に対するオラクルのサポートについて説明します。 アノテーションはJDK 1.5のみで使用可能なため、xmlのみでデプロイするさまざまな機能の構成方法について説明します。 ここでは、次の事項について紹介します。

  • スパースなejb-jar.xmlファイル
  • EJB参照のフィールドおよびプロパティの注入方法
  • 環境エントリのフィールドおよびプロパティの注入方法
  • ライフ・サイクル・コールバックの宣言方法

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

EJB 3.0およびJDK 1.4を使用したステートレスSession Beanの例

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

package oracle.ejb30;
public interface WeatherReport {
    public String getTemperatorFor(String cityName);
    public String getTemperatorFor(String cityName, boolean celcius);
}

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

package oracle.ejb30;
public class WeatherReportBean implements WeatherReport {
    protected Map weatherMap;
    // both Strings are configured for injection in the ejb-jar.xml file
    private String celciusString;
    private String fahrenheitString;
    private TemperatureConverter temperatureConverter;

    . . .

    public String getTemperatureFor(String cityName) {
        return getTemperatureFor(cityName, false);
    }

    public String getTemperatureFor(String cityName, boolean celcius) {
        . . .
    }

    // this setter is configured for injection in the ejb-jar.xml file
    public void setTemperatureConverter(TemperatureConverter converter) {
        this.temperatureConverter = converter;
    }
}

WeatherReportEJBのコールバック・リスナー・クラスを次に示します。

package oracle.ejb30;
public interface LifecycleListener {
    public void initializeWeatherData(Object obj) {
        . . .
    }
}

このクラスはアノテーションを使用せず、かわりに簡単なデプロイメント・ディスクリプタを使用します。

次に、簡素化されたデプロイメント・ディスクリプタの内容を示します。 これには、EJB名、Beanクラス、リモート/ローカル・インタフェース、セッションの種類、注入された参照およびコールバック・リスナーが含まれます。 残りはデフォルトです。

<ejb-jar>
  <enterprise-beans>
    <session>
      <ejb-name>WeatherReport</ejb-name>
      <remote>oracle.ejb30.WeatherReport</remote>
      <ejb-class>oracle.ejb30.WeatherReportBean</ejb-class>
      <session-type>Stateless</session-type>
      <ejb-local-ref>
        <ejb-ref-name>ejb/TemperatureConverter</ejb-ref-name>
        <local>oracle.ejb30.TemperatureConverter</local>
        <property>temperatureConverter</property>
      </ejb-local-ref>
      <env-entry>
        <env-entry-name>CelsiusString</env-entry-name>
        <env-entry-type>java.lang.String</env-entry-type>
        <env-entry-value>degrees Celsius</env-entry-value>
         <field>celciusString</field>
      </env-entry>
      <env-entry>
        <env-entry-name>FahrenheitString</env-entry-name>
        <env-entry-type>java.lang.String</env-entry-type>
        <env-entry-value>degrees Fahrenheit</env-entry-value>
         <field>fahrenheitString</field>
      </env-entry>
       <lifecycle-callbacks>
        <callback-listener>oracle.ejb30.LifecycleListener</callback-listener>
        <post-construct>initializeWeatherData</post-construct>
      </lifecycle-callbacks>

    </session>
    <session>
      <ejb-name>TemperatureConverter</ejb-name>
      <local>oracle.ejb30.TemperatureConverter</local>
      <ejb-class>oracle.ejb30.TemperatureConverterBean</ejb-class>
      <session-type>Stateless</session-type>
    </session>
  </enterprise-beans>
</ejb-jar>

以下の点に注意してください。

  • 参照注入の <field>タグおよび <property>タグは、仕様で正式に定義されておらず、変更される可能性があります。
  • <field>タグおよび <property>タグの値は、注入されるBeanのフィールドおよびセッターに対応します。
  • <lifecycle-callbacks>タグおよびサブタグは、仕様で正式に定義されておらず、変更される可能性があります。
  • Bean自体のライフ・サイクル・コールバックを宣言する場合は、 <callback-listener>タグを省略してください。
  • サポートされているライフ・サイクル・タグは、 <post-construct><pre-destroy><post-activate><pre-passivate>で、使用されるタグは各Beanに1つの<lifecycle-callbacks>のサブタグとして表示されます。
  • xmlでのインターセプタの構成例は、インターセプタのHow-Toで参照できます。
  • TemperatureConverterは、ステートレスSession Beanのデプロイに最低限必要なxmlを示します。

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

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

Context context = new InitialContext();
System.out.println("Looking up WeatherReport");
WeatherReport report = (WeatherReport)context.lookup("java:comp/env/ejb/WeatherReport");
System.out.println(weatherReport.getTemperatureFor("Las Vegas"));
System.out.println(weatherReport.getTemperatureFor("Ottawa", true));

前提条件

必須知識

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

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

ソフトウェア要件

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

表記法

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

アプリケーションの構築

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

アプリケーションの実行

Oracle Application Server EJB 3.0 Previewのスタンドアロンのインスタンスでアプリケーションのサンプルを実行するには、次の手順に従ってください。

1. サンプルのファイル・ディレクトリの検証

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

2. 環境の設定

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

  • %ORACLE_HOME% - Oracle Containers for J2EE(OC4J)がインストールされているディレクトリ
  • %JAVA_HOME% - JDKがインストールされているディレクトリ

3. Oracle Application Server EJB 3.0 Previewの起動

Oracle Application Server EJB 3.0 Previewコンテナが実行中である必要があります。 次のコマンドを使用して起動します。

>%ORACLE_HOME%/bin/ejb30 -start

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

Ant 1.6.2以上がマシンにインストールされ、正しく構成されていることを確認します。 オペレーティング・システムによっては、現在はAntが環境変数をサポートしていないものがあります。 該当するオペレーティング・システムの場合は、%HOWTO_HOME%ディレクトリにあるcommon.xmlファイルを修正してください。

demo directoryのant-oracle.propertiesを編集し、次に示すとおりに、プロパティに正しい値が設定されていることを確認してください。

  • 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)

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

>ant

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

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

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

>ant deploy

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

次のコマンドを実行することにより、サンプルを実行します。このコマンドは、名前をプログラム引数として含みます。

>ant run

クライアントから次の出力が確認できます。

                                   

[java] Looking up WeatherReport
[java] 60.0 degrees Fahrenheit
[java] 53.0 degrees Fahrenheit
[java] 18.0 degrees Fahrenheit
[java] -7.777777777777778 degrees Celsius
[java] No weather data available for LasVegas

まとめ

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

  • EJB 3.0を使用したステートレスSession Beanの開発およびデプロイとxmlのみによる構成
  • JDK 1.4を実行中のOracle Application Server EJB 3.0 Previewでの簡単なステートレスSession Beanのデプロイおよび実行