![]() ![]() ![]() ![]() |
以下の節では、Spring Framework ベースの WebLogic Server アプリケーションの開発および管理について説明します。以下の節の情報の多くは、MedRec-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/ を参照してください。
J2EE ベースのアプリケーションを Spring ベースのアプリケーションに変換するには、必要に応じて次の手順を実行します。
以下の節では、J2EE ベースのアプリケーションを Spring ベースのアプリケーションに再設計する手順を詳細に説明しています。必要な場合は、以下の節にサンプル コードを示します。多くの場合、サンプル コードは MedRec-Spring から取得されています。
Spring では、他の Bean への参照 (注入されるプロパティ) は、Spring のコンフィグレーション XML ファイル applicationContext-web.xml
でコンフィグレーションされます。
MedRec-Spring では、次に示すように、Spring コンフィグレーション ファイル src\medrecEar\web\WEB-INF\applicationContext-web.xml
のステートレス セッション EJB が POJO に置き換えられました。
class="com.bea.medrec.web.patient.actions.ViewRecordAction">
<property name="medRecClientServiceFacade">
<ref bean="medRecClientServiceFacade"/>
</bean>
また、アプリケーション コードで、対応する Bean のセッター メソッドが定義されています。次に例を示します。
protected MedRecClientServiceFacade medRecClientServiceFacade;
public void setMedRecClientServiceFacade(
MedRecClientServiceFacade pMedRecClientServiceFacade){
this.medRecClientServiceFacade = pMedRecClientServiceFacade;
}
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>
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>
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>
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 では、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) を参照してください。
Spring アプリケーションでは、WebLogic Server のクラスタリング機能を活用できます。Spring アプリケーションの多くは Web アプリケーション (.war ファイル) としてパッケージされるため、Spring アプリケーションを WebLogic Server クラスタ内のサーバにデプロイする以外は、WebLogic Server クラスタを活用するために特別なことを行う必要はありません。
WebLogic Server 上の Spring 1.2.8 および 2.0 証明書は、J2EE RMI 実装とのプロキシ処理をサポートするように Spring JndiRmiProxyFactoryBean
およびそれに関連するサービス エクスポータを拡張します。JndiRmiProxyFactoryBean
およびそのエクスポータの拡張機能を使用するには、次の手順に従います。
<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>
<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 Server Administration Console の Spring 拡張機能を使用すると、アプリケーションで定義される Spring の Bean、属性、およびオペレーションをモニタおよび管理できます。
WebLogic Administration Console の Spring 拡張機能をインストールするには、次の手順に従います。
MBean ではない Spring Bean に WebLogic Administration Console を介してアクセスできるようにするには、applicationContext.xml
ファイルの MBeanExporter をコンフィグレーションしてアセンブラを介して公開する Bean を指定する必要があります。applicationName
プロパティがアプリケーションのデプロイメント名であることを確認してください。
このリリースの WebLogic Server および Interface21 の Spring Framework が BEA でサポートされる仕組みについては、「Spring Framework の使用時にサポートされる製品コンフィグレーション」を参照してください。
![]() ![]() ![]() |