How To: Oracle Containers for J2EE(OC4J)でのSpringサポートの説明

はじめに

Spring Frameworkは、高品質のアプリケーションを迅速かつ簡単に作成できる主要アプリケーション・フレームワークです。 Springはアプリケーション・サーバーによって提供される補完的Java Enterprise Edition(Java EE)サービスを使用して、そのサービス上で実行されるよう設計されています。 これらのサービスには、データベース接続、トランザクション管理(JTA)、Webサービス、メッセージング(JMS)、永続性(JPA)およびアプリケーション管理があります。

Springアプリケーションは、おもにエンタープライズ・クラスのアプリケーションに必要なサービスとAPIを提供する、Java EEに完全準拠したコンテナに頻繁に配置されます。 オラクルでは、SpringベースのアプリケーションがOC4Jサーバーでシームレスに配置および実行されるよう、多くのリソースを投入してきました。

このHow-Toでは、Spring Framework Oracle Containers for Java EE(OC4J)10.1.3.2上に構築されたアプリケーションのサポートについて説明します。 特に、OC4J上でSpringベースのアプリケーションを簡単に配置および実行する方法と、OC4Jで提供されるSpringの統合についても説明します。

このHow-Toは、次の2つのアプリケーションから構成されています。

  • SRDEMO。Spring 2.0で書き換えられたOC4J 10.1.3のユーザーにはおなじみのサンプル・アプリケーションです。 このアプリケーションを使用すると、JavaServer Faces(JSF)ベースのユーザー・インタフェースを通じて、サービス・リクエストの作成と追跡が行えます。 新しいリクエストは、グローバル・トランザクションの一部としてデータベースとJMSキューの両方に書き込まれます。

  • SRJMSDEMO。JMSキューに書き込まれたサービス・リクエストを表示できるJava EEアプリケーションです。 このアプリケーションは、EJB 3.0 Message-Driven Bean (MDB)を使用して、キューからメッセージを取得します。

SRDEMOでのSpringの使用方法

SRDEMOアプリケーションは、複数のレイヤーで構成されます。レイヤーには、JSFベースのプレゼンテーション・レイヤー、Spring Beanに完全に基づくサービス・レイヤー、およびデータ・アクセスを含む永続レイヤーがあります。

プレゼンテーション・レイヤー

SRDEMOのプレゼンテーション・レイヤーは、SpringのWeb MVCフレームワークを使用します。 このフレームワークは他の多くのWeb MVCフレームワークと同様、リクエスト駆動型で、リクエストをコントローラにディスパッチしてWebアプリケーションの開発を促進するその他の機能を提供する中央サーブレットを中心に設計されています。 アプリケーションにより使用されるSpring MVC Beanは、srdemo-servlet.xmlファイルに定義されています。このファイルは、SRDEMOソースのsrdemo/war/WEB-INFディレクトリにあります。

元のSRDEMOアプリケーションのプレゼンテーション・レイヤーは、JavaServer Faces(JSF)に基づいています。 SpringはJSFとの包括的な統合に必要なグルー・コードを提供するため、既存のフレームワークがSpringと連動するように適合させるのは非常に簡単です。

サービス・レイヤー

サービス・レイヤーは、Plain Old Java ObjectsまたはPOJOのみで構成されるSpring Bean上に構築されています。 ビジネス・オブジェクトは、統合層の一部であるSpringのデータ・アクセス・オブジェクト(DAO)やSpring Beanを起動します。

アプリケーションで使用されるビジネス・オブジェクトおよびデータ・オブジェクトのSpring Beanはどちらも、Springアプリケーション・コンテキスト構成(applicationContext.xml)で定義されています。これもSRDEMOソースの/warディレクトリで確認できます。 このファイルは、SRDEMO Webアプリケーションのコンテキストを定義しています。

このファイルを見れば、このBeanの定義を確認できます。

<bean id="transactionManager" class="org.springframework.transaction.jta.OC4JJtaTransactionManager"/>

この定義は、OC4JJtaTransactionManager Beanのインスタンスを作成します。これは、Springスタック内のOC4J固有の実装で、OC4Jトランザクション・マネージャへの迅速な直接アクセスを提供します。 OC4Jのトランザクション管理インフラストラクチャの最上位にあるSpringのトランザクション抽象化レイヤーの使用により、SRDEMOアプリケーションでグローバル・トランザクション、つまり複数リソース(この場合はOracleデータベースとJMSキュー)を伴うトランザクションを作成できます。

永続レイヤー

SRDEMOの永続レイヤーはTopLink Essentialsを使用します。これは、Spring 2.0.x配布パッケージに含まれるJava Persistence API(JPA)のリファレンス実装です。 このアプリケーションでは、TopLinkエンティティ・マネージャBeanがSpring DAO Bean(org.srdemo.model.dao.SRDemoDAO)に直接投入されます。 TopLinkエンティティ・マネージャBeanは、persistence.xmlで定義されたEntityManagerFactoryにより作成されます。これは、SRDEMOソースの/src/META-INFディレクトリにあります。

前提条件

必須知識

アプリケーションのサンプルをより良く理解するためには、以下を熟知している必要があります。

  • Spring Framework 2.0
  • EJB 3.0
  • Servlet 2.5

SpringおよびOracle Containers for J2EE(OC4J)の詳細は、次のウェブサイトを参照してください。

ソフトウェア要件

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

オプションで、 Oracle Application Server 10g Release 3(10.1.3.2.0) のHow-Toを実行できます。 既存の10.1.3.0または10.1.3.1アプリケーション・サーバー・インストールを10.1.3.2バージョンにアップグレードする場合は、パッチ5906151をhttp://metalink.oracle.comから入手できます。

必要なSpring 2.0.4ライブラリおよび必要な依存性はすべて、How-Toソースにパッケージされています。

表記法

  • %ORACLE_HOME% - Oracle Containers for J2EE(OC4J)をインストールしたディレクトリ(例:C:\oc4j10132)
  • %JAVA_HOME% - JDK 1.5をインストールしたディレクトリ
  • %HOWTO_HOME% - How-Toファイルを解凍したディレクトリ

アプリケーション配置の準備

Oracle Containers for Java EE 11 Technology Previewのスタンドアロンのインスタンスでアプリケーションのサンプルを実行するには、次の手順に従ってください。

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

  • etc - アプリケーションをパッケージ化するのに必要なすべてのファイル
  • sharedlib - 共有ライブラリとして配置するJAR
  • scripts - SRDEMOスキーマとSRJMSDEMOスキーマを作成するSQLスクリプト
  • doc - How-Toドキュメント
  • srjdemoおよび srjmsdemo - 2つのアプリケーションのソース
    • dist - 各アプリケーション用に生成されたEARファイルおよびWARファイルの格納先
    • etc - デプロイメント・ディスクリプタおよび構成ファイル
    • lib - 必要なすべてのライブラリ
    • src - アプリケーション・ソース
    • war - Webモジュール・インフラストラクチャ

2. 環境の設定

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

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

3. データベースの構成

SRDEMOスキーマの作成

  • コマンド・プロンプトを開いて、HOWTO_HOME%/dbsetup/srdemoディレクトリへ移動します。
  • sys/welcome@XEなどの、適切な権限を持つユーザーとしてSQL*Plusに接続します。
  • build.sqlを実行します。

SRJMSDEMOスキーマの作成

  • コマンド・プロンプトを開いて、HOWTO_HOME%/dbsetup/srjmsdemoディレクトリへ移動します。
  • SRDEMOスキーマの作成手順を繰り返します。

4. Java Message Service(JMS)の構成

この例では、Oracle Containers for J2EE(OC4J)JMSプロバイダを使用します。 oc4jjmsリソース・プロバイダがORACLE_HOME%/j2ee/home/config/application.xmlでコメントアウトされていることを確認します。

リソース・アダプタの構成

OracleASjmsリソース・アダプタが%ORACLE_HOME%/j2ee/home/config/oc4j-connectors.xmlでコメントアウトされていることを確認します。

Oracle Containers for J2EE(OC4J)の実行中は、インスタンスを停止後再起動して、これらの構成変更を有効にします。

5. Oracle Containers for J2EE(OC4J)サーバーの起動

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

  • %ORACLE_HOME%/j2ee/homeディレクトリへ移動します。
  • 次のコマンドを入力します。

    >java -Xmx1024m -XX:MaxPermSize=128m -jar oc4j.jar

アプリケーション稼働中のメモリ不足問題を回避するため、ヒープ・サイズおよびPermGenサイズを設定してください。

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

> %ORACLE_HOME%/opmn/bin/opmnctl startall

5. Oracle Containers for J2EE(OC4J)への必要な共有ライブラリのインストール

SRDEMOおよびSRJMSDEMOはともにsrdemo_common_lib.jarを使用します。JARを各アプリケーションとパッケージ化せずに、Oracle Containers for J2EE(OC4J)に共有ライブラリを作成します。 いずれのアプリケーションも、このライブラリをorion-application.xmlデプロイメント・ディスクリプタのimport-shared-library定義によりインポートするよう構成されます。

Application Server Controlを使用して、Oracle Containers for J2EE(OC4J)に共有ライブラリ定義を簡単に作成し、ライブラリJARをサーバーにアップロードできます。

  • Application Server Controlを起動します。
  • Administration」タブをクリックします。
  • Shared Libraries」アイコンをクリックします。
  • Create」ボタンをクリックします。
  • 共有ライブラリ名にSRDemoSharedLibと入力します。
  • バージョンに1.0と入力します。
  • Add」ボタンをクリックし、HOWTO_HOME%/sharedlibディレクトリのsrdemo_common_lib.jarへ移動します。

6. データソースの構成

アプリケーションには、配置を可能にするプリパッケージのデータソースが含まれます。 ただし、アプリケーションを使用するには、データソースがデータベースに接続するよう修正する必要があります。

SRDEMOデータソースの構成

  • Application Server Controlを起動します。
  • Administration」タブをクリックします。
  • JDBC Resources」アイコンをクリックします。
  • Application」プルダウン・メニューから「 SRDEMO」を選択します。
  • SRDemoConnPool」リンクをクリックします。
  • URLを更新して、使用するデータベースを指します。 以下に例をあげます。 jdbc:oracle:thin:@localhost:1521/XE
  • Apply」ボタンをクリックします。

SRJMSDEMOデータソースの構成

  • Administration」タブをクリックします。
  • JDBC Resources」アイコンをクリックします。
  • Application」プルダウン・メニューから「 SRJMSDEMO」を選択します。
  • SRJMSDemoConnPool」リンクをクリックします。
  • URLを更新して、使用するデータベースを指します。 以下に例をあげます。 jdbc:oracle:thin:@localhost:1521/XE
  • Apply」ボタンをクリックします。

構成の変更を有効にするには、Oracle Containers for J2EE(OC4J)を停止して再起動する必要があります。

アプリケーションの構築と配置

各アプリケーションのソースには、配置可能なEARファイルを生成してOracle Containers for J2EE(OC4J)サーバーに配置するAntビルド・ファイルが含まれます。

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

ORACLE_HOME変数がOracle Containers for J2EE(OC4J)インストールのルート・ディレクトリに設定されていることを確認します。

1. SRDEMOアプリケーションの構築と配置

  • %HOWTO_HOME%\srdemo\ディレクトリへ移動します。
  • ant-properties.oracleファイルを開きます。
  • oc4j.admin.passwordプロパティがoc4jadminパスワードに設定されていることを確認します。
  • プロンプトに、次のコマンドを入力します。
    ant all

正しく実行された場合、SRDEMO.earファイルが\distディレクトリに作成されて、Oracle Containers for J2EE(OC4J)に配置されます。

2. SRJMSDEMOアプリケーションの構築と配置

  • %HOWTO_HOME%\srjmsdemo\ディレクトリへ移動します。
  • SRDEMOの配置手順を繰り返します。

正しく実行された場合、SRJMSDEMO.earファイルが\distディレクトリに作成されて、Oracle Containers for J2EE(OC4J)に配置されます。

アプリケーションの実行

アプリケーションが配置されたので、実際に試してみましょう。

使用例は簡単です。 SRDEMOを使用して、サービス・リクエストを作成し、技術者に割り当てます。 次に、技術者としてSRJMSDEMOにログインし、新しいサービス・リクエストを取得します。

サービス・リクエストを作成すると、詳細とJMSキューがグローバル・トランザクションの一部としてデータベースに書き込まれます。 実際には次のことが可能です。

まず、次のURLのSRDEMO Webアプリケーションにアクセスします。 http://localhost:8888/srdemo

  • sking/welcomeとしてログインします。 このユーザーにはManagerロールが割り当てられています。
  • Create a New Service Request」をクリックします。
  • 新しいサービス・リクエストを作成し、作成が終了したら「 Home」リンクをクリックします。
  • 次に、サービス・リクエストを技術者に割り当てます。 「 Triage Service Request」をクリックします。
  • "David Austin"を選択し、「 Assign Technician」をクリックします。

リクエストの詳細がコンソールのJMSメッセージとして送信されたことが確認できます。 また、新しいリクエストが、グローバル・トランザクションの一部としてデータベースに書き込まれます。

次のURLのSRJMSDEMO Webアプリケーションにアクセスします。 http://localhost:8888/srjmsdemo

  • 先ほどリクエストを割り当てた技術者、daustin/welcomeとしてログインします。
  • View Service Requests」をクリックします。

JMSキューから取得したリクエストの詳細を確認できます。

Spring BeanをMBeanとして公開

Spring Frameworkには、Spring Beanを管理リソース(MBeans)としてJMX環境で動的に公開するためのサポートが含まれます。 JMXインフラストラクチャに構築されたApplication Server Control管理コンソールによりMBeanブラウザが提供されます。これを使用すると、Oracle Containers for J2EE(OC4J)の管理に使用されるシステムMBeanの公開に加え、個々のアプリケーションで定義されたMBeanへのアクセスが可能となります。

SpringアプリケーションのapplicationContextに少し変更を加えるだけで、アプリケーションで定義されたSpring BeanにApplication Server Controlを通じて直接アクセスできます。

SRDEMOに定義されたapplicationContext.xmlで、MBeanServerを作成する以下の表記法を確認できます。

<bean id="testMBeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean">
<property name="defaultDomain">
<value>testMBeanServer</value>
</property>
</bean>

すぐ下に、transactionManager BeanをMBeanとして公開する別のスニペットが確認できます。

<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">">
<property name="beans">
<map> <entry key="bean:name=transactionManager" value-ref="transactionManager" />
</map>
</property>
</bean>

次に、Application Server Controlにログインします。

  • Applications」タブをクリックして、次にSRDEMO行の「 Application-defined MBeans」アイコンをクリックします。
  • 左側のツリーの「 node」を開き、次に「 transactionManager」Beanをクリックします。 これで、JMX属性およびオペレーションとして、transactionManager Beanのプロパティとメソッドすべてにアクセスできます。

まとめ

この例で学習した内容は、次のとおりです。

  • Springベースのアプリケーションがいかに簡単にOracle Containers for Java EEに配置できるかについての概要