レベル: 中級 Hidayatullah Shaikh (hshaikh@us.ibm.com), Senior Software Engineer, IBM Jaipaul Antony (jantony@us.ibm.com), Advisory Software Engineer, IBM Corporation Revathi Subramanian (revathi@us.ibm.com), Senior Software Engineer, IBM Corporation
2004年 7月 27日
Web Services ResouResource
に関連付けられたデータを照会および変更する方法が定義されています。これにより、WS-Resource
に関連付けられたデータにクライアントがアクセスする際に利用できる標準手段が提供されます。ここでは、Web
サービスのフロントエンドとなる動的 WS-Resources が、WebSphere Studio
Application Developer Integration Edition V5.1.0 を使用して IBMR
WebSphereR Business Integration Server Frce Properties
仕様では、Web サービス・テクノロジーを使用して、ステートフルな WS-oundation V5.1
環境内の実際の物理的資源との間のインターフェースとなる方法について取り上げます。
はじめに
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
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 サービス・オペレーション呼び出しの概念的な流れ
配備時には、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 サービス
この記事のサンプルは、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 Name | Descriptions |
|---|
| Name | The name of the operating system. | | OperationalStatus | オペレーティング・システムの現在の正常性と運用状態を示す文字列。 | | CSName | オペレーティング・システムが実行されているコンピューター・システムの名前。 | | OSType |
オペレーティング・システムの種類を示す文字列 (Linux、AIX、Win2000 など)。
| | Version | オペレーティング・システムのバージョン番号。 | | numberOfUsers | オペレーティング・システムが現在、状態情報を格納しているユーザー・セッションの数。 | | numberOfProcesses | オペレーティング・システムで現在ロードまたは実行されているプロセス・コンテキストの数。 | | totalSwapSpaceSize |
K
バイト単位の総スワップ・スペース。スワップ・スペースがページ・ファイルと識別されない場合、この値は
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 から 30 までが getResouceProperty
オペレーションの実装です。このオペレーションは、getOSResource と
getResourceProperty の 2 つのプライベート・ヘルパー・メソッドを使用します。
-
行 41 から 54 は、WASv5WSAExtensions.jar ライブラリーに含まれている
EPRHelper ユーティリティー・クラスを利用して EPR
から主キーを作成する方法を示しています。主キーが得られた後は、OperatingSystemResource
のホームで findByPrimaryKey
メソッドを呼び出すことによって、OperatingSystem WS-Resource
を探し出すことができます。
-
ResourceProperty にアクセスするためのメソッド名は、ResourceProperty の
QName の localpart に、get を前置すると生成されます。OperatingSystem
の ResourceProperty のそれぞれについて、Bean で定義された対応する getter
があるとします。メソッドが見つかると (行 091 から 097)、標準の Java
reflection API によってそのメソッドが呼び出されます。
-
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 }
|
上のコード・リストの解説を次に示します。
-
行 013 では、getInstanceCIMRequest プライベート・ヘルパー・メソッドを使用して
cimRequest ドキュメントが作成されます。このメソッドは、OperatingSystem
WS-Resource のインスタンスを受け取る CIM-XML ドキュメントを作成します。
-
行 014 では、cimRequest ドキュメントが CIM JCA アダプターを通じて CIMOM
に送信されます。
-
eis/CimConnector1 は、WebSphere Application Server
で構成されている CIM JCA アダプター接続ファクトリーの JNDI 名です。この結果が
CIM-XML ドキュメントとして返されます。
-
行 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
インスタンスのセットをアクティブにすることです。この処理は、次の手順で行います。
-
CIMOM に対して EnumerateInstances オペレーションを呼び出して資源タイプ
CIM_OperatingSystem を要求するために、CIM-XML 要求ドキュメントを構成します。
-
CIM リソース・アダプターの sendCIMXML メソッドを使用して、この CIM-XML を
CIMOM に送ります。
-
CIMOM から返される結果には、1
つ以上のオペレーティング・システム・インスタンスのリストが含まれます。
-
着信した CIM-XML 応答を解析し、それぞれの OperatingSystem
インスタンスに対応する XML 断片を抽出します。XPathAPI を使用してこれを行う方法は、
リスト 6
に示されています。
-
抽出された各インスタンスごとに、特定の 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;
}
|
-
抽出されたインスタンスごとに、ResourceProperties (CMP フィールド) を使用して
IndexedRecord
を正しい順序で構成します。順序はコンテナーによって決定されます。この順序は正しくなければなりません。プッシュダウン・メソッド用の
javadoc の一部として CMP
フィールドの順序が生成されるので便利です。IndexedRecord ではヌル値は許可されません。
-
各 OperatingSystem インスタンスに対応する IndexedRecords が含まれた
IndexedRecord を返します。コンテナーは、EJB
インスタンスを初期化およびアクティブ化するためにこの IndexedRecord
コレクションを使用します。
b.
FindByPrimaryKey: このメソッドの目的は、Entity Bean の主キーを使用して、単一の
OperatingSystem インスタンスを CIMOM から再取得することです。これらの主キーを CIM
プロパティーに変換し、CIMOM
に対する適切なオペレーションを呼び出して、そのオペレーションの結果を解析し、Entity Bean
に正常に追加する必要があります。この処理は、次の手順で行います。
-
CIMOM に対して GetInstance オペレーションを呼び出して資源タイプ
CIM_OperatingSystem を要求するために、CIM-XML 要求ドキュメントを構成します。
-
CIM リソース・アダプターの sendCIMXML メソッドを使用して、この CIM-XML を
CIMOM に送ります。
-
CIMOM から返される結果には、最大で 1 つの OperatingSystem
インスタンスが含まれます。
- 特定の CIM プロパティーの値を取得するために、XPath 選択を追加実行します。
-
ResourceProperties (CMP フィールド) を使用して、IndexedRecord
を正しい順序で構成します。順序はコンテナーによって決定されます。この順序は正しくなければなりません。プッシュダウン・メソッド用の
javadoc の一部として CMP フィールド順が生成されるので便利です。IndexedRecord
ではヌル値は許可されません。
-
この 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みましょう。
-
行 2 から 12 では、OperatingSystem Web サービスを検索し、SEI
へのハンドルを取得します。
-
行 20 では、前の手順で取得した OperatingSystem SEI の
findAllOperatingSystems
オペレーションを呼び出し、様々なオペレーティング・システム用の EPR の配列を取得します。
-
行 22 から 34
では、前の手順で取得されたリストから、ヌルでないひとつのオペレーティング・システムを選択します。
-
行 35 から 37 では、前の手順で選択したオペレーティング・システムの EPR を
OperatingSystem Web
サービスのスタブ・インスタンスに追加します。これにより、スタブを経由する後続の要求に、SOAP
メッセージ・ヘッダーとして EPR 情報が組み込まれます。
-
行 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 のダウンロード、コンパイル、テストに必要な手順を説明します。
-
OpenPegasus Web サイトの「Release Snapshots」ページにアクセスします。
図 4. OpenPegasus CIMOM 2.3.2 のダウンロード・ページ
-
図 4
に示すように、ソース・リリースの一覧で 2.3.2
ポイントのリリースを選択し、「GZ」のリンクを使用して、任意のディレクトリーに
Pegasus-2.3.2.tar.gz をダウンロードします。
-
Pegasus をビルドするには GNUMAKE ユーティリティーが必要ですが、これは
http://www.gnu.org
から入手できます。Pegasus の依存関係の詳細については、「Release 2.3.2
README」を参照してください。
-
ダウンロードしたファイルを任意のディレクトリー $(YOURDIR) に unzip および untar
します。これにより、$(YOURDIR)/pegasus-2.3.2
というディレクトリーが作成されます。
-
次の 3 つの環境変数を定義します。
-
PEGASUS_ROOT:
$(YOURDIR)/pegasus-2.3.2 とします。
-
PEGASUS_HOME:
出力バイナリー・ファイルが含まれるディレクトリーをポイントするように設定します (例:
$HOME/pegasus_home に設定)。バイナリーは
$HOME/pegasus_home/bin and
$HOME/pegasus_home/lib に出力されます。
-
PEGASUS_PLATFORM:
サポートされるプラットフォーム識別子に設定します。この識別子の形式は
[Operating-System]_[Architecture]_[Compiler]
となります。例えば、IA32 プラットフォームの Linux で GNU
コンパイラを使用する場合は、LINUX_IX86_GNU です。
- パスに $PEGASUS_HOME/bin を含めます。
-
LD_LIBRARY_PATH に $PEGASUS_HOME/lib を含めます (UNIX
の場合のみ)。RedHat/SuSE/UL の場合は、/etc/ld.so.conf を編集して
$PEGASUS_HOME/lib を追加してください。
-
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.
-
詳細については、$(YOURDIR)/pegasus-2.3.2 の readme.cmpi
ファイルを参照してください。
-
Pegasus 配布版のルートの $(YOURDIR)/pegasus-2.3.2 に移動し、make
と入力して (makeが GNU make をポイントしている場合)、しばらく待機します。
-
次に、リポジトリーを作成します。これはデータの配布に必要です。$(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 インスツルメンテーション・プロバイダーのダウンロード・ページ
-
$(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)
をセットアップする方法を説明します。
-
Application Developer で、cmpa という名前の新しいワークスペースを作成します。
-
Application Developer で、
ターゲット・サーバー
指定機能を使用可能にします。そのためには、「ウィンドウ」 > 「設定」 > 「J2EE」 >
「サーバー・ターゲット・サポートを使用可能にする」を選択します。
-
J2EE CIM コネクター
の CimConnector.rar
を、スタンドアロン・コネクター・プロジェクトとしてワークスペースにインポートします。これにより、CimConnector
という名前の新しいコネクター・プロジェクトが作成されます。
-
CMPA アダプターをインポートします。そのためには、cmpaAdapter.rar
を新しいコネクター・プロジェクトにインポートします。これにより、cmpaAdapterConnector
プロジェクトが作成されます。cmpaAdapter.rar ファイルは、組み込まれた WebSphere
Test Environment ディレクトリーの installableApps
ディレクトリーから取得できます。当社のインストールでは、このディレクトリーは
C:\IBM\WebSphere
Studio\runtimes\ee_v51\installableApps になっています。
-
OperatingSystem.ear
ファイルをワークスペースにインポートします。ターゲット・サーバーとして Integration
Server V5.1
が選択されていることを確認してください。これにより、次のプロジェクトが作成されます。
-
OperatingSystem
という名前のエンタープライズ・アプリケーション・プロジェクト (J2EE 1.3)
-
Web サービス・ルーター・プロジェクトが含まれる、OperatingSystemWeb
という名前の動的 Web プロジェクト
-
OperatingSystem EJB
コンポーネントの実装が含まれる、OperatingSystemEJB という名前の
Enterpise Java Beans プロジェクト
-
OperatingSystem サービスに対する Web
サービス・クライアントとテスト用 JSP
ファイルが含まれる、OperatingSystemClientWeb という名前の動的
Web プロジェクト
-
CimConnector プロジェクトを OperatingSystemEJB プロジェクトの Java
ビルド・パスに追加します。
-
WebSphere Version 5.1 Integration Test Environment
という名前の新しいサーバーとサーバー構成を、Application Developer
のサーバー・パースペクティブに作成します。サーバーの種類として「WebSphere version
5.1」 > 「Integration Test Environment」を使用します。
-
CIM コネクターをテスト・サーバー構成に追加します。
-
手順 7 で作成したテスト・サーバーの「J2C
Configuration」設定ウィンドウを使用して、J2C リソース・アダプターの
CimConnector を追加します。これにより、「Create Resource
Adapter」ダイアログ・ボックスが表示されます。このダイアログ・ボックスのドロップダウン・リストから「CimConnector」を選択し、「
OK
」をクリックします。
-
「CimConnector」を選択し、J2C 接続ファクトリーに次の情報を追加します。
-
名前 :
CimConnector
- eis/CimConnector1
-
CIMOM サーバー
JNDI 名 :
が実行されているサーバーをポイントするように、ServerName の Resource
Property 値を設定します。
-
CMPA アダプターをテスト・サーバー構成に追加します。
-
手順 7 で作成したテスト・サーバーの「J2C
Configuration」設定ウィンドウを使用して、J2C リソース・アダプターの
cmpaAdapterConnector を追加します。これにより、「Create
Resource
Adapter」ダイアログ・ボックスが表示されます。このダイアログ・ボックスのドロップダウン・リストから「cmpaAdapterConnector」を選択し、「
OK
」をクリックします。
-
「cmpaAdapterConnector」を選択し、J2C
接続ファクトリーに次の情報を追加します。
-
名前 :
CMPAConnector
-
JNDI 名 :
eis/CmpAConnectorFactory
-
WebSphere Test Environment
を開始します。サーバー・パースペクティブで、OperatingSystemEAR
プロジェクトをサーバーに追加し、パブリッシュして開始します。
-
クライアントを実行します。OperatingSystemClientWeb プロジェクトで「
TestOS.jsp
」を右クリックし、「サーバーで実行」を選択します。これにより、「サーバーの選択」ダイアログが開きます。この画面で、「既存のサーバーを使用」ラジオ・ボタンが選択され、「サーバーをプロジェクト・デフォルトとして設定」がオンになっていることを確認します。「
終了
」をクリックします。これにより、Application Developer で Web
ブラウザが起動します。Web
サービスの呼び出しが成功すると、オペレーティング・システムのリストと、freeVirtualMemory
ResourceProperty の値が表示されます。
図 6. OperatingSystem サービスの呼び出しの成功
まとめ
この記事では、CMP/A Entity Bean によって状態がモデル化された WS-Resource
プロパティーに対して Web
サービス・インターフェースがどのようにアクセスするかを説明しました。また、CMP/A Entity Bean
のプッシュダウン・メソッド内から CIM JCA コネクターと CIM-XML を使用して CIMOM
サーバーと対話する方法についても学びました。CIMOM サーバーは、SBLIM
インスツルメンテーション・プロバイダーを使用することによって、WS-Resource
の状態をネイティブに管理します。
ダウンロード | 内容 | ファイル名 | サイズ | ダウンロード形式 |
|---|
| ws-statefulws4code.zip | ws-statefulws4code.zip | 763KB |
FTP |
|---|
参考文献
-
Read the first three parts of the series "Implement
and access stateful Web services using WebSphere
Studio:"
-
Get more information on CIM at the
DMTF Web site
.
-
Download the
IBM Grid Toolbox
from alphaWorks.
-
Explore the Open Group's
Pegasus open source project
and then
download the OpenPegasus 2.3.2 Release
.
-
See the
Standards Based Linux Instrumentation for
Manageability
(SBLIM) project and then
download the SBLIM instrumentation provider
.
-
Obtain more information on J2EE Connector
Architecture (JCA), including the specification,
from the
Sun Developer Network Site
.
-
Read the paper, "
IBM WebSphere Business Integration Server
Foundation, Version 5.1: Applications
" (
IBM
, April 2004).
-
For more information on J2EE Web services, check out
Part 1
and
Part 2
of Greg Flurry's series, "Support for J2EE Web
Services in WebSphere Studio Application Developer
V5.1" (
developerWorks
, October 2003).
-
Download the
WS-Addressing
Specification from developerWorks. WS-Addressing is
an XML serialization and standard SOAP binding for
representing network-wide pointers to services.
-
Get more information on the Web Services Resource
Framework, from
Web Services Notification
and
Web Services Resource Framework
, a set of specifications (including the
WS-ResourceProperties specification) you can find at
IBM developerWorks.
-
Find more information on tcpmon in the
Axis User's Guide
.
-
Learn more about the Implied Resource pattern in "
Modeling stateful resource with Web services
" a whitepaper by Ian Foster, Jeffrey Frey, Steve
Graham, Steve Tuecke, Karl Czajkowski, Don Ferguson,
Frank Leymann, Martin Nally, Tony Storey, William
Vambenepe, and Sanjiva Weerawarana (
developerWorks
, January 2004)
-
Access Web services knowledge, tools, and skills
with
Speed-start Web services
, which offers the latest Java-based software
development tools and middleware from IBM (trial
editions), plus online tutorials and articles, and
an online technical forum.
-
Visit the
Developer Bookstore
for a comprehensive listing of technical books,
including hundreds of
Web services titles
.
-
Want more? The developerWorks
SOA and Web services zone
hosts hundreds of informative articles and
introductory, intermediate, and advanced tutorials
on how to develop Web services applications.
著者について  | |  | Hidayatullah H. Shaikh is a senior software engineer on the IBM Software Group On-Demand Architecture and Development Team. His areas of interest and expertise include business process modeling and integration, service-oriented architectures, grid computing, e-commerce, J2EE technology, and database management (DBMSs) technologies. You can contact Hidayatullah at hshaikh@us.ibm.com. |
 | |  | Jaipaul Antony is an Advisory Software Engineer with the eServer Advanced Systems Infrastructure Development team in IBM Systems and Technology Group. His areas of interest are primarily in the emerging fields of Web services and grid computing. You can contact Jaipaul at jantony@us.ibm.com. |
 | |  | Revathi Subramanian is a Senior Software Engineer with the Advanced Systems Infrastructure Development Team in IBM Systems Group. Her areas of expertise include e-commerce applications, grid computing, Java technology and Web services, while her real interests lie in natural language processing, speech recognition, creative writing, and foreign languages. You can contact Revathi at revathi@us.ibm.com. |
記事の評価
|