はじめに
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ディレクトリにあります。
アプリケーションの実行
アプリケーションが配置されたので、実際に試してみましょう。
使用例は簡単です。 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のプロパティとメソッドすべてにアクセスできます。