目次


WebSphere Studio を使用したステートフル Web サービスの実装とアクセス、パート 4

動的 WS-Resources のモデル化

Comments

はじめに

Web Services Resource Framework (WS-Resource、『参考文献』参照) では、Web サービスを使用してステートフルな資源にアクセスするための一連の仕様が定義されています。Web サービスはその性質上、通常は対話中に状態情報を保持しません。ただし、インターフェースにおいて、状態 (Web サービスの対話間で持続し、対話の結果変化するデータ値) の操作が必要になる場合も多くあります。WS-Resource Framework では、状態はステートフルな資源としてモデル化され、Web サービスとの関係は Implied Resource パターンという形で体系化されています。

このシリーズでは前回、シンプルな計算機をステートフルな資源として使用しました。今回は、より複雑で現実的な例を System Management ドメイン内で取り上げながら、この資源のプロパティーとオペレーションを Web サービス・インターフェースを通じてクライアントに提示する方法、および Web サービス実装を実際の物理的資源と結び付ける方法を示します。

システムの管理情報については、さまざまな標準で定義が与えられています。ここでは、Distributed Management Task Force (DMTF) の Common Information Model (CIM) 標準を選択しました。CIM は、システム、ネットワーク、アプリケーション、サービスに関する管理情報の共通定義で、ベンダーによる拡張が許容されています。CIM の共通定義により、ベンダーは、ネットワーク内の全システムにわたって、多様なセマンティクスを持つ管理情報を交換できるようになります。また、名前、バージョン、仮想メモリーなどのプロパティーを持つ、OperatingSystem WS-Resource も選択しました。

対象読者

この記事は、J2EE テクノロジー、Web サービス、および WebSphere Business Integration Server Foundation V5.1 に関する基本的な知識がある方を対象にしています。これらのテクノロジーに関する理解を深めたい場合は、この記事の『参考文献』に入門用資料が用意されているのでご利用ください。IBM developerWorks で入手できるその他の資料を参照することもおすすめします。また、このシリーズの最初の 3 つの記事を読み、WS-Resource Framework の概念についても理解しておいてください。

サンプル・コードの内容と要件

この記事で引用されるサンプルは、WebSphere Studio Application Developer Integration Edition バージョン V5.1.0 GM 版 (Application Developer) で作成されたものです。これらのサンプルは、WebSphere Business Integration Server Foundation V5.1 に組み込まれたテスト環境において単体でテストされました。サンプルの WSDL は tcpmon ユーティリティーを使用するように構成されています。このユーティリティーは、交換される SOAP メッセージの監視用として Apache Axis に付属しています。リスン・ポートを localhost の ポート 81 (listenPort) に設定し、要求を 9080 のターゲット・ポート (targetPort) に転送するように、tcpmon ユーティリティーを構成してください。tcpmon の詳細については、この記事の『参考文献 』を参照してください。

ファイル ws-statefulws4code.zip には、この記事に収録されたコード・サンプルが含まれています。このファイルは、この記事の最上部または最下部にある「Code」アイコンをクリックするとダウンロードすることができます。この zip ファイルには、次のファイルが含まれます。

  • WASv5WSAExtensions.jar: SOAP メッセージの WS-Addressing メッセージ情報ヘッダーの作成時やアクセス時に WebSphere Application Server V5.1 によって必要とされる、ユーティリティー・クラスが含まれた JAR ファイル。WS-Addressing のエンドポイント・リファレンス (EPR) を操作するためのヘルパー・クラスも含まれています。これらのクラスは、WebSphere Studio アプリケーションでの用途に応じて構成することができます。
  • WASvsWSAExtensions-javadoc.zip: ユーティリティー・クラスの javadoc。
  • CimConnector.rar: J2EE CIM コネクターが含まれた RAR ファイル。
  • OperatingSystem.ear: ステートフルなオペレーティング・システム・サービス (サンプル)。オペレーティング・システム・サービスを簡単に呼び出すことのできる Web アプリケーションが用意されています。

汎用 CMP

WebSphere Business Integration Server Foundation V5.1 がリリースされる前は、Container Managed Persistence (CMP: コンテナー管理による永続性) が数多くのリレーショナルなバックエンド・システムをサポートしていました。Container Managed Persistence over Anything (CMP/A: 汎用 CMP) は、作成、取得、更新、削除の各メソッドをサポートするあらゆるバックエンド・システムをサポートできるように、CMP エンティティーを拡張したものです。J2EE テクノロジーで非リレーショナルなエンティティーを表現するには、通常は Bean Managed Persistence (BMP: Bean 管理の永続性) を使用します。その場合、Bean 実装クラスに直接含める必要のある接続ロジックは、開発者がすべて処理しなければなりません。一方、CMP/A では、非リレーショナル・バックエンド・システムも含め、ビジネス・モデルに存在するエンティティーを単純な CMP エンティティーを使用して表現することができます。

このことは、接続ロジックを EJB コンポーネントのメソッド実装に直接含めるという BMP スタイルでの実装ではなく、コンテナーとデプロイメント・ツールによって処理される CMP Bean にメソッドを定義できることを意味します。これを行うには、メソッドを abstract として定義し、これらのメソッドの新しい EJB Extended デプロイメント記述子の設定を、プッシュダウンとしてマークします。ツールは Bean の UserDefinedPushDownMethods インターフェースを生成し、Bean の UserDefinedPushDownMethodsImpl クラス用にスケルトンの Java ソース・コードを生成します。開発者は、このクラスの内容を適切なロジックを使って記述し、コンパイルして、適切な EJB JAR ファイルにパッケージする必要があります。

CMP/A の詳細については、「IBM WebSphere Business Integration Server Foundation, Version 5.1: Applications」ドキュメントを参照してください。

CIM と Pegasus CIMOM

CIM は DMTF の標準であり、ネットワーク環境やエンタープライズ環境における管理情報全般を記述するためのモデルです。CIM は仕様とスキーマから構成されています。CIM の仕様は、管理データを記述するための言語と方法から構成されます。CIM スキーマには、システム、アプリケーション、ネットワーク (LAN)、およびデバイスのモデルが含まれています。CIM スキーマは拡張可能であり、アプリケーションのプラットフォームやデベロッパーが異なっていても標準形式で管理データを記述できるので、多様な管理アプリケーション間での管理データの共有が可能になります。CIM および CIM 標準の詳細については、DMTF の Web サイトを参照 してください。

CIM クライアントは CIM-XML を使用して CIM サーバーと情報を交換することができます。CIM-XML は、CIM での情報交換のための標準プロトコルです。CIM サーバーの中心的なコンポーネントは、管理アプリケーションとプロバイダーの間の対話を処理する CIM オブジェクト・マネージャー (CIMOM) です。CIMOM は、イベント通知、リモート・アクセス、照会処理などのサービスをサポートします。

図1. CIM Server
図1. CIM Server
図1. CIM Server

The Open Group の Pegasus オープン・ソース・プロジェクトでは、最も有名な CIMOM 実装の 1 つを開発しています。Linux システム用としては、Standards Based Linux Instrumentation for Manageability プロジェクトが CIM スキーマの実装を別途提供しています。これらのプロバイダーを Pegasus と併せて使用すれば、CIM 環境の多様な Linux 資源を管理することができます。今回のデモ用として、SBLIM ベースのプロバイダーとともに、Pegasus CIMOM をインストールしてください。インストール手順は、この記事の後半の『Pegasus CIMOM をインストールする』のセクションで説明します。

CIM J2EE コネクター・アーキテクチャー (JCA) アダプター

J2EE コネクター・アーキテクチャー (JCA) により、Enterprise Bean などの J2EE コンポーネントは、ERP システム、メインフレーム・システム、および今回の CIMOM のような異種情報システムと通信できるようになります。JCA 仕様では、プラグ可能なアプリケーション・サーバー・コンポーネントの開発を可能にするインターフェース・セットが定義されています。コンポーネントは「リソース・アダプター」と呼ばれるものです。JCA準拠のリソース・アダプターは、J2EE 準拠のあらゆるアプリケーション・サーバーに配置することができます。アプリケーション・サーバー内で実行される J2EE コンポーネントは、Common Client Interface (CCI) を通じてリソース・アダプターを呼び出します。リソース・アダプターは、ネイティブ・プロトコルを使用して、これらの呼び出しを、基盤となる情報システム上の対応する呼び出しに変換します。

JCA 準拠の CIM 用リソース・アダプターは、IBM Grid Toolbox に含まれています。これは、CIM-XML/HTTP を使用して CIMOM と通信できる、非常に軽量のリソース・アダプターです。CIM-XML メッセージ自体は、リソース・アダプターの外部で構成または解析されます。そのため、リソース・アダプターは単なるコンジットとして機能し、Web サービス・オペレーションを CIM オペレーションにマップする方法や、CIM オペレーションを Web サービス・オペレーションにマップする方法については、別のコンポーネントに記述されています。図 2 に、Web サービス・オペレーションが呼び出される際の概念的な流れを示します。

図 2. Web サービス・オペレーション呼び出しの概念的な流れ
Web サービス・オペレーション呼び出しの概念的な流れ
Web サービス・オペレーション呼び出しの概念的な流れ

配備時には、CIM リソース・アダプターを J2EE サーバーにインストールし、特定の CIMOM ロケーション用の接続ファクトリーを構成する必要があります。

OperatingSystem サンプル

ステートフルな資源上で行われるオペレーションを CMP/A Entity Bean を使ってプッシュダウンする方法を示すため、WSDL を使用して、OperatingSystem という WS-Resource を定義します。また、「Modeling stateful resource with web services」の記載に従って「Implied Resource パターン」を実装するために、このシリーズのパート 1 の手順に従います。CMP/A EJB 用のデプロイメント記述子を編集することにより、すべてのオペレーティング・システムを検出して ResourceProperties を取得するオペレーションが「プッシュダウン」されます。 図 3 に示すように、実際の OperatingSystem WS-Resource は、オペレーティング・システム用として Pegasus インスツルメンテーション・プロバイダーによって装備され、Pegasus CIMOM への JCA アダプターを使用してアクセスされます。

図 3. OperatingSystem Web サービス
OperatingSystem Web サービス
OperatingSystem Web サービス

この記事のサンプルは、JSP ファイルとして実装されsたテスト用クライアントで構成されています。JSP ファイルは、OperatingSystem サービスのfindAllOperatingSystems オペレーションを呼び出します。これにより、CIMOM サーバーにある OperatingSystem の、すべての WS-Resource に対するエンドポイント・リファレンス (EPR) のリストが返されます。次に、テスト・クライアントは、findAllOperatingSystems オペレーションが返した、最初の OperatingSystem WS-Resource の getResourceProperty オペレーションを呼び出します。

OperatingSystem WS-Resource 用の資源プロパティー・ドキュメント

ここでは、OperatingSystem WS-Resource のプロパティーの定義について考察します。WS-ResourceProperties 仕様では、ResourceProperties ドキュメントは、ResourceProperties 要素の論理的構成を示す XML ドキュメントとして定義されています。ResourceProperties ドキュメントでは、WS-Resource によって実装された状態データの特定のビューまたは射影が定義されます。OperatingSystem WS-Resource には、次の ResourceProperties があります。

Resource Property NameDescriptions
NameThe name of the operating system.
OperationalStatusオペレーティング・システムの現在の正常性と運用状態を示す文字列。
CSNameオペレーティング・システムが実行されているコンピューター・システムの名前。
OSType オペレーティング・システムの種類を示す文字列 (Linux、AIX、Win2000 など)。
Versionオペレーティング・システムのバージョン番号。
numberOfUsersオペレーティング・システムが現在、状態情報を格納しているユーザー・セッションの数。
numberOfProcessesオペレーティング・システムで現在ロードまたは実行されているプロセス・コンテキストの数。
totalSwapSpaceSizeK バイト単位の総スワップ・スペース。スワップ・スペースがページ・ファイルと識別されない場合、この値は NULL (未指定) になります。ただし、オペレーティング・システムによっては、これらの概念が区別される場合もあります。例えば UNIX では、空きページ・リストが指定容量を下回る状態が続いたときに、全プロセスを「スワップ・アウト」することができます。
totalVirtualMemorySize仮想メモリーの K バイト数。
freeVirtualMemory現在未使用で、利用可能な仮想メモリーの K バイト数。
freePhysicalMemory現在未使用で、利用可能な物理メモリーの K バイト数。
totalVisibleMemorySize オペレーティング・システムが利用できる物理メモリーの総容量 (K バイト)。この値は必ずしも実際の物理メモリーの容量ではなく、「利用可能」としてオペレーティング・システムにレポートされた容量です。

WS-ResourceProperties 仕様に従い、WS-Resource を公開する Web サービスの WSDL 定義に ResourceProperties のスキーマを追加する必要があります。リスト 1 に、OperatingSystem WSDL の ResourceProperties のスキーマを示します。その他の詳細については、OperatingSystem.ear ファイルに含まれている OperatingSystem.wsdl ファイルを参照してください。

リスト 1. OperatingSystem ResourceProperties のスキーマ
<xsd:element name="OperationalStatus">
<xsd:complexType>
	<xsd:sequence>
	<xsd:element name="state" 
 type="os:OperationalStateType" 
 minOccurs="0" 	
 maxOccurs="unbounded" />
	</xsd:sequence>
</xsd:complexType>
</xsd:element>

<xsd:element name="CSName" type="os:CSNameType" />
<xsd:element name="OSType" type="os:OSTypeType" />
<xsd:element name="version" type="os:versionType" />
<xsd:element name="numberOfUsers" type="xsd:integer"/>
<xsd:element name="numberOfProcesses" type="xsd:integer"/>
<xsd:element name="totalSwapSpaceSize" type="xsd:long"/>
<xsd:element name="totalVirtualMemorySize" type="xsd:long" />
<xsd:element name="freeVirtualMemory" type="xsd:integer"/>
<xsd:element name="freePhysicalMemory" type="xsd:integer"/>
<xsd:element name="totalVisibleMemorySize" type="xsd:long" />

<!-- RPDoc declaration for OS -->
<xsd:element name="OSProperties" type="os:OSPropertiesType"/>

<xsd:complexType name="OSPropertiesType">
<xsd:sequence>
	<xsd:element ref="os:Name"/>
	<xsd:element ref="os:OperationalStatus"/>
	<xsd:element ref="os:CSName" />
	<xsd:element ref="os:OSType" />
	<xsd:element ref="os:version"/>
	<xsd:element ref="os:numberOfUsers" />
	<xsd:element ref="os:numberOfProcesses" />
	<xsd:element ref="os:totalSwapSpaceSize" />
	<xsd:element ref="os:totalVirtualMemorySize" />
	<xsd:element ref="os:freeVirtualMemory" />
	<xsd:element ref="os:freePhysicalMemory" />
	<xsd:element ref="os:totalVisibleMemorySize" />
	<xsd:element ref="os:resourceID" minOccurs="1" maxOccurs="1" />
	<xsd:element ref="wsrl:CurrentTime" minOccurs="1" maxOccurs="1"/>
	<xsd:element ref="wsrl:TerminationTime" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>		
</xsd:complexType>

リスト 2 に示すように、WS-ResourceProperties ドキュメントの宣言は、ResourceProperties 属性によって WSDL の portType 定義と関連付けられています。詳細については、OperatingSystem.ear ファイルに含まれている OperatingSystem.wsdl ファイルを参照してください。

リスト 2. ポート・タイプと ResourceProperty ドキュメントの関連付け
<wsdl:portType name="OperatingSystem" wsrp:ResourceProperties="os: OSProperties">
...

OperatingSystem インターフェースを定義する

OperatingSystem インターフェースは、findAllOperatingSystems と GetResourceProperty の 2 つのオペレーションをサポートします。

  • これは、OperatingSystem Web サービスのブートストラップ・オペレーションとして想定されています。OperatingSystem Web サービスのアドレス (URL) を把握している Web サービス・クライアントは、このオペレーションを呼び出して、OperatingSystem WS-Resources への EPR のリストを取得することができます。その後、クライアントは 1つ以上の EPR を使用して、特定の OperatingSystem インスタンスに新たなオペレーションを求めることができます。
  • WS-ResourceProperties 仕様によれば、ResourceProperty ドキュメントを公開する portType を実装する Web サービスはすべて、GetResourceProperty メソッド交換を実装している必要があります。OperatingSystem WSDL のコンテキストでは、このオペレーションにより、ユーザーは Qname を使用して OperatingSystem WS-Resource の単一の ResourceProperty を取得できるようになります。

リスト 3 に、WSDL で定義されている 2つのオペレーションを示します。これらの各オペレーションのパーツ、メッセージ、バインディングの詳細については、OperatingSystem.ear ファイルの OperatingSystem.wsdl ファイルを参照してください。

リスト 3. OperatingSystem ポート・タイプの定義
...
<!-- =================== PortType Definitions ===================== -->
<wsdl:portType name="OperatingSystem" wsrp:ResourceProperties="os:OSProperties">
    
 <!-- findAll, typically, will be the first discovery operation by the client. 
      The result of the operation is an array of EPRs -->
 <wsdl:operation name="findAllOperatingSystems">
      <wsdl:input  message="os:findAllOperatingSystemsInputMessage" 
                   name="findAllOperatingSystemsInput"/>
      <wsdl:output message="os:findAllOperatingSystemsOutputMessage" 
                   name="findAllOperatingSystemsOutput"/>
 </wsdl:operation>

<!-- ========= GetResourceProperty: WS-ResourceProperties ====== -->    
<wsdl:operation name="GetResourceProperty">
      <wsdl:input   name="GetResourcePropertyRequest" 
                    message="wsrp:GetResourcePropertyRequest" />
       <wsdl:output name="GetResourcePropertyResponse" 
                    message="wsrp:GetResourcePropertyResponse" />
       <wsdl:fault  name="ResourceUnknownFault" 
                    message="wsrp:ResourceUnknownFault" />
        <wsdl:fault  name="InvalidResourcePropertyQNameFault" 
                     message="wsrp:InvalidResourcePropertyQNameFault" />
</wsdl:operation>
</wsdl:portType>

リスト 4 に、OperatingSystem WSDL を WSDL2Java ユーティリティーを通じて実行した後に得られるサービス・エンドポイント・インターフェース (SEI) を示します。

リスト 4. OperatingSystem メソッドが含まれたサービス・エンドポイント・インターフェース
package com.ibm.samples.ws.os;

public interface OperatingSystem extends java.rmi.Remote 
{

public com.ibm.samples.ws.os.EPRArray 
findAllOperatingSystems() 
throws java.rmi.RemoteException;

public com.ibm.ws.stateful.wsrp.GetResponsePropertyType getResourceProperty(
javax.xml.namespace.QName getResourcePropertyRequest) 
throws java.rmi.RemoteException,  
       com.ibm.ws.stateful.wsrp.InvalidResourcePropertyQNameFaultType, 
       com.ibm.ws.stateful.wsrp.ResourceUnknownFaultType;
}

OperatingSystem のオペレーションの実装

OperatingSystem サービスの実装には、サービス・インターフェースをステートレス Session Bean (OperatingSystemSoapBindingImpl) として実装し、CMP/A Entity Bean (OperatingSystemResource) に状態を保持する、既存の J2EE ベスト・プラクティスが使用されます。OperatingSystem WS-Resource の ResourceProperties は、OperatingSystemResource Bean の属性として定義されます。

リスト 5 のコード断片で、OperatingSystem Web サービスの getResouceProperty オペレーションの実装を見てみましょう。詳細については、OperatingSystem.ear ファイルに含まれている OperatingSystemSoapBindingImpl.java ファイルを参照してください。

リスト 5. GetResourceProperty オペレーションの実装
001 public GetResponsePropertyType getResourceProperty(
002     QName getResourcePropertyRequest) 
003      throws ... {
004    
005     GetResponsePropertyType resp = null;
006     OperatingSystemResourceLocal osResource = null;
007
008     try {
009
010         //
011         // get the WS-Resource addressed by this EPR.
012         //
013         osResource = getOSResource();
014
015     } catch (SOAPException e) {
016         ...
017     }
018    
019     //
020     // get the Requested ResourceProperty.
021     //
022     Object[] objs = getResourceProperty(
023                         osResource, 
024                         getResourcePropertyRequest);
025    
026     resp = new GetResponsePropertyType();
027     resp.set_Any(objs); // set the resource property.
028    
029     return resp;
030 }
031
032
033 private OperatingSystemResourceLocal getOSResource() throws ... {
034
035     ...
036
037     //
038     // get the primary key from context.
039     //
040    OperatingSystemResourceKey osKey = new 
041 OperatingSystemResourceKey();
042    
043     osKey.csCreationClassName = 
044         EPRHelper.getReferencePropertyFromContext(OS_NS,
045         "csCreationClassName");
046     osKey.csName = 
047         EPRHelper.getReferencePropertyFromContext(OS_NS, 
048         "csName");
049     osKey.creationClassName = 
050         EPRHelper.getReferencePropertyFromContext(OS_NS, 
051         "creationClassName");
052     osKey.name = 
053         EPRHelper.getReferencePropertyFromContext(OS_NS, 
054         "name");
055
056     ...
057
058     //
059     // find the resource using the primary key.
060     //
061     ...
062    
063     try {
064         osBean = osHome.findByPrimaryKey(osKey);
065     } catch (FinderException e) {
066         ...
067     }
068
069     ...
070
071     return osBean;
072 }
073
074
075 private Object[] getResourceProperty(
076                     OperatingSystemResourceLocal osResource, 
077                     QName getResourcePropertyRequest) {
078     ...
079    
080     //
081     // get the localpart of the qname for the property.
082     // not using the namespace qualifier.
083     // match case sensitive.
084    String propName = 
085         getResourcePropertyRequest.getLocalPart().toUpperCase(); 
086
087     //
088     // Find the accessor 'get'method on the impl obj that matches 
089     // the local part of the qname.
090     //     
091     Method[] methods = osResource.getClass().getMethods();
092     Method method = null;
093     for (int i = 0; i <methods.length; i++) {
094         if (mname.equalsIgnoreCase("get"+propName)) {
095             method = methods[i];
096             break;
097         }
098     }
099    
100     //
101    // exec the method.
102     //
103    try {
104        objs[0] = method.invoke(osResource, null);
105    } catch ( ... ) {
106        ...
107    }
108
109    return objs;

上のコード断片を詳しく見てみましょう。

  1. 上のコードのリストでは、行 1 から 30 までが getResouceProperty オペレーションの実装です。このオペレーションは、getOSResource と getResourceProperty の 2 つのプライベート・ヘルパー・メソッドを使用します。
  2. 行 41 から 54 は、WASv5WSAExtensions.jar ライブラリーに含まれている EPRHelper ユーティリティー・クラスを利用して EPR から主キーを作成する方法を示しています。主キーが得られた後は、OperatingSystemResource のホームで findByPrimaryKey メソッドを呼び出すことによって、OperatingSystem WS-Resource を探し出すことができます。
  3. ResourceProperty にアクセスするためのメソッド名は、ResourceProperty の QName の localpart に、get を前置すると生成されます。OperatingSystem の ResourceProperty のそれぞれについて、Bean で定義された対応する getter があるとします。メソッドが見つかると (行 091 から 097)、標準の Java reflection API によってそのメソッドが呼び出されます。
  4. findByPrimaryKey オペレーションは、OperatingSystemResource Entity Bean の EJB デプロイメント記述子内に、CMP/A のプッシュダウン・メソッドとして定義されます。

OperatingSystemResource Bean の findByPrimaryKey オペレーションに対するプッシュダウン・メソッドを見てみましょう。リスト 6 に示すように、CMP/A 命名規則に従い、プッシュダウン・メソッド名は ejbFindByPrimaryKey となっています。

リスト 6. ejbFindByPrimaryKey プッシュダウン・メソッドの実装
001 public Record ejbFindByPrimaryKey(OperatingSystemResourceKey arg0, ...)
002   throws ...
003 {
004     ...
005
006   IndexedRecord returnValue = helper.createCCIIndexedRecord();
007   try {
008     ...
009
010      //
011      // create the cimxml request document to get the instance.
012      //
013      Document cimRequest = getInstanceCIMRequest(arg0);
014      Document cimResponse = sendCIMXML(
015                                 cimRequest, 
016                                 "eis/CimConnector1", 
017                                 "GetInstance");
018     
019      Node instanceNode = XPathAPI.selectSingleNode(cimResponse, 
020                                                    "//INSTANCE");
021     
022      returnValue.add(convertToIndexedRecord(instanceNode));
023    
024    ...
025   } catch (Exception e) {
026     ...
027   }
028     ...
029
030   return returnValue;
031 }

上のコード・リストの解説を次に示します。

  1. 行 013 では、getInstanceCIMRequest プライベート・ヘルパー・メソッドを使用して cimRequest ドキュメントが作成されます。このメソッドは、OperatingSystem WS-Resource のインスタンスを受け取る CIM-XML ドキュメントを作成します。
  2. 行 014 では、cimRequest ドキュメントが CIM JCA アダプターを通じて CIMOM に送信されます。
  3. eis/CimConnector1 は、WebSphere Application Server で構成されている CIM JCA アダプター接続ファクトリーの JNDI 名です。この結果が CIM-XML ドキュメントとして返されます。
  4. 行 019 は、XPathAPI を使用して cimResponse ドキュメントから INSTANCE ノードを選択する方法を示しています。

行 022では、ノードはプライベート・ヘルパー関数 convertToIndexedRecord を使用して IndexedRecord に変換され、IndexedRecord に追加されて返されます。

リスト 7 および 8 に、CIM-XML メッセージ交換のサンプルを示します。これは、プッシュダウン・メソッドによって CIM アダプター経由で CIMOM (over HTTP) と交換されるもので、それぞれが要求と応答を表しています。

リスト 7. Sample CIMXML request
<?xml version="1.0" encoding="UTF-8"?>
<CIM CIMVERSION="2.0" DTDVERSION="2.0">
    <MESSAGE ID="1088435131213" PROTOCOLVERSION="1.0">
        <SIMPLEREQ>
            <IMETHODCALL NAME="GetInstance">
                <LOCALNAMESPACEPATH>
                    <NAMESPACE NAME="root"/>
                    <NAMESPACE NAME="cimv2"/>
                </LOCALNAMESPACEPATH>
                <IPARAMVALUE NAME="InstanceName">
                    <INSTANCENAME CLASSNAME="Linux_OperatingSystem">
                        <KEYBINDING NAME="CreationClassName">
                            <KEYVALUE VALUETYPE="string">
                                Linux_OperatingSystem
                            </KEYVALUE>
                        </KEYBINDING>
                        <KEYBINDING NAME="CSCreationClassName">
                            <KEYVALUE VALUETYPE="string">
                                Linux_ComputerSystem
                            </KEYVALUE>
                        </KEYBINDING>
                        <KEYBINDING NAME="CSName">
                            <KEYVALUE VALUETYPE="string">
                                hazelrah.pok.ibm.com
                            </KEYVALUE>
                        </KEYBINDING>
                        <KEYBINDING NAME="Name">

                            <KEYVALUE VALUETYPE="string">
                                hazelrah.pok.ibm.com
                            </KEYVALUE>
                        </KEYBINDING>
                    </INSTANCENAME>
                </IPARAMVALUE>
                <IPARAMVALUE NAME="LOCALONLY">
                    <VALUE>TRUE</VALUE>
                </IPARAMVALUE>
                <IPARAMVALUE NAME="IncludeQualifiers">
                    <VALUE>TRUE</VALUE>
                </IPARAMVALUE>
                <IPARAMVALUE NAME="IncludeClassOrigin">
                    <VALUE>FALSE</VALUE>
                </IPARAMVALUE>
            </IMETHODCALL>
        </SIMPLEREQ>
    </MESSAGE>
</CIM>
リスト 8. Sample CIMXML response
<?xml version="1.0" encoding="utf-8" ?>
<CIM CIMVERSION="2.0" DTDVERSION="2.0">
<MESSAGE ID="1088604271024" PROTOCOLVERSION="1.0">
	<SIMPLERSP>
	<IMETHODRESPONSE NAME="GetInstance">
<IRETURNVALUE>
<INSTANCE CLASSNAME="Linux_OperatingSystem">
<PROPERTY NAME="Caption" TYPE="string">
	<VALUE>Operating System</VALUE>
</PROPERTY>
<PROPERTY NAME="Description" TYPE="string">
	<VALUE>A class derived from OperatingSystem to 
	represents the running Linux OS.</VALUE>
</PROPERTY>
<PROPERTY NAME="ElementName" TYPE="string">
	<VALUE<Red Hat Linux release 8.0 (Psyche)</VALUE>
</PROPERTY>
<PROPERTY NAME="InstallDate" TYPE="datetime">
	<VALUE>20030203094856.000000-240</VALUE>
</PROPERTY>
                  ...
<PROPERTY NAME="OSType" TYPE="uint16">
	<VALUE>36</VALUE>
</PROPERTY>
...
<PROPERTY NAME="Version" TYPE="string">
	<VALUE>Red Hat Linux release 8.0 (Psyche)</VALUE>
</PROPERTY>
...
<PROPERTY NAME="FreeVirtualMemory" TYPE="uint64">
	<VALUE>1605008</VALUE>
</PROPERTY>
<PROPERTY NAME="FreePhysicalMemory" TYPE="uint64">
	<VALUE>60064</VALUE>
</PROPERTY>
<PROPERTY NAME="TotalVisibleMemorySize" TYPE="uint64">
	<VALUE>772412</VALUE>
</PROPERTY>
<PROPERTY NAME="SizeStoredInPagingFiles" TYPE="uint64">
	<VALUE>1566328</VALUE>
</PROPERTY>
<PROPERTY NAME="FreeSpaceInPagingFiles" TYPE="uint64">
	<VALUE>1526548</VALUE>
</PROPERTY>
<PROPERTY NAME="MaxProcessMemorySize" TYPE="uint64">
	<VALUE>4294967295</VALUE>
</PROPERTY>
<PROPERTY NAME="Distributed" TYPE="boolean">
	<VALUE>FALSE</VALUE>
</PROPERTY>
...
</INSTANCE>
	</IRETURNVALUE>
	</IMETHODRESPONSE>
</SIMPLERSP>
</MESSAGE>
</CIM>

OperatingSystem Web サービスの findAllOperatingSystem オペレーション実装は、getResourceProperty の実装と似ています。この場合、EPR に利用できる主キーはありません。このメソッドも CMP/A に「プッシュダウン」されます。詳細については、OperatingSystem.ear ファイルに含まれている OperatingSystemSoapBindingImpl.java ファイルおよび OperatingSystemResourceBeanUserDefinedPushDownMethodsImpl.java ファイルを参照してください。

CIM マッピングの説明

この例では、それぞれのプッシュダウン・メソッドに対して、呼び出すべき対応 CIM オペレーションが存在します。その CIM オペレーションの結果を解析し、1 つ以上の Bean インスタンス上の適切な「結果」に変換しなければなりません。このセクションでは、2 つのオペレーションの CIM マッピングについて詳しく説明します。

この CIM マッピングは、次の前提条件に基づくものとします。

  • すべての接続は、root/cimv2 という名前の CIM ネーム・スペースに対して行われる。これは、Pegasus インストールに付属するデフォルトの CIM ネーム・スペースです。
  • OperatingSystem EJB コンポーネントはCIM_OperatingSystem クラスにマップされる。このマッピングは明示的に想定され、ハードコーディングされます。
  • OperatingSystem 主キーは、名前によって CIM_OperatingSystem クラスのキーにマップされる。
  • OperatingSystem は Linux である。

a. FindAllOperatingSystems: このメソッドの目的は、CIMOM が把握しているオペレーティング・システムのセットを取得し、取得されたセットに対応する Entity Bean インスタンスのセットをアクティブにすることです。この処理は、次の手順で行います。

  1. CIMOM に対して EnumerateInstances オペレーションを呼び出して資源タイプ CIM_OperatingSystem を要求するために、CIM-XML 要求ドキュメントを構成します。
  2. CIM リソース・アダプターの sendCIMXML メソッドを使用して、この CIM-XML を CIMOM に送ります。
  3. CIMOM から返される結果には、1つ以上のオペレーティング・システム・インスタンスのリストが含まれます。
  4. 着信した CIM-XML 応答を解析し、それぞれの OperatingSystem インスタンスに対応する XML 断片を抽出します。XPathAPI を使用してこれを行う方法は、リスト 6 に示されています。
  5. 抽出された各インスタンスごとに、特定の CIM プロパティーの値を取得するために XPath 選択を追加実行します。それぞれの CIM プロパティーを適切な CMP フィールド型に変換してください。
    注 : 一部の ResourceProperties は CIM では利用できず、CIM プロパティーの多くは Web サービスによって公開されません。

CMP フィールドと CIM プロパティーの間のマッピングは、ビルド時に明らかになります。この例では、名前に基づいたシンプルなマッピングが行われるものと想定します。したがって、IndexedRecord に CMP フィールドのVersion の値を追加するには、リスト 9 のコード断片に示すように、CIM-XML 応答を解析して、対応する CIM プロパティーの Version の値を取得する必要があります。

リスト 9. convertToIndexedRecord メソッドの実装
private IndexedRecord convertToIndexedRecord(Node instanceNode) {
	
  IndexedRecord ir = null;
  try {
      ir = helper.createCCIIndexedRecord();
  } catch (ResourceException e) {
      e.printStackTrace();
  }
  String value = "";

  value = getValue(instanceNode, "//PROPERTY[@NAME=\"CreationClassName\"]");
  ir.add(value); value = "";
  …
  …
  …
  value = getValue(instanceNode, "//PROPERTY[@NAME=\"Version\"]");
  ir.add(value); value = "";
  return ir;
}
  1. 抽出されたインスタンスごとに、ResourceProperties (CMP フィールド) を使用して IndexedRecord を正しい順序で構成します。順序はコンテナーによって決定されます。この順序は正しくなければなりません。プッシュダウン・メソッド用の javadoc の一部として CMP フィールドの順序が生成されるので便利です。IndexedRecord ではヌル値は許可されません。
  2. 各 OperatingSystem インスタンスに対応する IndexedRecords が含まれた IndexedRecord を返します。コンテナーは、EJB インスタンスを初期化およびアクティブ化するためにこの IndexedRecord コレクションを使用します。

b. FindByPrimaryKey: このメソッドの目的は、Entity Bean の主キーを使用して、単一の OperatingSystem インスタンスを CIMOM から再取得することです。これらの主キーを CIM プロパティーに変換し、CIMOM に対する適切なオペレーションを呼び出して、そのオペレーションの結果を解析し、Entity Bean に正常に追加する必要があります。この処理は、次の手順で行います。

  1. CIMOM に対して GetInstance オペレーションを呼び出して資源タイプ CIM_OperatingSystem を要求するために、CIM-XML 要求ドキュメントを構成します。
  2. CIM リソース・アダプターの sendCIMXML メソッドを使用して、この CIM-XML を CIMOM に送ります。
  3. CIMOM から返される結果には、最大で 1 つの OperatingSystem インスタンスが含まれます。
  4. 特定の CIM プロパティーの値を取得するために、XPath 選択を追加実行します。
  5. ResourceProperties (CMP フィールド) を使用して、IndexedRecord を正しい順序で構成します。順序はコンテナーによって決定されます。この順序は正しくなければなりません。プッシュダウン・メソッド用の javadoc の一部として CMP フィールド順が生成されるので便利です。IndexedRecord ではヌル値は許可されません。
  6. この IndexedRecord を返します。コンテナーは返された IndexedRecord を使用して EJB インスタンスをアクティブ化し、その値を設定します。

OperatingSystem オペレーションの呼び出し

前のセクションで実装した多様なオペレーションを、クライアントがどのように呼び出すかを見てみましょう。リスト 10 にコードの断片を示します。詳細については、OperatingSystem.ear ファイルに含まれている TestOS.jsp ファイルを参照してください。

リスト 10. サンプル用クライアント・コード
001 try {
002     // Lookup OS SI
003     com.ibm.samples.ws.os.OperatingSystemService osSI =
004        (com.ibm.samples.ws.os.OperatingSystemService)   
005         ic.lookup("java:comp/env/service/OperatingSystemService");
006	
007     ...
008	
009     // Get the OS SEI
010     com.ibm.samples.ws.os.OperatingSystem os =
011 	 (com.ibm.samples.ws.os.OperatingSystem) 
012         osSI.getPort(com.ibm.samples.ws.os.OperatingSystem.class);
013	
014     ...
015	
016     com.ibm.samples.ws.os.EPRArray eprArray = null;
017	
018     ...
019
020     eprArray = os.findAllOperatingSystems();
021
022     if (eprArray != null && eprArray.getEndpointReference().length > 0) 
023 		listOfOSes = eprArray.getEndpointReference();
024		
025     if (listOfOSes != null && listOfOSes.length != 0)
026 		anOS = listOfOSes[0];
027     ...
028
029     if (listOfOSes != null) {
030         ...
031
032         if (anOS != null) {
033
034         ...
035 	  com.ibm.ws.stateful.utils.JAXRPCHelper.setEPR(
036 				(javax.xml.rpc.Stub) os,
037 	 			                     anOS);
038         ...
039	  com.ibm.ws.stateful.wsrp.GetResponsePropertyType resp 
040             = os.getResourceProperty(
041 		      new javax.xml.namespace.QName(
042 		      "http://OperatingSystem.odirm.ibm.com",
043 			  "freeVirtualMemory"));
044         Object[] obj = resp.get_Any();
045 	  Integer nameValue = (Integer) obj[0];
046 	  ...
047		
048         } // end anOS!=null
049     } // end if listOfOSes != null 
050
051 } catch (Exception e) {
052 	e.printStackTrace();
053 	success += e.getMessage();
054 }

上のコード・サンプルを詳しく見てsみましょう。

  1. 行 2 から 12 では、OperatingSystem Web サービスを検索し、SEI へのハンドルを取得します。
  2. 行 20 では、前の手順で取得した OperatingSystem SEI の findAllOperatingSystems オペレーションを呼び出し、様々なオペレーティング・システム用の EPR の配列を取得します。
  3. 行 22 から 34 では、前の手順で取得されたリストから、ヌルでないひとつのオペレーティング・システムを選択します。
  4. 行 35 から 37 では、前の手順で選択したオペレーティング・システムの EPR を OperatingSystem Web サービスのスタブ・インスタンスに追加します。これにより、スタブを経由する後続の要求に、SOAP メッセージ・ヘッダーとして EPR 情報が組み込まれます。
  5. 行 39 から 45 では、getResourceProperty オペレーションを呼び出して、OperatingSystem WS-Resource の freeVirtualMemory プロパティーの値を取得します。

GetResourceProperty 要求は Implied Resource パターンに従っています。つまり、ターゲットとなる暗黙的資源を識別するためにサービスが必要とする識別子の値は、WS-Addressing リファレンス・プロパティーに含まれています。これらは、GetResourceProperty 要求メッセージの一部として、SOAP ヘッダーに含まれていなければなりません。リスト 11 および 12 に、GetResourceProperty メッセージ交換の SOAP エンコーディングを示します。

リスト 11. GetResourceProperty 要求の SOAP メッセージ
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    
    <soapenv:Header 
    xmlns:wsa="http://schemas.xmlsoap.org/ws/2003/03/addressing">
        <wsa:To xmlns: ... >
            http://localhost:9080/OperatingSystemWeb/services/OperatingSystemPort
        </wsa:To>
        <csCreationClassName xmlns: ... >
            Linux_ComputerSystem
        </csCreationClassName>
        <csName xmlns: ... >
            hazelrah.pok.ibm.com
        </csName>
        <creationClassName xmlns: ... >
            Linux_OperatingSystem
        </creationClassName>
        <name xmlns: ... >
            hazelrah.pok.ibm.com
        </name>
    </soapenv:Header>
    <soapenv:Body>
        <GetResourcePropertyRequest 
        xmlns:ns914761362="http://OperatingSystem.samples.ibm.com" 
        xmlns="
        http://www.ibm.com/xmlns/stdwip/web-services/WS-ResourceProperties">
            ns914761362:freeVirtualMemory
        </GetResourcePropertyRequest>
    </soapenv:Body>
</soapenv:Envelope>
リスト 12. GetResourceProperty 応答の SOAP メッセージ
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Body>
        <GetResourcePropertyResponse 
            xmlns="
            http://www.ibm.com/xmlns/stdwip/web-services/WS-ResourceProperties">
            <_any xsi:type="xsd:int" xmlns="">1588532</_any>
        </GetResourcePropertyResponse>
    </soapenv:Body>
</soapenv:Envelope>

Pegasus CIMOM のインストール

このセクションでは、Pegasus CIMOM のダウンロード、コンパイル、テストに必要な手順を説明します。

  1. OpenPegasus Web サイトの「Release Snapshots」ページにアクセスします。
    図 4. OpenPegasus CIMOM 2.3.2 のダウンロード・ページ
    OpenPegasus CIMOM 2.3.2 のダウンロード・ページ
    OpenPegasus CIMOM 2.3.2 のダウンロード・ページ
  2. 図 4 に示すように、ソース・リリースの一覧で 2.3.2 ポイントのリリースを選択し、「GZ」のリンクを使用して、任意のディレクトリーに Pegasus-2.3.2.tar.gz をダウンロードします。
  3. Pegasus をビルドするには GNUMAKE ユーティリティーが必要ですが、これは http://www.gnu.org から入手できます。Pegasus の依存関係の詳細については、「Release 2.3.2 README」を参照してください。
  4. ダウンロードしたファイルを任意のディレクトリー $(YOURDIR) に unzip および untar します。これにより、$(YOURDIR)/pegasus-2.3.2 というディレクトリーが作成されます。
  5. 次の 3 つの環境変数を定義します。
    1. PEGASUS_ROOT: $(YOURDIR)/pegasus-2.3.2 とします。
    2. PEGASUS_HOME: 出力バイナリー・ファイルが含まれるディレクトリーをポイントするように設定します (例: $HOME/pegasus_home に設定)。バイナリーは $HOME/pegasus_home/bin and $HOME/pegasus_home/lib に出力されます。
    3. PEGASUS_PLATFORM: サポートされるプラットフォーム識別子に設定します。この識別子の形式は [Operating-System]_[Architecture]_[Compiler] となります。例えば、IA32 プラットフォームの Linux で GNU コンパイラを使用する場合は、LINUX_IX86_GNU です。
  6. パスに $PEGASUS_HOME/bin を含めます。
  7. LD_LIBRARY_PATH に $PEGASUS_HOME/lib を含めます (UNIX の場合のみ)。RedHat/SuSE/UL の場合は、/etc/ld.so.conf を編集して $PEGASUS_HOME/lib を追加してください。
  8. CMPI を使用可能にするため、make を実行する前に次の環境変数を設定します。
    • ENABLE_PROVIDER_MANAGER2=1
    • ENABLE_CMPI_PROVIDER_MANAGER=1
    • Please refer to the readme.cmpi file in $(YOURDIR)/pegasus-2.3.2 for further details.
  9. 詳細については、$(YOURDIR)/pegasus-2.3.2 の readme.cmpi ファイルを参照してください。
  10. Pegasus 配布版のルートの $(YOURDIR)/pegasus-2.3.2 に移動し、make と入力して (makeが GNU make をポイントしている場合)、しばらく待機します。
  11. 次に、リポジトリーを作成します。これはデータの配布に必要です。$(YOURDIR)/pegasus-2.3.2 で、make repository と入力します。 これで、Pegasus のセットアップは完了です。次の手順に従って、インストールをテストしてください。
    • コマンド cimserver & で cimserver を開始します。cimserver 実行可能ファイルは $PEGASUS_HOME/bin にあります。
    • CLI ei CIM_OperatingSystem と入力し、オペレーティング・システムのインスタンスを列挙します。Pegasus が正しく設定されていれば、PG_OperatingSystem のインスタンスが表示されます。CLI も、$PEGASUS_HOME/bin にあります。
    • CLI ei CIM_Process と入力し、プロセスのインスタンスを列挙します。PG_UnixProcess のリストが表示されます。
    • コマンド cimserver -s で cimserver を停止します。

SBLIM プロバイダーのインストール

注: 2005年7月現在は、sourceforgeプロジェクトへのリンクが示されています。

このセクションでは、SBLIM プロバイダーのダウンロード、コンパイル、テストに必要な手順を説明します。

  • SBLIM インスツルメンテーション Web ページにアクセスします。
    http://oss.software.ibm.com/developerworks/oss/sblim/instrumentation.html
  • 「Description」列で、ソースを tarball として入手するためのリンクに従って「sblim-cmpi-base」をクリックします。
  • バージョン 1.2.5 の sblim-cmpi-base パッケージを選択し、sblim-cmpi-base-1.2.5.tar.gz を任意のディレクトリーにダウンロードします。
    図 5. SBLIM インスツルメンテーション・プロバイダーのダウンロード・ページ
    SBLIM インスツルメンテーション・プロバイダーのダウンロード・ページ
    SBLIM インスツルメンテーション・プロバイダーのダウンロード・ページ
  • $(YOURDIR)/sblim-cmpi-base-1.2.5 ディレクトリーで、setting.cmpi を編集します。「Pegasus flavor」というセクションを探します。次に、CIMOMINC 変数が CIMOMINC=$(PEGASUS_ROOT)/src/Pegasus/Provider/CMPI として設定されていることを確認します。
  • $(YOURDIR)/sblim-smpi-base-1.2.5 の下に、include というディレクトリーを作成します。次に、COMMONINC を COMMONINC=$(YOURDIR)/sblim-cmpi-base-1.2.5/include に変更します。これは、ビルド中にインクルード・ファイルがコピーされる場所です。
  • $(YOURDIR)/sblim-cmpi-base-1.2.5 から make を実行し、その後 make install を実行します。
  • これで、SBLIM のセットアップは完了です。次の手順に従って、インストールをテストしてください。
    • コマンド cimserver & で cimserver を開始します。cimserver 実行可能ファイルは $PEGASUS_HOME/bin にあります。
    • CLI ei CIM_OperatingSystem と入力し、オペレーティング・システムのインスタンスを列挙します。Pegasus が正しく設定されていれば、Linux_OperatingSystem. のインスタンスが表示されます。CLI も、$PEGASUS_HOME/bin にあります。
    • CLI ei CIM_Process と入力し、プロセスのインスタンスを列挙します。Linux_UnixProcess のリストが表示されます。
    • CLI ei CIM_OSProcess と入力し、OperatingSystem と Process の間の association のインスタンスを列挙します。OSProcess インスタンスのリストが表示されます。
    • コマンド cimserver -s で cimserver を停止します。

OperatingSystem Web サービスのセットアップと実行

このセクションでは、WebSphere Application Developer Integration Edition V5.1.0 (Application Developer) で、OperatingSystem サンプルが含まれるワークスペースを作成する方法と、組み込まれた WebSphere Application Server Test Environment (Test Environment) をセットアップする方法を説明します。

  1. Application Developer で、cmpa という名前の新しいワークスペースを作成します。
  2. Application Developer で、ターゲット・サーバー指定機能を使用可能にします。そのためには、「ウィンドウ」 > 「設定」 > 「J2EE」 >「サーバー・ターゲット・サポートを使用可能にする」を選択します。
  3. J2EE CIM コネクターの CimConnector.rar を、スタンドアロン・コネクター・プロジェクトとしてワークスペースにインポートします。これにより、CimConnector という名前の新しいコネクター・プロジェクトが作成されます。
  4. CMPA アダプターをインポートします。そのためには、cmpaAdapter.rar を新しいコネクター・プロジェクトにインポートします。これにより、cmpaAdapterConnector プロジェクトが作成されます。cmpaAdapter.rar ファイルは、組み込まれた WebSphere Test Environment ディレクトリーの installableApps ディレクトリーから取得できます。当社のインストールでは、このディレクトリーは C:\IBM\WebSphereStudio\runtimes\ee_v51\installableApps になっています。
  5. OperatingSystem.ear ファイルをワークスペースにインポートします。ターゲット・サーバーとして Integration Server V5.1 が選択されていることを確認してください。これにより、次のプロジェクトが作成されます。
    1. OperatingSystem という名前のエンタープライズ・アプリケーション・プロジェクト (J2EE 1.3)
    2. Web サービス・ルーター・プロジェクトが含まれる、OperatingSystemWeb という名前の動的 Web プロジェクト
    3. OperatingSystem EJB コンポーネントの実装が含まれる、OperatingSystemEJB という名前の Enterpise Java Beans プロジェクト
    4. OperatingSystem サービスに対する Web サービス・クライアントとテスト用 JSP ファイルが含まれる、OperatingSystemClientWeb という名前の動的 Web プロジェクト
  6. CimConnector プロジェクトを OperatingSystemEJB プロジェクトの Java ビルド・パスに追加します。
  7. WebSphere Version 5.1 Integration Test Environment という名前の新しいサーバーとサーバー構成を、Application Developer のサーバー・パースペクティブに作成します。サーバーの種類として「WebSphere version 5.1」 > 「Integration Test Environment」を使用します。
  8. CIM コネクターをテスト・サーバー構成に追加します。
    1. 手順 7 で作成したテスト・サーバーの「J2C Configuration」設定ウィンドウを使用して、J2C リソース・アダプターの CimConnector を追加します。これにより、「Create Resource Adapter」ダイアログ・ボックスが表示されます。このダイアログ・ボックスのドロップダウン・リストから「CimConnector」を選択し、「OK」をクリックします。
    2. 「CimConnector」を選択し、J2C 接続ファクトリーに次の情報を追加します。
      1. 名前 : CimConnector
      2. eis/CimConnector1
    3. CIMOM サーバー JNDI 名 : が実行されているサーバーをポイントするように、ServerName の Resource Property 値を設定します。
  9. CMPA アダプターをテスト・サーバー構成に追加します。
    1. 手順 7 で作成したテスト・サーバーの「J2C Configuration」設定ウィンドウを使用して、J2C リソース・アダプターの cmpaAdapterConnector を追加します。これにより、「Create Resource Adapter」ダイアログ・ボックスが表示されます。このダイアログ・ボックスのドロップダウン・リストから「cmpaAdapterConnector」を選択し、「OK」をクリックします。
    2. 「cmpaAdapterConnector」を選択し、J2C 接続ファクトリーに次の情報を追加します。
      1. 名前 : CMPAConnector
      2. JNDI 名 : eis/CmpAConnectorFactory
  10. WebSphere Test Environment を開始します。サーバー・パースペクティブで、OperatingSystemEAR プロジェクトをサーバーに追加し、パブリッシュして開始します。
  11. クライアントを実行します。OperatingSystemClientWeb プロジェクトで「TestOS.jsp」を右クリックし、「サーバーで実行」を選択します。これにより、「サーバーの選択」ダイアログが開きます。この画面で、「既存のサーバーを使用」ラジオ・ボタンが選択され、「サーバーをプロジェクト・デフォルトとして設定」がオンになっていることを確認します。「終了」をクリックします。これにより、Application Developer で Web ブラウザが起動します。Web サービスの呼び出しが成功すると、オペレーティング・システムのリストと、freeVirtualMemory ResourceProperty の値が表示されます。
図 6. OperatingSystem サービスの呼び出しの成功
OperatingSystem サービスの呼び出しの成功
OperatingSystem サービスの呼び出しの成功

まとめ

この記事では、CMP/A Entity Bean によって状態がモデル化された WS-Resource プロパティーに対して Web サービス・インターフェースがどのようにアクセスするかを説明しました。また、CMP/A Entity Bean のプッシュダウン・メソッド内から CIM JCA コネクターと CIM-XML を使用して CIMOM サーバーと対話する方法についても学びました。CIMOM サーバーは、SBLIM インスツルメンテーション・プロバイダーを使用することによって、WS-Resource の状態をネイティブに管理します。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=SOA and web services
ArticleID=244789
ArticleTitle=WebSphere Studio を使用したステートフル Web サービスの実装とアクセス、パート 4
publish-date=07272004