Oracle® Fusion Middleware

Oracle WebLogic Server Springアプリケーションの開発と管理

12c (12.2.1.1.0)

E79379-01(原本部品番号:E78183-01)

2016年8月

このドキュメントでは、WebLogic ServerでのSpringのサポート、Spring拡張とSpringコンソール拡張の有効方法、およびWebLogic ServerのためSpringアプリケーションの開発について説明します。

Oracle Fusion Middleware Oracle WebLogic Server Springアプリケーションの開発と管理, 12c (12.2.1.1.0)

E79379-01

Copyright © 2007, 2016, Oracle and/or its affiliates.  All rights reserved.

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

目次

タイトルおよび著作権情報

はじめに

- ドキュメントのアクセシビリティについて

- 表記規則

1 概要とロードマップ

- ドキュメントのスコープと対象読者

- このドキュメントの手引き

- 関連ドキュメント

- Springアプリケーション開発の例

- WebLogic ServerでのSpring Frameworkのサポート

- このリリースでの新機能と変更された機能

2 Springアプリケーションの構成の簡略化

3 WebLogic Springセキュリティ統合

- Springコンテナ・アダプタによる統合

- applicationContext-acegi-security.xmlをweb.xmlにプラグインする方法

4 WebLogic ServerのSpringコンソールの拡張

5 WebLogic Serverのクラスタリングの使用

6 WebLogic ServerへのSpring依存関係インジェクションの拡張

7 SpringベースのOracle WebLogic Serverアプリケーションの開発

- Springの制御の反転の構成

- SpringのWebサービス・クライアント・サービスの有効

- JMSサービスを実行時にアプリケーションで利用可能

- JPAデータ・アクセスの使用

- トランザクション管理のためにSpringトランザクション抽象化レイヤーの使用

はじめに

ここでは、このガイド(Oracle WebLogic Server Springアプリケーションの開発と管理)で使用されるドキュメントのアクセシビリティ機能と表記規則について説明します。

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイトhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=docaccを参照してください。

Oracleサポートへのアクセス

サポートをご購入のOracleのお客様は、My Oracle Supportにアクセスして電子サポートを受けることができます。詳細情報はhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=infoか、聴覚に障害があるお客様はhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=trsを参照してください。

表記規則

このドキュメントでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

斜体

イタリックは、ユーザーが特定の値を指定するプレースホルダー変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

1 概要とロードマップ

この章では、このガイド(Oracle WebLogic Server Springアプリケーションの開発と管理)の内容と構成について説明します。

WebLogic Serverでは、オープン・ソースのSpringプロジェクトがJava EEアプリケーションに使用されているときにサポートします。このドキュメントでは、Java EEアプリケーション内で使用するWebLogicによってサポートされているSpring機能について説明します。WebLogic Serverでは、SpringSourceの一切の商品をサポートしていません。

この章の内容は次のとおりです。

- ドキュメントのスコープと対象読者

- このドキュメントの手引き

- 関連ドキュメント

- Springアプリケーション開発の例

- WebLogic ServerでのSpring Frameworkのサポート

- このリリースでの新機能と変更された機能

ドキュメントのスコープと対象読者

このドキュメントは、Springアプリケーションを開発する開発者およびSpringアプリケーションを構成およびモニターする管理者を対象読者としています。

このマニュアルは、WebLogic ServerおよびJava EEアプリケーションの開発に精通している読者を対象としています。

このドキュメントの手引き

- この項、概要とロードマップでは、このドキュメントの構成を紹介します。

- Springアプリケーションの構成の簡略化では、特別な構成をしなくても依存関係インジェクションのために使用できる事前構成済MBeansについて説明します。

- WebLogic Springセキュリティ統合では、WebLogic Serverのセキュリティ・フレームワークとともにSpringのセキュリティ・フレームワークを使用する方法について説明します。

- WebLogic ServerのSpringコンソール拡張では、WebLogic Server管理コンソールでSpring拡張を有効にする方法について説明します。

- WebLogic Serverのクラスタリングの使用では、Springアプリケーションに対するWebLogic Serverのクラスタリングの活用方法について説明します。

- WebLogic ServerへのSpring依存関係インジェクションの拡張では、WebLogic ServerでSpringサポートを有効にする方法について説明します。

- SpringベースのOracle Weblogic Serverアプリケーションの開発では、WebLogic ServerのためのSpringアプリケーションを開発する方法の例を示します。

関連ドキュメント

Springの関連ドキュメントおよびSpring Frameworkに関する他の情報については、http://www.springsource.com/を参照してください。

WebLogic Serverアプリケーションを開発、デプロイ、およびモニターするための包括的なガイドラインについては、以下のドキュメントを参照してください。

- 『Oracle WebLogic Serverアプリケーションの開発』は、WebLogic Serverアプリケーションの開発ガイドです。

- 『Oracle WebLogic Serverへのアプリケーションのデプロイ』は、WebLogic Serverアプリケーションのデプロイに関する主な情報をまとめたガイドです。

- 『Oracle WebLogic Serverのパフォーマンスのチューニング』は、WebLogic Serverアプリケーションのパフォーマンスを監視して改善するための情報が記載されています。

Springアプリケーション開発の例

このドキュメントの他にも、Springを使用して開発したサンプル・アプリケーションを提供します。これは、元のMedRecサンプル・アプリケーションに基づくAvitek Medical Records (または、MedRec)のSpringバージョンですが、Spring Frameworkを使用して、再実装されています。これは、SpringおよびWebLogicのさまざまの側面を簡潔に説明するOracle WebLogic Serverのサンプル・アプリケーション・スイートです。

このリリースのWebLogic Serverでは、コード・サンプルおよびMedRecサンプル・アプリケーションはデフォルトでインストールされません。サンプルとサンプル・アプリケーションを実行するには、WebLogic Serverのカスタム・インストールを選択し、インストールするサーバー・サンプルを選択する必要があります。

WebLogic ServerでのSpring Frameworkのサポート

WebLogic Serverでは、Spring Frameworkバージョン3.0.x、3.1.x、4.0.xおよび4.1.xを使用する場合(バージョン3.2.xはサポート対象外)、このドキュメントで説明するWebLogic Server/Spring統合機能がサポートされています。

このドキュメントで説明する統合機能が使用されていないWebLogic Serverアプリケーションでは、WebLogic Serverアプリケーションに他のオープン・ソース・テクノロジが使用されている場合と同様の方法で、Springの他のバージョンも使用できます。その場合、OracleはWebLogic Server/Spring統合機能はサポートしませんが、WebLogic Server自体はサポートし、WebLogic Serverがドキュメントに記載されている機能を提供しない場合の問題の解決を支援します。

このリリースでの新機能と変更された機能

このリリースで導入された新しいWebLogic Server機能の一覧については、『Oracle WebLogic Serverの新機能』 12.2.1を参照してください。

2 Springアプリケーションの構成の簡略化

この章では、Springアプリケーションを構成して、WebLogic Server リソースを使用する方法について説明します。

Springアプリケーションに対してWebLogic Serverリソースを使用するには、アプリケーション用に多数の構成を指定する必要があります。WebLogic Serverは、アプリケーションがSpringアプリケーションであることを検出し、最適なパフォーマンスが得られるようにこれらの構成を自動的に作成します。アプリケーション・コンテキストがアプリケーションの起動時に作成される場合、WebLogic Serverは事前定義済みリソースを含む親コンテキストを自動的に作成します。アプリケーションのコンテキストをこのコンテキストの子にすることで、すべてのリソースがアプリケーションで利用可能になり、明示的な構成は必要ありません。

Spring構成ファイルWL_HOME\server\lib\SpringServerApplicationContext.xmlには、デフォルト設定が指定されており、それがユーザーのニーズを満たすかどうかをレビューできます。必要に応じて、これらの設定は、使用するアプリケーション・コンテキストにオーバーライドできます。

デフォルトの設定は以下のとおりです。

- デフォルトのトランザクション・マネージャはWebLogicJtaTransactionManagerです。

- WebLogic Serverの実行時MBeanサーバーは、Spring JMXに対して自動的に構成されます。

- WebLogic Serverに定義されたServerリソースは、Spring beansとして自動的に公開されます。

3 Weblogic Springセキュリティ統合

この章では、WebLogic Serverのセキュリティ・システムとともにSpringのセキュリティ・フレームワークを統合する方法について説明します。

WebLogic Serverセキュリティ・システムでは、Java EEセキュリティがサポートおよび拡張され、様々なセキュリティ・データベースまたはセキュリティ・ポリシーと統合するようカスタマイズできるセキュリティ・プロバイダが豊富に用意されています。

Spring Security Webサイト(http://static.springsource.org/spring-security/site/)に記述されているように、Acegi Securityは現在はSpring Securityであり、Spring Portfolioの公式のセキュリティ・プロジェクトです。Spring Security (acegi)のフレームワークは、Springアプリケーションにセキュリティを提供し、豊富なセキュリティ・プロバイダを含みます。

問題は、2つのセキュリティ・フレームワークをどうやって統合するかです。

Java EEとSpringアプリケーションを統合すると、両方のセキュリティ・フレームワークを使用した認証は必要なくなり、WLSセキュリティとSpringセキュリティが連携します。WLSセキュリティが、セキュリティ・レルムのデフォルトの認証プロバイダで認証を処理し、マッパー・クラスを使用してWLSプリンシパルをSpring GrantedAuthorityプリンシパルに変換します。ユーザーはWLSセキュリティによって認証されると、Springセキュリティに対して認証されます。したがって、アプリケーション内のオブジェクトを保護する方法を決定できます。一般的なのは、Java EEリソースをWebLogicセキュリティで保護し、SpringリソースをSpringセキュリティで保護する方法です。

Springコンテナ・アダプタによる統合

Spring Securityのリファレンスでも説明されているように、コンテナ・アダプタを使用することで、エンド・ユーザー・アプリケーションをホストするコンテナ(この場合はWebLogic Server)に直接Spring Securityを統合できます。

コンテナとSpring Securityは、アダプタを介して統合されます。アダプタは、コンテナと互換性のあるユーザー認証プロバイダを提供し、コンテナと互換性のあるユーザー・オブジェクトを返す必要があります。

applicationContext-acegi-security.xmlはSpringセキュリティの構成ファイルです。Weblogic Serverでは、applicationContext-acegi-security.xml内のフィールドのリストに、WeblogicAuthenticationFilterが追加されています。このフィルタは、マッパーに基づいてWebLogicプリンシパルをSpring GrantedAuthorityサブジェクトに変換するために使用します。マッパーは、WeblogicAuthenticationFilterのプロパティとして構成するもので、作成時に注入されます。

次に、マッパー・クラスの例を示します。

public class MyAuthorityGranter implements AuthorityGranter {
public Set grant(Principal principal) {
Set rtnSet = new HashSet();
if (principal.getName().equals("fred@oracle.com")) {
rtnSet.add("ROLE_SUPERVISOR");
rtnSet.add("IS_AUTHENTICATED_ANONYMOUSLY");
}
return rtnSet;
}
}

この例では、WebLogic domainであるユーザーfred@oracle.comは、ROLE_SUPERVISORおよびIS_AUTHENTICATED_ANONYMOUSLYにマップされます。

applicationContext-acegi-security.xmlをweb.xmlにプラグインする方法

applicationContext-acegi-security.xmlファイルをプラグインするには、web.xmlに次のコードを追加します。

<filter>
<filter-name>Acegi Filter Chain Proxy</filter-name>
<filter-class>org.acegisecurity.util.FilterToBeanProxy</filter-class>
<init-param>
<param-name>targetClass</param-name>
<param-value>org.acegisecurity.util.FilterChainProxy</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Acegi Filter Chain Proxy</filter-name>
<url-pattern>/main/secure/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext-acegi-security.xml
</param-value>
</context-param>

4 WebLogic ServerのSpringコンソール拡張

この章では、WebLogic Server インフラストラクチャを使用して登録された実行時MBeanをベースとしているSpringコンソール拡張について説明します。コンソール拡張には、デプロイされているSpring Beanの構成情報および実行時情報が表示されます。

注意:

Springコンソール拡張を有効化するには、アプリケーションの一部としてWebコンポーネントを持つ必要があります。これは、Springを使用するほとんどのアプリケーションがWebアプリケーションであるためです。

Springコンソール拡張を使用するには、Spring beanのサポートをオンにして、Springコンソール拡張を有効にする必要があります。これは以下の手順1および手順2に示しています。この手順を1回のみ実行します。また、Springコンソール拡張を使用するように、Springアプリケーションを有効にする必要があります。この場合は、次の手順3に説明するように、Springアプリケーション構成に変更する必要があります。各Springアプリケーションのためにこの操作を行います。

1. WL_HOME/server/lib/weblogic-spring.jarをWebLogic Serverにデプロイします。ここでWL_HOMEは、WebLogic Serverインストール・ディレクトリ(Oracle\Middleware\Oracle_Home\wlserverなど)です。この手順を実行するのは、WebLogic Serverインスタンスに対して1回のみです。
weblogic-spring.jarファイルはアプリケーション(EARまたはWARファイルとしてパッケージ化されたもの)で使用されているJava EEオプション・パッケージです。デプロイメントの際に、アプリケーションのためにMBeansを作成します。

以下のいずれかの方法でweblogic-spring.jarをデプロイします。

- Oracle WebLogic Server管理コンソール・オンライン・ヘルプのアプリケーションおよびモジュールのデプロイの説明に従って、WebLogic Server管理コンソールを使用します。JARファイルは、WL_HOME\server\libにあります。

- コマンド・ラインで次のコマンドを実行します。

java weblogic.Deployer -library -deploy – source
WL_HOME/server/lib/weblogic-spring.jar – targets
server_name -adminurl server_URL -user
user_name -password password

2. WebLogic Server管理コンソールでSpringコンソール拡張を有効にします。(Springコンソール拡張は、デフォルトでは無効になっています)。この手順を実行するのは、ドメインに対して1回のみです。次の手順を実行します。

a. WebLogic Server管理コンソールにログインします。

b. 管理コンソールの右ペインの最上部にあるバナー・ツールバー領域で、「プリファレンス」をクリックします。

c. 「プリファレンス」ページで、「拡張」をクリックします。

d. spring-consoleの横にあるチェック・ボックスを選択して「有効化」をクリックします。

e. 変更を有効にするため、サーバーを停止して再起動します。

3. アプリケーション(EARまたはWARファイルとしてパッケージ化されたもの)のマニフェストを変更し、Java EEオプション・パッケージとしてweblogic-spring.jarを含めます。この手順は、Spring実行時MBeanまたはSpringコンソール拡張を使用するすべてのSpringアプリケーションで個別に実行する必要があります。
具体的には、META-INF/Manifest.mfに以下の行を追加します。

Extension-List: WeblogicSpring
WeblogicSpring-Extension-Name: weblogic-spring
WeblogicSpring-Specification-Version: 10.3.0.0
WeblogicSpring-Implementation-Version: 10.3.0.0

アプリケーションをデプロイ後、WebLogic Server管理コンソールでこれをモニターできます。「Spring構成およびモニター」ページが、「Spring Framework」タブの下にあります。Oracle WebLogic Server管理コンソール・オンライン・ヘルプのSpring Beanタスクの概要を参照してください。

5 WebLogic Serverのクラスタリングの使用

この章では、SpringアプリケーションはWebLogic Serverのクラスタリング機能を活用できる方法について説明します。SpringアプリケーションのほとんどがWebアプリケーション(.warファイル)としてパッケージ化されるため、WebLogic Serverクラスタを活用するには、特別な操作を実行する必要がありません。WebLogic ServerクラスタのサーバーへSpringアプリケーションをデプロイするだけでWebLogic Serverクラスタを活用できます。この機能および他のWebLogic Server/Spring統合機能でサポートされるSpringバージョンの詳細は、WebLogic ServerでのSpring Frameworkのサポートを参照してください。

WebLogic Serverは、Java EE RMI実装とのプロキシ処理をサポートするようにSpring JndiRmiProxyFactoryBeanおよびそれに関連するサービス・エクスポータを拡張します。JndiRmiProxyFactoryBeanおよびそのエクスポータの拡張機能を使用するには、次の手順に従います。

1. 次のようなコードを実装してクライアント・サポートを構成します。

<bean id="proProxy"
class="org.springframework.remoting.rmi.JndiRmiProxyFactoryBean">
<property name="jndiName" value="t3://${serverName}:${rmiPort}/order"/>
</property>
<property name="jndiEnvironment">
<props>
<prop key="java.naming.factory.url.pkgs">weblogic.jndi.factories</prop>
</props>
</property>
<property name="serviceInterface"
value="org.springframework.samples.jpetstore.domain.logic.OrderService"/>
</bean>

2. 次のようなコードを実装してサービス・エクスポータを構成します。

<bean id="order-pro"
class="org.springframework.remoting.rmi.JndiRmiServiceExporter">
<property name="service" ref="petStore"/>
<property name="serviceInterface"
value="org.springframework.samples.jpetstore.domain.logic.OrderService"/>
<property name="jndiName" value="order"/>
</bean>

6 WebLogic ServerへのSpring依存関係インジェクションの拡張

この章では、WebLogic Serverで拡張された依存関係インジェクション機能を提供するSpring Framework拡張機能を有効にする方法について説明します。

標準のWeblogic Serverインストールでは、WebLogic Server Java EEコンテナで、標準のJava EE 7の依存関係インジェクション(DI)とインターセプタ(アスペクト指向プログラミングの形式)が提供されます。また、拡張された依存関係インジェクション機能とアスペクト指向プログラミングを提供するSpring Framework拡張機能もサポートされます。この拡張では、JSR-250 (共通アノテーション)、依存関係インジェクション、およびEJB 3.0スタイルのインターセプションを提供するSpring FrameworkアドオンのPitchforkを使用します。(http://oss.oracle.com/projects/pitchfork/を参照してください。)この拡張によって、サーブレット・リスナーやフィルタを含むEJBインスタンスおよびWebコンポーネントに、依存関係インジェクションとアスペクト指向プログラミングが提供されます。

注意:

このリリースのWebLogic ServerのJSPタグ・ハンドラではSpring拡張機能はサポートされません。

WebLogic ServerでSpring拡張機能を有効にするには、次を実行します:

1. http://www.springsource.com/downloadから特定のバージョンのSpringおよびその依存性をダウンロードします。Oracleによって認定されているバージョンのSpringをダウンロードしてください。この情報については、Oracle Technology NetworkのOracle Fusion Middlewareのサポートされるシステム構成を参照してください。
最低でも、以下のJARファイルが必要になります。

- spring.jar

- aspectjweaver.jar

- commons-logging.jar

- log4j-1.2.14.jar

- pitchfork.jar

http://oss.oracle.com/projects/pitchfork/からのpitchfork.jarもダウンロードします。

必要に応じて他のJARファイルを追加しても構いません。

2. 上記のJARファイルを、WebLogic Serverのクラスパスに追加します。Oracle WebLogic Serverアプリケーションの開発のシステム・クラスパスへのJARの追加を参照してください。
Weblogic Server WebコンテナおよびEJBコンテナでは、これらのJARを使用してコンテナ・サービス(依存関係インジェクションとインターセプタ)を提供します。

これらのJARはサーバーのクラスパスに追加されているため、アプリケーション(EAR、WAR、またはJARファイルとしてパッケージ化したもの)でも使用されます。アプリケーションと一緒にパッケージ化されているJARを使用するようにアプリケーションを構成するには、特定のデプロイメント記述子を有効にする必要があります。

3. <component-factory-class-name>要素をorg.springframework.jee.interfaces.SpringComponentFactoryに設定してSpring拡張機能を有効にします。この要素は、EJB、Web、およびアプリケーション記述子に含まれています。アプリケーション・レベルの記述子は、モジュール・レベルの記述子によって上書きされます。このタグをnull (デフォルト)に設定すると、Spring拡張機能は無効になります。

4. spring-ejb-jar.xmlまたはspring-web.xmlという名前の標準Spring bean定義ファイルを、アプリケーションの/WEB-INF/classes/META-INFディレクトリ(またはJARファイル内のMETA-INFディレクトリ)に配置します。WebLogicコンテナは、これらの名前で標準のSpring Bean定義ファイルを検索します。SpringコンテナからEJBやサーブレットのインスタンスを認識するには、Spring beanの<id>タグを、EJBの場合はejb-nameに、Webコンポーネントの場合はclass-nameに設定する必要があります。
たとえば、次のようなステートレスEJBに対して、

@Stateless

public class TraderImpl
implements Trader {
private List symbolList;
public void setSymbolList(List l) {
symbolList = l;
}

...
}

アプリケーションに以下のspring-ejb-jar.xmlを追加することができます。

<beans>
<!-- id corresponds to ejb-name. -->
<bean id="Trader">
<property name="symbolList">
<list>
<value>ORCL</value>
<value>MSFT</value>
</list>
</property>
</beans>

標準のJava EE仕様で利用できないEJBにsymbolListを注入できます。

7 SpringベースのOracle Weblogic Serverアプリケーションの開発

この章では、WebLogic ServerのJava EEベースのAvitek Medical Records (MedRec)サンプル・アプリケーションのSpringバージョンがあるMedRec-Springサンプル・アプリケーションについて説明します。

MedRec (Springバージョン)というサンプル・アプリケーションは、WebLogic Serverに含まれ、MedRec-Springと呼ばれます。次の項で説明するように、MedRec-Springでは、Java EEベースのMedrecコンポーネントはSpringコンポーネントに置き換えられます。

1. Springの制御の反転の構成。

2. SpringのWebサービス・クライアント・サービスの有効化。Springでは、Webサービスのプロキシを生成するJAX-WCファクトリが提供されます。

3. JMSサービスを実行時にアプリケーションで利用できるようにする。

4. JPAデータ・アクセスの使用。

5. トランザクション管理のためにSpringトランザクション抽象化レイヤーの使用。

以降の項に示すサンプル・コードはMedRec-Springからのコードです。

注意:

WebLogic Serverをインストールするときには、MedRec-Springはデフォルトでインストールされません。カスタムインストールを選択して、「製品およびコンポーネントの選択」ページから「サーバー・サンプル」を選択します。

すでに、WebLogic Serverがインストールされている場合、インストーラを再起動して、WebLogic ServerがインストールされているMiddlewareホームを選択し、カスタム・インストールを選択して、「製品およびコンポーネントの選択」ページから「サーバー・サンプル」を選択します。

Medrec-Springとともにそれらの設計と実装に関するドキュメントが含まれています。そのドキュメントは、ORACLE_HOME\wlserver\samples\server\docs\にあります(ここで、ORACLE_HOMEはWebLogic Serverをインストールしたディレクトリ)。WebLogic Serverコード・サンプルの詳細は、Oracle WebLogic Serverの理解のサンプル・アプリケーションおよびコード・サンプルを参照してください。

Springの制御の反転の構成

Springでは、他のbeanへの参照(注入されるプロパティ)は、Springの構成ファイルapplicationContext-web.xmlで構成されます。

Spring 2.5アノテーション駆動型構成がMedRec-Springで使用されます。アプリケーション・コンテキストは、Springによって@ServiceのようなSpring固有のアノテーションを検出するSpring beanが自動的にスキャンされるように構成されているので、個々のSpring beanをXML構成ファイルで宣言する必要はありません。ORACLE_HOME\wlserver\samples\server\medrec-spring\modules\medrec\web\war\WEB-INF\applicationContext.xml内の構成は、以下のとおりです。

<context:component-scan base-package="com.oracle.medrec"/>

主に、依存関係インジェクションは@Autowiredアノテーションで構成されます。たとえば、ORACLE_HOME\wlserver\samples\server\medrec-spring\modules\medrec\domain\src\com\oracle\medrec\service\impl\RecordServiceImpl.javaの内容は以下のとおりです。

@Service("recordService")
@Transactional
public class RecordServiceImpl implements RecordService {

@Autowired
private RecordRepository recordRepository;

@Autowired
private PatientRepository patientRepository;

@Autowired
private PhysicianRepository physicianRepository;

これらのアノテーションは、EJB 3.0の開発と同様な開発を提供します。詳細は、http://www.springsource.org/documentation/にあるSpringの関連ドキュメントの「Annotation Type Autowired」を参照してください。

SpringのWebサービス・クライアント・サービスの有効

ORACLE_HOME\wlserver\samples\server\medrec-spring\modules\physician\web\war\WEB-INF\applicationContext.xmlからの次の例に示すように、MedRec-Springは、Web Servicesの動的プロキシを公開するためにSpring JaxWsPortProxyFactoryBeanを使用します。

<bean id="patientService" class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean">
<property name="serviceInterface" value="com.oracle.physician.service.PatientService"/>
<property name="wsdlDocumentUrl"
value="http://localhost:7011/medrec/webservices/PatientFacadeService?WSDL"/>
<property name="namespaceUri" value="http://www.oracle.com/medrec"/>
<property name="serviceName" value="PatientFacadeService"/>
<property name="portName" value="PatientFacadePort"/>
</bean>

<bean id="physicianService" class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean">
<property name="serviceInterface" value="com.oracle.physician.service.PhysicianService"/>
<property name="wsdlDocumentUrl"
value="http://localhost:7011/medrec/webservices/PhysicianFacadeService?WSDL"/>
<property name="namespaceUri" value="http://www.oracle.com/medrec"/>
<property name="serviceName" value="PhysicianFacadeService"/>
<property name="portName" value="PhysicianFacadePort"/>
</bean>

<bean id="recordService" class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean">
<property name="serviceInterface" value="com.oracle.physician.service.RecordService"/>
<property name="wsdlDocumentUrl"
value="http://localhost:7011/medrec/webservices/RecordFacadeService?WSDL"/>
<property name="namespaceUri" value="http://www.oracle.com/medrec"/>
<property name="serviceName" value="RecordFacadeService"/>
<property name="portName" value="RecordFacadePort"/>
</bean>

この方法により、ツールで生成されたWebサービスのスタブを使用する必要はありません。詳細は、Springの関連ドキュメント(http://www.springsource.org/documentation/)の「JaxWsPortProxyFactoryBean」を参照してください。

JMSサービスを実行時にアプリケーションで利用できるようにする

Springでは、JMSサービスが実行時にアプリケーションに提供されるように構成する必要があります。MedRec-Springでは、OracleはSpringの構成ファイルORACLE_HOME\wlserver\samples\server\medrec-spring\modules\medrec\web\war\WEB-INF\applicationContext.xmlに次のコードを実装することによって、実行時にJMSサービスがアプリケーションに利用できるようにします。

<!--- Messaging ************************************* -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"/>
</bean>
<jee:jndi-lookup id="connectionFactory" jndi-name="weblogic.jms.XAConnectionFactory"/>

<jee:jndi-lookup id="patientNotificationQueue"
jndi-name="com.oracle.medrec.jms.PatientNotificationQueue"/>
<bean id="messageListener"
class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
<property name="delegate" ref="patientNotifierBroker"/>
<property name="defaultListenerMethod" value="notifyPatient"/>
</bean>

<bean id="messageListenerContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<!--<property name="taskExecutor" ref="taskExecutor"/>-->
<property name="connectionFactory" ref="connectionFactory"/>
<property name="messageListener" ref="messageListener"/>
<property name="destination" ref="patientNotificationQueue"/>
<!-- no need to use XA transaction now -->
<property name="sessionTransacted" value="true"/>
</bean>

ここで、SpringフレームワークからのさまざまなBeanが宣言されます。特に、jmsTemplateは、基底のJMS APIをラップして、メッセージを送信するために使用します。messageListenerContainerは、メッセージドリブンBeanコンテナと同じ機能を提供し、MedRec-SpringのJMSリスナーが登録されます。

JPAデータ・アクセスの使用

MedRec-Springは、データ・ソースを管理するには、標準Java Persistence API (JPA)を使用します。構成は、ORACLE_HOME\wlserver\samples\server\medrec-spring\modules\medrec\domain\src\META-INF\persistence.xmlにあります。

<persistence-unit name="MedRec" transaction-type="JTA">
<jta-data-source>jdbc/MedRecGlobalDataSourceXA</jta-data-source>
<class>com.oracle.medrec.model.Address</class>
<class>com.oracle.medrec.model.Administrator</class>
<class>com.oracle.medrec.model.BaseEntity</class>
<class>com.oracle.medrec.model.PersonName</class>
<class>com.oracle.medrec.model.Patient</class>
<class>com.oracle.medrec.model.Physician</class>
<class>com.oracle.medrec.model.Prescription</class>
<class>com.oracle.medrec.model.Record</class>
<class>com.oracle.medrec.model.RegularUser</class>
<class>com.oracle.medrec.model.User</class>
<class>com.oracle.medrec.model.VersionedEntity</class>
<class>com.oracle.medrec.model.VitalSigns</class>
<properties>
<property name="kodo.jdbc.SynchronizeMappings"
value="buildSchema"/>
</properties>
</persistence-unit>

MedRec-Springはアノテーション駆動型アプローチ(この場合、すべてのDAOのための@Repository)を使用しているため、MedRec-SpringはSpring構成ファイルにData Access Object (DAO)を宣言しません。よって、これらのすべてが自動的にSpringによって管理されます。たとえば、RecordRepositoryImpl.javaを参照してください。

@Repository
public class RecordRepositoryImpl
extends EntityRepositorySupport<Record, Long> implements RecordRepository {

public List<Record> findRecordsByPatientId(Long patientId) {
return findByProperty("Record.findRecordsByPatientId", patientId);
}
}

トランザクション管理のためにSpringトランザクション抽象化レイヤーの使用

MedRec-Springは、WebLogic JTAトランザクション・マネージャを使用およびアノテーション・ベース宣言型トランザクションの管理を有効するためにSpring 2.5構成を使用します。ORACLE_HOME\wlserver\samples\server\medrec-spring\modules\medrec\web\war\WEB-INF\applicationContext.xml内の構成を参照してください。

<tx:jta-transaction-manager/>

<tx:annotation-driven/>

すべてのトランザクションの境界設定がSpringの@Transactionalアノテーションによって実装されます。これは、EJB 3.0アプリケーションで行われる操作と同じです。ORACLE_HOME \wlserver\samples\server\medrec-spring\modules\medrec\domain\src\com\oracle\medrec\service\impl\RecordServiceImpl.javaを参照してください。

@Service("recordService")
@Transactional
public class RecordServiceImpl implements RecordService {

…
public void createRecord(Record record, Long physicianId, Long patientId) {

}

@Transactional(readOnly = true)
public List<Record> getRecordsByPatientId(Long patientId) {
}

@Transactional(readOnly = true)
public Record getRecord(Long id) {
}
}

オラクルの法律上の注意点について

コピーライトについて

Copyright © 1994-2017, Oracle and/or its affiliates. All rights reserved.

ライセンス制約の保証と結果的に生じる損害の免責

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

保証免責

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクルまでご連絡ください。

制限付権利について

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

危険な用途への使用について

このソフトウェアまたはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアまたはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、Oracle Corporationおよびその関連会社は一切の責任を負いかねます。

商標と登録商標について

OracleおよびJavaはオラクルおよびその関連会社の登録商標です。その他の社名、商品名等は各社の商標または登録商標である場合があります。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

第三者のコンテンツ、製品、サービスに対する免責事項

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

アルファ版およびベータ版ドラフト・ドキュメントについて

このドキュメントが試作版の場合:

このドキュメントは試作版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。Oracle Corporationおよびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

非公開のアルファ版およびベータ版ドラフト・ドキュメントについて

このドキュメントが非公開の試作版の場合:

このドキュメントに含まれる情報は、情報の共有のみを目的としたものであって、顧客諮問委員会(Customer Advisory Board)のメンバーとしてのお客様の立場でのみ、またはお客様のベータ・トライアル契約のみに従って検討されるべきものとします。マテリアル、コード、または機能の提供をお約束するものではなく、購入決定を行う際の判断材料とすべきではありません。このドキュメントに記載されている特徴または機能の開発、リリースおよび時期については、オラクルの裁量により決定されます。

このドキュメントには、ソフトウェアまたは印刷物などの形式を問わず、オラクルが独占的な権利を有する財産的情報が含まれています。この機密資料へのアクセスと使用は、お客様とオラクルとの間で締結され、お客様が遵守に同意した、Oracle Master Agreement、Oracle License and Oracle Services Agreement (オラクル・ライセンスおよびサービスに関する契約書)、Oracle PartnerNetwork Agreement、Oracle Distribution Agreementまたはその他のライセンス契約の条件に従うものとします。このドキュメントとその内容の開示、コピー、複製および配布には、オラクルによる事前の承諾を必要とします。このドキュメントはライセンス契約の一部となるものではなく、オラクルおよびその子会社や関連会社との契約を構成するものではありません。

ドキュメントのアクセシビリティについて

オラクルのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイトhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc を参照してください。

Oracle Supportへのアクセス

サポートをご契約のお客様には、My Oracle Supportを通して電子支援サービスを提供しています。詳細情報はhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=infoか、聴覚に障害のあるお客様はhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=trsを参照してください。