WebLogic Server アプリケーションの開発

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

Spring アプリケーション リファレンス

以下の節では、Spring Framework ベースの WebLogic Server アプリケーションの開発および管理について説明します。以下の節の情報の多くは、MedRec-Spring を作成する視点から説明されています。

 


WebLogic Server における Spring について

WebLogic Server のエンタープライズ機能を Spring で利用する方法を例示するために、BEA は Avitek Medical Records サンプル アプリケーション (MedRec) を再設計し、コア J2EE コンポーネントを Spring コンポーネントに置き換えました。MedRec アーキテクチャおよびその再設計に関するその他の情報については、「Spring と WebLogic Server の統合」(http://www.beasys.co.jp/dev2dev/pub/a/2005/09/spring_integration_weblogic_server.html) を参照してください。

以下の節では、MedRec の再設計時に行われた主な手順について説明します。この情報は、独自の J2EE ベースの WebLogic Server アプリケーションを再設計して Spring コンポーネントを使用する場合に利用できます。また、Spring コンポーネントに基づいた WebLogic Server 用のアプリケーションを新規に作成する場合もこの情報を利用できます。

ここでは、読者が J2EE の概念、WebLogic Server、および Spring Framework に精通していることを前提としています。WebLogic Server については、「 BEA WebLogic Server 10.0 ドキュメント」を参照してください。BEA dev2dev Web サイトにおける Spring に関する情報については、「Spring Resource Page」を参照してください。Spring Framework の一般的な情報については、http://www.springframework.org/ を参照してください。

 


Spring ベース アプリケーションへの J2EE ベース アプリケーションの再設計

J2EE ベースのアプリケーションを Spring ベースのアプリケーションに変換するには、必要に応じて次の手順を実行します。

  1. Spring の制御の反転をコンフィグレーションする
  2. Spring の Web サービス クライアント サービスを有効にする。Spring では、Web サービスのプロキシを生成する JAX-RPC ファクトリが提供されます。
  3. JMS サービスを実行時にアプリケーションで利用できるようにする
  4. JMX のコンフィグレーション : WebLogic Server 実行時 MBean サーバ接続を Spring に公開する
  5. 接続プールと通信するように Spring JDBC をコンフィグレーションする
  6. トランザクション管理のために Spring トランザクション抽象化レイヤを使用する
  7. WebLogic Server クラスタリング機能を利用する、および Spring のクラスタ化リモーティング

以下の節では、J2EE ベースのアプリケーションを Spring ベースのアプリケーションに再設計する手順を詳細に説明しています。必要な場合は、以下の節にサンプル コードを示します。多くの場合、サンプル コードは MedRec-Spring から取得されています。

Spring の制御の反転をコンフィグレーションする

Spring では、他の Bean への参照 (注入されるプロパティ) は、Spring のコンフィグレーション XML ファイル applicationContext-web.xml でコンフィグレーションされます。

MedRec-Spring では、次に示すように、Spring コンフィグレーション ファイル src\medrecEar\web\WEB-INF\applicationContext-web.xml のステートレス セッション EJB が POJO に置き換えられました。

<bean name="/patient/record"

class="com.bea.medrec.web.patient.actions.ViewRecordAction">

<property name="medRecClientServiceFacade">

<ref bean="medRecClientServiceFacade"/>

</property>

  </bean>

また、アプリケーション コードで、対応する Bean のセッター メソッドが定義されています。次に例を示します。

protected MedRecClientServiceFacade medRecClientServiceFacade;
  public void setMedRecClientServiceFacade(
      MedRecClientServiceFacade pMedRecClientServiceFacade){
    this.medRecClientServiceFacade = pMedRecClientServiceFacade;
  }

Spring の Web サービス クライアント サービスを有効にする

Web サービスのプロキシを生成する Spring の JAX-RPC ファクトリを使用するには、次に示すようなコードを実装して Spring JaxRpcPortProxyFactoryBean をコンフィグレーションします。MedRec-Spring では、このコードが Spring のコンフィグレーション ファイル src\physicianEar\APP-INF\classes\applicationContext-phys-service.xml に実装されました。

<!-- 新しい医療記録を medrec に送信するための信頼性のある非同期 Web サービス -->
<bean id="reliableClientWebServicesPortType"
class="org.springframework.remoting.jaxrpc.JaxRpcPortProxyFactoryBean"
lazy-init="true">
<property name="wsdlDocumentUrl" value="http://${WS_HOST}:${WS_PORT}/ws_phys/PhysicianWebServices?WSDL"/>
<property name="portName" value="PhysicianWebServicesPort"/>
<property name="jaxRpcService">
<ref bean="generatedReliableService"/>
</property>
<property name="serviceInterface" value="com.bea.physician.webservices.client.PhysicianWebServicesPortType"/>
<property name="username" value="medrec_webservice_user"/>
<property name="password" value="weblogic"/>
<property name="customProperties">
<props>
<prop key="weblogic.wsee.complex">true</prop>
</props>
</property>
</bean>
<> <!-- 型マッピングでのロードを行うコンストラクタを jaxRpcService クラスで実行できるようにする -->
<bean id="generatedReliableService" class="com.bea.physician.webservices.client.PhysicianWebServices_Impl">
</bean>

このサンプル コードでは、以下の点に注目してください。

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

Spring では、JMS サービスが実行時にアプリケーションに提供されるようにコンフィグレーションする必要があります。これは、メッセージングの送り先を表す Spring Bean を介して行います。MedRec-Spring では、Spring コンフィグレーション ファイル src\medrecEar\APP-INF\classes\applicationContext-jms.xml に次のコードが実装され、実行時にアプリケーションで JMS サービスが利用できるようになりました。

<bean id="uploadQueue" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName"
      value="com.bea.medrec.messagging.MedicalRecordUploadQueue"/>
  </bean>
  <bean id="jmsConnFactory"
    class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName"
      value="com.bea.medrec.messagging.MedRecQueueConnectionFactory"/>
  </bean>
  <bean id="uploadJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory">
      <ref bean="jmsConnFactory"/>
    </property>
    <property name="defaultDestination">
      <ref bean="uploadQueue"/>
    </property>
  </bean>

JMX のコンフィグレーション : WebLogic Server 実行時 MBean サーバ接続を Spring に公開する

WebLogic Server の MBean サーバを Spring の MBeanServerConnectionFactoryBean を介して Spring に公開することができます。この Bean は、アプリケーションのデプロイメント時に確立およびキャッシュされ、後で Bean を参照することによって操作できる MBeanServerConnection を生成する便利なファクトリです。この MBeanServerConnectionFactoryBean をコンフィグレーションして WebLogic Server 実行時 MBean サーバを返し、WebLogic Server ドメイン実行時 MBean サーバおよび WebLogic Server 編集 MBean サーバへの接続を取得することができます。

注意 : WebLogic Server ドメイン実行時 MBean サーバはデプロイメント時はアクティブでないため、MBeanServerConnectionFactoryBean をコンフィグレーションして Spring の遅延初期化を使用する必要があります。遅延初期化は、呼び出された場合に Spring Bean をフェッチします。

WebLogic Server 実行時 MBean サーバ接続を Spring に公開する例を、次のサンプル コードに示します。このコードは、MedRec-Spring において、Spring のコンフィグレーション ファイル medrecEar/APP-INF/classes/applicationContext-jmx.xml に実装されています。

<> <!-- WebLogic Server の実行時 MBean サーバ接続を公開する -->
<bean id="runtimeMbeanServerConnection" class="org.springframework.jmx.support.MBeanServerConnectionFactoryBean">
<property name="serviceUrl" value="service:jmx:t3://${WS_HOST}:${WS_PORT}/jndi/weblogic.management.mbeanservers.runtime"/>
<property name="environment">
<props>
<prop key="java.naming.security.principal">${WS_USERNAME}</prop>
<prop key="java.naming.security.credentials">${WS_USERNAME}</prop>
<prop key="jmx.remote.protocol.provider.pkgs">weblogic.management.remote</prop>
</props>
</property>
</bean>

接続プールと通信するように Spring JDBC をコンフィグレーションする

MedRec-Spring では、WebLogic Server によって管理される JDBC 接続プールを参照するデータソースが使用され、Spring の JdbcDaoSupport クラスが採用されました。JdbcDaoSupport については、Spring の関連ドキュメントを参照してください。

JDBC の実装方法の例については、MedRec-Spring クラスを参照してください。

src\medrecEar\dao\com\bea\medrec\dao\jdbc\JdbcPatientDao.java

次のサンプル コードも参照してください。これらのコードは、MecRec-Spring において、Spring コンフィグレーション ファイル src\medrecEar\APP-INF\classes\applicationContext-db.xml および src\medrecEar\APP-INF\classes\applicationContext-jdbc.xml にそれぞれ実装されています。

applicationContext-db.xml サンプル コード :

  <!-- データソース プール -->
  <bean id="dataSource"
    class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="jdbc/MedRecGlobalDataSourceXA"/>
  </bean>

applicationContext-jdbc.xml サンプル コード :

  <bean id="patientDao"
    class="com.bea.medrec.dao.jdbc.JdbcPointBasePatientDao"
    autowire="byType"/>

さらに、MedRec-Spring では、エンティティ EJB が POJO に置換され、永続性のために Spring JDBC が使用されました。例については、MedRec-Spring クラス \src\medrecEar\core\com\bea\medrec\domain\Address.java を参照してください。

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

Spring では、WebLogic Server の JTA 実装を介した分散トランザクションがサポートされています。Spring トランザクション マネージャをコンフィグレーションすると、WebLogic Server JTA トランザクション マネージャに担当タスクを委託することもできます。これは、Spring の WebLogicJtaTransactionManager クラスを使用して行います。オリジナル バージョンの MedRec のトランザクション管理を完全に反映するため、MedRec-Spring でこのアプローチが使用されました。

トランザクション管理用に Spring トランザクション抽象化レイヤを使用し、担当タスクを WebLogic Server JTA トランザクション マネージャに委託するには、次のようなコードを実装します。これらのコードは、Spring コンフィグレーション ファイル src\medrecEar\APP-INF\classes\applicationContext-tx.xml および src\medrecEar\APP-INF\classes\applicationContext-service.xml にそれぞれ実装されています。

applicationContext-tx.xml サンプル コード :

<!-- Spring のトランザクション マネージャが WebLogic Server のトランザクション マネージャに担当タスクを委託する -->
<bean id="transactionManager" class="org.springframework.transaction.jta.WebLogicJtaTransactionManager">
<property name="transactionManagerName"
value="javax.transaction.TransactionManager"/>
</bean>

applicationContext-service.xml サンプル コード :

<!-- medrec Spring Bean が継承するベース トランザクション プロキシ -->
< bean id="baseTransactionProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<props>
<prop key="activate*">PROPAGATION_REQUIRED</prop>
<prop key="create*">PROPAGATION_REQUIRED</prop>
<prop key="compose*">PROPAGATION_REQUIRED</prop>
<prop key="deny*">PROPAGATION_REQUIRED</prop>
<prop key="getRecord*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="getPatient*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="getLog*">PROPAGATION_NOT_SUPPORTED</prop>
<prop key="process*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="send*">PROPAGATION_REQUIRED</prop>
</props>
</property>
< /bean>
<!-- すべての medrec クライアント用のサービスのシングル ポイント -->
<bean id="medRecClientServiceFacade"
parent="baseTransactionProxy">
<property name="target">
<bean class="com.bea.medrec.service.MedRecClientServiceFacadeImpl">
<property name="adminService">
<ref bean="adminService"/>
</property>
<property name="patientService">
<ref bean="patientService"/>
</property>
<property name="recordService">
<ref bean="recordService"/>
</property>
<property name="recordXmlProcessorService">
<ref bean="recordXmlProcessorService"/>
</property>
</bean>
</property>
</bean>

transactionAttributes では、Spring がトランザクションを開始および終了する方法が定義されます。MedRec-Spring はトランザクション管理を WebLogic JTA に委託するため、トランザクションの中断およびロールバックなどの管理タスクは、WebLogic のトランザクション マネージャの指定に従って処理されます。

WebLogicJtaTransactionManager の詳細については、「Spring にトランザクションの"サスペンション (一時停止)"を装備する」(http://www.beasys.co.jp/dev2dev/pub/a/2005/07/spring_transactions.html) を参照してください。

WebLogic Server クラスタリング機能を利用する

Spring アプリケーションでは、WebLogic Server のクラスタリング機能を活用できます。Spring アプリケーションの多くは Web アプリケーション (.war ファイル) としてパッケージされるため、Spring アプリケーションを WebLogic Server クラスタ内のサーバにデプロイする以外は、WebLogic Server クラスタを活用するために特別なことを行う必要はありません。

Spring のクラスタ化リモーティング

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

  1. 次のようなコードを実装してクライアント サポートをコンフィグレーションします。
  2. <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>
  3. 次のようなコードを実装してサービス エクスポータをコンフィグレーションします。
  4. <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>

 


WebLogic Administration Console の Spring 拡張機能

WebLogic Server Administration Console の Spring 拡張機能を使用すると、アプリケーションで定義される Spring の Bean、属性、およびオペレーションをモニタおよび管理できます。

WebLogic Administration Console の Spring 拡張機能のインストール

WebLogic Administration Console の Spring 拡張機能をインストールするには、次の手順に従います。

  1. spring-ext-server.jar ファイルを yourdomain/console-ext ディレクトリにコピーします。
  2. spring-ext-client.jar ファイルをアプリケーションの WEB-INF/lib ディレクトリにコピーします。
  3. Weblogic Server を再起動します。

WebLogic Administration Console を介した Spring Bean の公開

MBean ではない Spring Bean に WebLogic Administration Console を介してアクセスできるようにするには、applicationContext.xml ファイルの MBeanExporter をコンフィグレーションしてアセンブラを介して公開する Bean を指定する必要があります。applicationName プロパティがアプリケーションのデプロイメント名であることを確認してください。

 


WebLogic Server での Spring のサポート

このリリースの WebLogic Server および Interface21 の Spring Framework が BEA でサポートされる仕組みについては、「Spring Framework の使用時にサポートされる製品コンフィグレーション」を参照してください。


  ページの先頭       前  次