IBM®
本文へジャンプ
    Japan [変更]    ご利用条件
 
 
検索範囲検索:    
    ホーム    製品    サービス & ソリューション    サポート & ダウンロード    マイアカウント    
skip to main content

developerWorks Japan  >  Lotus | SOA and Web services  >

WS-I に準拠した Web サービスを IBM Lotus Domino 8 用に設計する

developerWorks
ページオプション

JavaScript を要するドキュメントオプションは表示されません

原文はこちら

原文はこちら


レベル: 中級

Stephen Kruger (Stephen_Kruger@ie.ibm.com), SOA Architect, IBM
Massimiliano Parlione (MPARLION@ie.ibm.com), Senior Software Engineer, IBM
David Mills (David_Mills@ie.ibm.com), Software Engineer, IBM
Stephen McNena (StephenMcNena@ie.ibm.com), Software Engineer, IBM
Matt Healy (HEALYMAT@ie.ibm.com), Software Engineer, IBM
Frederic Biava (BIAVAFRE@ie.ibm.com), Software Engineer, IBM

2007年 5月 15日

WS-I Basic Profile 1.1 に準拠した LotusScript ベースの Web サービスを IBM Lotus Domino V8 用に設計する方法を学びましょう。ここでは例として Discussion データベース・テンプレートを使いながら、Lotus Domino V8 のための Web サービスを設計、実装するための方法と、Lotus Domino V7.0.2 との後方互換性を維持する方法を学びます。

[編集者による注記: この記事で説明する IBM Lotus Domino 8 の機能と更新は、ベータ版のソフトウェアに基づいています。この記事と、記事の中で使用するスクリーン・ショットは、最終的に出荷される製品の機能を反映している場合と、反映していない場合があります。]

この記事は、Lotus Domino 7.0.2 との後方互換性を維持しながら Lotus Domino 8 のための Web サービスを開発するための方法について説明します。この記事で使用するは、Discussion データベース・テンプレートのための一連の Web サービスです。このソリューションは、IBM が Dublin Software Lab で継続的に行っている SOA (Service-Oriented Architecture) Growth Project イニシアチブの一部で、SOA への統合を容易に実現できる技術を用いて IBM 製品を増強することにより、SOA ベースのソリューションの採用を促進しようとしています。このソリューションの主な目的は次の 2 つです。

  1. Discussion データベース・テンプレート上に Web サービス・レイヤーを設計し、重要なテンプレート機能を公開することにより、そうした機能を Web サービス・クライアントが利用できるようにする。
  2. 作成される Web サービスが WS-I Basic Profile 1.1 に準拠することを保証し、さまざまな Web サービス・エンジンやプログラミング言語にまたがる相互運用性を向上させる。

Discussion データベース・テンプレートは広く使われているため、その機能の一部を Web サービスとして公開するための代表候補として選ばれました。このディスカッション・テンプレートから作成されたデータベースを利用することで、複数のユーザーが、トピックや、トピックへのレスポンス、レスポンスへのレスポンスなどを作成し、削除し、そして変更することができます。さらに、こうしたトピックやレスポンスは、公開の場合もプライベートの場合もあり、そしてデータベースの中のビューに従ってフィルターすることができます。各作成者は、その作成者独自のプロファイルを作成し、修正し、そして削除することができ、また特権を持つ一部の作成者は、他の作成者のプロファイルを読むことができます。

このソリューションは、次の 3 つの論理的 Web サービスを公開するように構築されています。

  • ViewManager: ビューの管理を行います。
  • ProfileManager: 作成者のプロファイルの管理を行います。
  • ThreadManager: トピックとレスポンスの処理を行います。

このソリューションは LotusScript で実装されていますが、これは LotusScript が成熟していること、そして Lotus Domino の開発コミュニティーで広く使われているためです。WS-I との相互運用性は、Basic Profile 1.1 のための WS-I Interoperability Testing Tool を使って検証されます。

この記事では、このソリューションを実現する上での私達の経験を要約し、また Lotus Domino 8 を使って独自の Web サービスを開発する際のベスト・プラクティスを説明します。またこの記事では、Lotus Domino 8 で WS-I 準拠を実現する上での、また Lotus Domino 7.0.2 との互換性を実現する上でのいくつかの落とし穴と回避策にも焦点を当てます。さまざまな組織が Lotus Domino 8 に移行するまでにはしばらく時間がかかる可能性があるため、Lotus Domino 7.0.2 との互換性は重要な要件です。

設計

このセクションでは、Domino Discussion データベース Web サービス・アプリケーションで使われているアーキテクチャーの概要を説明します。ここでは Lotus Domino の制約による設計の選択肢の制限に焦点を当て、また公開されるインターフェースについて、そして Lotus Domino 7.0.2 と 8 との互換性を実現するための方法について説明します。

Discussion データベース Web サービスは、ステートレスな Web サービスとして設計されています。場合によると、ステートフルな Web サービスの方が適切なことがあります (例えば、データベースの中でトピックとレスポンスをリストするためのページング機構を提供する場合など)。ステートフルな Web サービスは、クラスター化された Lotus Domino 環境ではフェール・オーバーを行いません。これは Lotus Domino が、ノード間でセッションとステートを複製するための非同期複製を提供していないためです。このため、また単純化するために、私達はステートレスな Web サービスを実装することにしました。

Web サービス

Discussion データベース Web サービスは、機能的に次の 3 つの異なるサービスに分解することができます。

  • DiscussionProfileManager は、カレント・ユーザーのプロファイル管理を可能にし、また管理者が他のユーザーのプロファイルを管理できるようにします (例えばプロファイルをリストしたり削除したりする、など)。
  • DiscussionViewManager は、データベースの中のビューとフォルダー、そして各ビューのソート可能な列をリストするために使われます。DiscussionViewManager は、DiscussionThreadManager のビューを処理するメソッドと組み合わせて使われます。
  • DiscussionThreadManager はトピックとレスポンス、そしてカテゴリーの管理を行います。また、Create や Read、Update、Delete、Exists、List (CRUDEL) など一群のオペレーションを公開し、またいくつかのメソッドと共にトピックとレスポンス、カテゴリーを処理することで、文書が読まれたか読まれていないかをマーキングします。一部のオペレーションは、シングル・モードあるいはバルク・モード (例えば updateTopic や updateTopics など) で利用することができます。

この Web サービスの LIST メソッド群は、トピックやレスポンス、作成者、ビューの名前、フォルダー名などのリストを返します。このメソッド群は、返されたリストをソート基準に従ってソートするための方法として、複数の方法を提供しています。返されるリストは、Notes Formula 言語クエリーに従って、あるいは Query by Example、あるいはビューに従ってフィルターされます。単純なページング機構を提供する一部のリスト・メソッドは、ステートレスです。これらのメソッドを使うためには、ユーザーは所望のページ番号と要素の数を渡す必要があります。文書は、メソッドを呼び出すたびに収集されます。従って仮定の話として、もしメソッドの呼び出しと呼び出しの間でデータベースが変更されると、同じ要素が 2 つの異なるページに返される可能性があります。

データ転送オブジェクト

DTO (data transfer object: データ転送オブジェクト、Lotus Domino の Web サービス文書では値の型として認識されます) は、Web サービスとクライアントとの間でのデータ交換に使われるカスタム・クラスです。

Discussion データベースの場合には、下記の DTO があります (図 1)。

  • Author は、作成者のプロファイルを表現するクラスです。Author は、作成者の ID と名前、表示名、E メール、電話番号、本文、目標、役割、主題、カテゴリー、is-private、変更日、そして作成日を含みます。
  • Topic は、Discussion データベースの中のトピックを表現するクラスです。Topic は、文書の ID と主題、本文、カテゴリー、変更日、作成日、そして mark-as-private 属性を含みます。この本文には、添付などのバイナリーは含まれません。
  • Response は、トピックへのレスポンス、あるいは Discussion データベースの中の別のレスポンスへのレスポンスを表現するクラスです。Response は、文書 ID と親 ID、主題、本文、カテゴリー、変更日、作成日、そして mark-as-private 属性を含みます。この本文には、添付などのバイナリーは含まれません。
  • SortItem は、フィールド名とソート順のペアを含むクラスです。SortCriteria は SortItem を使って、リスト・メソッドが返すトピックやレスポンス、作成者のソート順を判断します。
  • SortCriteria は、SortItems の集合と name 属性を含むクラスです。リスト・メソッドは SortCriteria を使って、SortItems に含まれる複数の属性と順序に従ってトピックとレスポンス、作成者の順序付けを指定します。
  • IDList は、バルク更新に使われるクラスであり、ID のリストと type 属性を含んでいます (type 属性が取り得る値は、topic と response、そして any です)。

図 1. データ転送オブジェクト

エラー

この Web サービスはカスタム・エラーをスローします。これらのエラーには、下記を指定するフィールドが含まれています。

  • Error message: 発生したエラーの詳細
  • Error number: エラーを識別するためのコード
  • Line number: スクリプトの中でエラーがスローされた場所
  • Database name: 使用されているデータベースの名前
  • Function name: エラーが発生した関数
  • Web service name: エラーが発生した Web サービスの名前

エラーは、下記のグループに分類されます。

  • DiscussionError は、Web サービスの通常の使用状態で生成されたすべてのエラーを通知します。
  • IllegalArgumentError は、引数が有効ではないと見なされた場合にスローされます (例えば、ヌル値がパラメーターとしてメソッドに渡された場合など)。
  • UpdateError は、1 つ以上の文書が正常に更新されなかった場合に、バルク更新メソッドによってスローされます。このエラーがスローされる場合、このエラーは、更新されていない ID (トピックあるいはレスポンス) のリストを含んでいます。
  • UpdateConflictError は、現在の文書の変更日を、その日付よりも前の日付に変更しようとした場合にスローされます。

互換性

この Web サービスは、Lotus Domino 7.0.2 と Lotus Domino 8 の両方に同じインターフェースを使うように設計されています。そのため、この実装は、この記事の「実装」セクションで説明する回避策を使ってソース・コードの移植性を実現しています。




上に戻る


実装

このセクションでは、この Web サービスの実装と、この Web サービスを Lotus Domino 7.0.2 と Lotus Domino 8 の両方に実装しようとして発見された問題を説明します。ここでは、LotusScript の実装に互換性を持たせるための開発環境の設定方法や、Web サービスに渡される LotusScript の配列やヌル、複合データ型の処理、エラーの処理、そして Lotus Notes に見られる動作と同じ動作を複製してこの Web サービスをセキュアにする方法などについて説明します。私達は、この実装をテストするためのテスト・スイートを、Java 1.4Axis 1.4 そして Junit 3.8 を使って作成しました。このテスト・スイートは、AntCruisecontrol. を使って連続的にビルドされ、実行されました。

開発環境

Lotus Domino 8 は Lotus Domino 7.0.2 よりも高度な Web サービス・エンジンを持っています。そのため、Lotus Domino 7.0.2 上で実行する Web サービスを IBM Lotus Domino Designer 8 を使って作成することはできません。Lotus Domino 7.0.2 サーバー上で実行する Lotus Domino Designer 8 の Web サービスに Web ブラウザーを使ってアクセスすると、下記のエラーが表示されます。

"This version of the Web Service design is not supported on this server" ※このサーバーでは、このバージョンの Web サービスの設計をサポートしていません

Lotus Domino Designer 7.0.2 の Web サービスは、Lotus Domino 8 サーバーで正常に動作します。これは、Lotus Domino Designer 8 で作成、あるいは編集された Web サービスを、Designer 7.0.2 あるいはそれ以降で編集することはできない、という意味でもあります。Lotus Domino Designer 7.0.2 で Lotus Domino 8 の Web サービスを開くと、図 2 に示す警告が表示されます。


図 2. IBM Lotus Domino Designer のエラー・ダイアログ・ボックス

パラメーターと戻り値としての配列

Discussion データベース Web サービスが提供するリスト・メソッドは、データ転送オブジェクトの配列を返します。しかし LotusScript の関数は、配列を返す機能を持っていません。配列は通常、LotusScript の Variant オブジェクトを使って返されますが、Web サービスの場合には、Variant は WSDL の生成を促すための十分な情報を提供できません。

WSDL を適切に生成できるように、私達はホルダー (holder) クラスを使っています。ホルダー・クラスは、(lsxsd.lss で定義される) INOUT_HOLDER クラスから派生する LotusScript クラス・オブジェクトです。生成される WSDL は、このホルダー・クラスを削除します。Web サービスを処理する場合、クライアント・サイドには (想定されるものとして) 返された配列しか見えません。developerWorks の記事「IBM Lotus Domino 7 での実用的 Web サービス: 単純な Web サービスを作成してテストする」と「Lotus Notes/Domino 7 Web サービス」は、配列ホルダー・クラスを使って LotusScript の Web サービス・メソッドから配列を返す方法を詳細に説明しています。

注意: lsxsd.lss は、ストリング配列やファイル、日付を渡すためのクラスを含むライブラリーです。このファイルは、ローカルの Notes プログラム・ディレクトリーにあります。

リスト 1 と 2 は、ホルダー・クラスと、このクラスが生成した WSDL の一部の例です (AuthorDTO 配列を示しています)。


リスト1. AuthorDTOArray_Holder の例
                
Class AuthorDTOArray_Holder as INOUT_HOLDER
'The AuthorDTO array holder class
Public value() As AuthorDTO
...
...
End Class
	


リスト 2. 生成された WSDL
                
<complexType name="AUTHORDTOArray">
  <sequence>
     <element maxOccurs="unbounded" minOccurs="0" name="item" type="impl:AUTHORDTO"/>
  </sequence>
</complexType>


残念ながら、配列をパラメーターとして LotusScript の Web サービス・メソッドに渡す命令はありません。私達は Discussion データベース Web サービスの開発中に、2 つの方法を試しました。1 つは配列を直接渡す方法 (リスト 3) であり、もう 1 つはホルダー・クラスを使う方法 (リスト 4) です (どちらもプリミティブ型と複合型の両方に対して渡すための方法です)。


リスト 3. 配列を直接渡す方法の例
                
	Sub markListRead(ids() As String)
...
End Sub

Sub markTopicsRead(topics() as TopicDTO)
...
End Sub
			


リスト 4. 配列ホルダー・クラスを使う方法の例
                
	Sub markListUnread(ids As STRINGARRAY_HOLDER)
...
End Sub

Sub markTopicsUnread(topics As TopicDTOArray_Holder)
...
End Sub
			

Lotus Domino 8 では、どちらの方法も使えます。Lotus Domino 7.0.2 では、RPC エンコードの WSDL を使えばどちらの方法も動作します。私達は RPC エンコードを使っていませんが、それは RPC エンコードが WS-I Basic Profile 1.1 の一部ではないためです。この 2 つの方法は、デフォルトで他のエンコード方法を使用する Lotus Domino 7.0.2 では使えません。プリミティブ型に対して配列、あるいは配列ホルダーを使う場合には、Web サービスのメソッドは Axis ベースのテスト・クライアントから空の配列を受信します。複合型に対して配列、あるいは配列ホルダーを使うと、リスト 5 に示すエラー・メッセージを含む Web サービスのフォールトがクライアントに返されます。


リスト 5. エラー・メッセージ
                
“Web service (DiscussionThreadManager) object does not have specified member 
TOPICS in method MARKTOPICSREAD: value "" at element  quot;urn:DefaultNamespace:
MARKTOPICSREAD/TOPICS"”

しかし WSDL をリスト 6 からリスト 7 に手動編集することで、配列を使えるようにすることができます。


リスト 6. 生成された WSDL
                
		
<complexType name="ArrayOf_xsd_string">
	<complexContent>
		<restriction base="soapenc:Array">
			<attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:string[]"/>
		</restriction>
	</complexContent>
</complexType>
			


リスト 7. 手動編集された WSDL
                
<complexType name="ArrayOf_xsd_string">
	<sequence>
		<element maxOccurs="unbounded" minOccurs="0" name="item" type="xsd:string"/>
	</sequence>
</complexType>
			

この問題に対する回避策として、配列に対してはコンテナーとして動作しても INOUT_HOLDER を拡張しないカスタム・クラスを使います。Lotus Domino 8 では、配列であるフィールドを 1 つ含むカスタム・クラスは、すべて自動的に配列ホルダーとして扱われます。この動作を回避し、LotusScript が Lotus Domino 7.0.2 にデプロイされているか Lotus Domino 8 Beta にデプロイされているかに無関係に、一貫したインターフェースを作成するためには、複数のフィールドを含むカスタム・クラスを使います (リスト 8)。


リスト 8. IDList の例
                
Class IDList

	Public ids() As String

	Public type As String

End Class
			

ヌル値と複合型

LotusScript 固有のデータ型 (String や Integer、あるいは Boolean など) は、ヌル値を許容しません。ヌル値を使うために、例えばトピック DTO の本文フィールドにヌル値を渡すために、私達はlsxsd.lss ライブラリーの中のデータ型を使っています (ヌル値を許容する XSD_String あるいは XSD_Boolean など)。リスト 9 は、XSD_String 型のフィールドを持つ TopicDTO クラスを示しています。またリスト 10 はそれに対応する部分として、生成された WSDL のセクションの body 属性が nillable であることを示しています。


リスト 9. TopicDTO の例
                
Class TopicDTO
	Public body As XSD_STRING
	...
End Class
			


リスト 10. TopicDTO の WSDL フラグメント
                
	<complexType name="TOPICDTO">
   <sequence>
      <element name="BODY" nillable="true" type="xsd:string"/>
...
...
   </sequence>
</complexType>
			

複合型パラメーターを持つ Web サービス・メソッドが、ヌル、あるいはヌル値を属性に持つインスタンスを受信した場合、Lotus Domino 7.0.2 と Lotus Domino 8 は異なる動作をします。Lotus Domino 8 はヌルを LotusScript Nothing (つまり、他のプログラミング言語でのヌル) として扱いますが、Lotus Domino 7.0.2 はヌルをデフォルト値でインスタンス化します。数値フィールドには値 0 が与えられ、そしてストリング・フィールドは空のストリング値を持ちます。クラスは、すべてのプリミティブ型属性にデフォルト値が与えられてインスタンス化されます。こうした動作のため、Domino 7.0.2 と Lotus Domino 8 では、ヌルをチェックするために別々の方法が要求されます。

リスト 11 のコードは、渡されたレスポンスがヌルかどうかを最初にチェックし、もしヌルでない場合には、要求されたフィールドがヌルかどうかをチェックします。


リスト 11. Lotus Domino 8 に対する createResponse の例
                
	Function createResponse(response As ResponseDTO) As ResponseDTO
	If response Is Nothing Then
		Error 1, "Response is null."
	End If

	If response.parentID Is Nothing Then
		Error 1, "The Responses parent ID is null."
	End If
	...
End Function
			

このコードは Lotus Domino 8 では正しく動作しますが、Lotus Domino 7.0.2 ではレスポンス・インスタンスが Nothing になることはありません。それは、レスポンス・インスタンスがデフォルト値にインスタンス化されるためです。同じ理由から、もしレスポンスを渡されても、parentID が Nothing であることはありません。


リスト 12. Lotus Domino 7 に対する createResponse の例
                
		Function createResponse(response As ResponseDTO) As ResponseDTO
	If response.ID Is Nothing Then
		Error 1, "Response is null."
	End If

	If response.parentID.GetValueAsString = "" Then
		Error 1, "The Responses parent ID is null."
	End If
	...
End Function
			

Lotus Domino 7.0.2 でリスト 12 のコードが動作する理由は、ヌル・パラメーターが入力として受信されるとオブジェクトが自動的にインスタンス化されるためです。Lotus Domino 8 では、ヌル・パラメーターは LotusScript の Nothing になります。そのため、もしレスポンスが Nothing だったとすると response.ID がエラーを起こし、もし parentID フィールドが Nothing であったとすると response.parentID.GetValueAsString がエラーを起こします。

Lotus Domino 7.0.2 と Lotus Domino 8 の両方で動作するコードを作成するための回避策には、LotusScript のバージョンによってコードを分岐させるための If 文が必要です。Version 8 から Version 7.0.2 への後方互換性を持つ Web サービスを開発する際には、その Web サービスがどちらのバージョンに対して実行しているのかを判断する方法が必要です。この情報を見つけるには、Getthreadinfo() 関数を使います (リスト 13)。Getthreadinfo(LSI_THREAD_VERSION) 関数は If 文を使って、Lotus Domino 7.0.2 用の LotusScript のバージョン (5.0.0.07B) を返します。Lotus Domino 7.0.2 は If 分岐の中のコードを実行し、7.0.2 より後のバージョンは Else 分岐の中を実行します。


リスト 13. LotusScript のバージョン・チェックの例
                
	Function createResponse(response As ResponseDTO) As ResponseDTO
	If CStr(GetThreadInfo(LSI_THREAD_VERSION)) <= "5.0.0.07B" Then
		' Domino 7.0.2 or earlier
		If response.ID Is Nothing Then
			Error 1, "Response is null."
		End If

		If response.parentID.GetValueAsString = "" Then
			Error 1, "The Responses parent ID is null."
		End If
	Else
		' Later than Domino 7.0.2
		If response Is Nothing Then
			Error 1, "Response is null."
		End If

		If response.parentID Is Nothing Then
			Error 1, "The Responses parent ID is null."
		End If

	End IF
	...
End Function
			

エラー

ここでは、LotusScript がどのようにエラーを処理するか、また、これをどのように利用すればクライアントに有用な情報を提供する Web サービス・エラーを実装できるかを説明します。LotusScript は、現在のエラー状態を検証し、またエラー情報を表示するために、3 つの関数を提供しています。下記がその 3 つの関数です。

  • Error(): 関連付けられたエラー・メッセージを返します。
  • Err(): 関連付けられたエラー番号を返します。
  • Erl(): エラーが発生した行番号を返します。

Web サービスの障害は、(lsxsd.lss ライブラリーの中にある) WS_Fault クラスのインスタンスである特別な出力パラメーターを使って LotusScript 内でスローされます。これについては developerWorks の記事、「IBM Lotus Domino 7 での実用的 Web サービス: 複雑な Web サービスを作成する」に説明されています。リスト 14 を見てください。


リスト 14. 障害の例
                
Function foo(fault As WS_FAULT) As ...
		
	Fault.SetFault True
	Fault.setFaultString "error message" 

End Function
			

Lotus Domino 8 は、WS_Fault クラスの拡張であるカスタム・エラーを処理します。Lotus Domino 8 は Axis 1.4 を有効にし、AxisFault のサブクラスとしてエラーを生成し、そしてこれらのエラーは 1 つのエラーが発生するとキャッチされます。リスト 15 のコードは OnError 文を使ってランタイム・エラーをキャッチし、そしてカスタムの throwFault 関数を使って DiscussionError をインスタンス化します。DiscussionError はカスタム・クラス (fault) であり、エラー・メッセージと、生成された場所の関数名、そしてこの Web サービスを含むデータベース名を含んでいます。関数名は GetThreadIfo(LSI_THREAD_PROC) 関数によって収集されます。保守を容易にするために、エラーが生成されると、nLog.logError 関数を使ってエラーがロギング・データベースの中にログされます。


リスト 15. createTopic の例
                
	Function createTopic(topic As TopicDTO, fault As DiscussionError) As TopicDTO
 On Error Goto FAULT
 ... 
 Exit Function
FAULT:
 Set fault = throwFault(fault, GetThreadInfo(LSI_THREAD_PROC), database.FileName)
 nLog.LogError Err, "Error in " & GetThreadInfo(LSI_THREAD_PROC) & " : " & Error & " 
			Line : " & Erl
 Exit Function
End Function
			

Lotus Domino 7.0.2 は、SOAP 障害サブタイプのメンバー・データを返しません。そのためすべてのエラーは、Lotus Domino 7.0.2 で使われているカスタム・クラスに関わらず、クライアントによって実行時の AxisFault 例外として扱われ、カスタム・エラーとしては扱われません。例えば Axis 1.4 はカスタム例外クラスを生成しますが、Web サービスが実行時にその例外クラスをスローすることはありません。私達はこれに対する回避策をまだ見つけていません。

セキュリティー

Web サービスが提供するユーザー・アクセス権は、Lotus Notes クライアントが実行するユーザー・アクセス権との間に一貫性を保っています。Lotus Domino では、各文書には Authors フィールドと Readers フィールドがあります (詳細は「Lotus Domino Designer のドキュメンテーション」を参照してください)。Authors フィールドは、誰が文書を編集したり更新したりできるかを決定します。Readers フィールドは、誰が文書を読めるのかをコントロールします。Lotus Notes クライアントと Web サービスとの一貫性を保つために、トピックあるいはレスポンスが作成されると、そのユーザーが Authors フィールドに追加されます。もしユーザーが、そのトピックあるいはレスポンスをプライベートにすることを選択すると、そのユーザーが Readers フィールドに追加されます。トピックとレスポンスは、それぞれをプライベートあるいはパブリックとしてマーキングするための Boolean フィールドを持っています。




上に戻る


DiscussionProfileManager をデプロイする

このセクションでは、セキュアな Web サービスを公開するために Lotus Domino を構成する方法と、そうした Web サービスをデプロイする方法について説明します。その例として、Discussion データベース用に開発された DiscussionProfileManager Web サービスをデプロイする方法を説明します。同じ手順を、このソリューションのために開発された他の 2 つの Web サービス (DiscussionThreadManager と DiscussionViewManager) にも適用することができます。

セキュリティーを構成する

ユーザーがセキュアな方法で Web サービスにアクセスできるようにするために、Lotus Domino は、HTTPS プロトコルをサポートする組み込みの Web サーバーを使う必要があります。

このサーバーを構成するためには、下記の手順に従います。

  1. IBM Lotus Domino Administrator クライアントを起動します。
  2. Configuration タブを選択します。
  3. Server 文書を開きます。
  4. Ports タブを選択します。
  5. Internet Ports タブを選択します。
  6. Edit Server ボタンをクリックします。
  7. HTTPS を有効にして HTTP を無効にするように変更します。

ユーザーを認証するためには、ユーザーがインターネット・パスワードを有効にしておく必要があります。このパスワードは、Domino Directory の中で、Notes クライアントを使って person 文書を編集することで設定することができます。

手動で DiscussionProfileManager をデプロイする

この Web サービスをデプロイするためには、下記の手順に従います。

  1. 対象とするデータベースを Lotus Domino Designer で開きます。
  2. Shared Code を選択し、次に Navigator で Web Services を選択します。
  3. New Web Service をクリックします。
  4. Web Service プロパティー・ボックスに Web サービスの名前を入力します (例えば DisscussionProfileManager など)。
  5. Port Type class として DiscussionProfileManager を入力します (図 3)。

図 3. Web Service プロパティー・ボックス

  1. Web Service プロパティー・ボックスの Security タブを選択します (図 4)。
  2. 「Run as web user」オプションを選択します。これによってユーザーは、ユーザーの名前とインターネット・パスワードを使って Web サービスを呼び出すことができます。

図4. Web Service プロパティー・ボックスの Security タブ

  1. Web Service プロパティー・ボックスの Advanced タブを選択します。
  2. Port type name と Service element name、そして Service port name に適当な名前を入力します (これらのフィールドを空白のままにすると、Lotus Domino は自動的にこれらのフィールドを埋めます)。DiscussionProfileManager の一例として、図 5 を見てください。
  3. 必要なエンコード方法を選択します。

図 5. Web Service プロパティー・ボックスの Advanced タブ

  1. Service プロパティー・ボックスを閉じます。
  2. オプション・セクションから Option Base というテキストを削除します。
  3. Microsoft Notepad などのテキスト・エディターで DiscussionProfileManager.lss を開きます。
  4. DiscussionProfileManager.lss のすべてのテキストをコピーします。
  5. Lotus Domino Designer で新しい Web サービスの Declarations セクションを選択します (図 6)。

図 6. Web サービスの Declarations セクション

  1. この Web サービスの中に貼り付けます。
  2. この Web サービスを保存して、閉じます。

これで、この Web サービスは下記で利用できるようになります。

http://<DominoServer>/<Database Path>/DiscussionProfileManager

注意: この Web サービス・エンジンは、デフォルトでシングル・スレッドとして構成されています。このデフォルト構成を変更するためには、Lotus Domino Administrator クライアントを使ってサーバーに接続し、左側のペインで Server アイコンを選択し、リストを開き、Current Server Document を選択し、Internet Protocols タブに進み、Domino Web Engine タブをクリックし、そして Web Agents の「Run Web agents concurrently?」エントリーの設定を Disabled から Enabled に変更する必要があります (図 7)。そして HTTP タスクの再起動を実行するか、あるいはサーバーを再起動します。

詳細については、IBM Redpaper「IBM Lotus Domino for iSeries パフォーマンス・チューニング」を参照してください。


図 7. Web Agents の並行性設定




上に戻る


WS-I 準拠

WS-I に準拠させる目的は、Discussion データベース Web サービスの相互運用性を保証すること、そしてそれによって、(WS-I に準拠する) 他の Web サービス技術を使用するクライアントが、この Web サービスを利用できるようにすることです。例えば J2ME クライアントは、すべての WSDL (Web Service Description Language) 定義が WS-I に準拠していることを要求します。

Web Services Interoperability Organization (WS-I) は、Web サービスが Basic Profile 1.1 に準拠しているかどうかを評価するテスト・ツールを開発しました。このツールは、まったく煩わしくないブラック・ボックスの方法で Web サービスの実装をテストします。このツールは、Web サービスとユーザー・アプリケーションとの対話動作に注目します。これらのテストを実行するために、私達は Interoperability Testing Tool 1.1 を使いました。

このテスト・ツールは、Monitor と Analyzer (図 8)、そしてさまざまなサポート・ファイルで構成されています。Monitor は、メッセージ・キャプチャーとロギング用の両方のためのツールとして動作します。Monitor はメッセージをインターセプトし、そしてロガーはそうしたメッセージを再フォーマットした上、後で分析できるようにメッセージ・ログに保存します。Monitor は中間者 (man in the middle) による方法を使って実装され、メッセージをインターセプトして記録します。Analyzer は、その Web サービスが WS-I Profiles に準拠しているかどうかを検証する分析ツールです。Analyzer は、Web サービスが送受信するメッセージを Monitor がメッセージ・ログにログした後で、分析します。

詳細については、WS-I Organization の資料を参照してください。Web サービスの開発者が相互運用可能な Web サービスを作成する方法や、作成されたサービスが WS-I のガイドラインに準拠していることを検証するための方法が解説されています。


図 8. 相互運用性テスト・ツール

この相互運用性テスト・ツールの使い方の説明は、このツールの中に含まれています。

Discussion データベース Web サービスに対して実行されたテスト

Lotus Domino では、Web サービスを公開するために下記のエンコーディングを使うことができます。

  • Document Wrapped
  • Document Literal
  • RPC Literal
  • RPC Encoded

RPC Encoded でエンコードされた Web サービスは WS-I Basic Profile 1.1 の一部ではありません。従ってこの記事では、この方式について、これ以上触れません。私達はこの Web サービスの開発中、Lotus Domino 7.0.2 と Lotus Domino 8 の両方に対して、WS-I 準拠を検証するための静的テストと動的テストの両方を、RPC Encoded 以外の 3 つのエンコーディング (つまり Document Wrapped と Document Literal、RPC Literal) で行いました。

静的テストでは、Analyzer を使って各 Web サービス WSDL に対する静的な分析を行います。動的テストでは、Monitor を使って Web サービスとクライアントとの間の SOAP メッセージを記録します。この場合、クライアントは Axis 1.4 をベースとする JUnit Test Suite です。Monitor は SOAP メッセージをログ・ファイルにログとして記録し、このログ・ファイルは次に Analyzer ツールで分析されます。生成される準拠レポート・ファイルは、その Web サービスが WS-I に準拠しているかどうかを報告します。

Lotus Domino 7.0.2 と 8 の WS-I 準拠失敗

Lotus Domino 7.0.2 が生成する WSDL は、下記の場合には WS-I の相互運用性テストにパスすることができません。

  • Document Literal エンコーディングと Document Wrapped エンコーディングが使われている場合
  • Web サービスの中で配列が使われている場合
  • RPC Literal でエンコードされた Web サービスに SOAP 障害が含まれている場合
  • Document Literal でエンコードされた Web サービスが、複数のパラメーターをとるメソッドを持つ場合

Lotus Domino 8 が生成する WSDL は、下記の場合には WS-I の相互運用性テストにパスすることができません。

  • RPC Literal でエンコードされた Web サービスに SOAP 障害が含まれている場合
  • Document Literal でエンコードされた Web サービスが、複数のパラメーターをとるメソッドを持つ場合
  • Document Literal でエンコードされた Web サービスが、固有ではないパラメーターを持つ場合

ここでは、これらの WS-I 準拠失敗についての詳細を、適切ではない WSDL の例と、WSDL に準拠させるために必要な変更と併せて説明します。Lotus Domino Designer のドキュメンテーションに説明されているように、いくつかの WSDL、あるいは XML スキーマ構成体は、LotusScript あるいは Java へのマッピングが限定されているか、あるいはまったくサポートされていません。こうした構成体は、Lotus Domino Designer で WSDL をインポートしようとする場合にはサポートされません。

配列の表現

配列を含む Web サービスに対して Lotus Domino 7.0.2 が生成する WSDL は、WS-I 準拠ではありません。これは下記のエンコーディングに影響します。

  • Domino 7 Document Literal
  • Domino 7 Document Wrapped
  • Domino 7 Document RPC Literal

WS-I 準拠テストは、下記のエラーが起きて失敗しました。

"An Array declaration uses - restricts or extends - the soapenc:Array type,
or the wsdl:arrayType attribute is used in the type declaration."
※Array の宣言で soapenc:Array 型が使われている (制限あるいは拡張されている) か、wsdl:arrayType 属性が型宣言の中で使われています。

これら 3 つの異なるエンコーディングでは、配列はリスト 16 のコードによる WSDL で表現されます。


リスト 16. 生成される WSDL
                
<complexType name="ArrayOf_xsd_string">
	<complexContent>
		<restriction base="soapenc:Array">
			<attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:string[]"/>
		</restriction>
	</complexContent>
</complexType>
			

この問題に対する回避策としては、こうした WSDL を手動で編集してから Lotus Domino Designer にインポートします (Lotus Domino Designer に WSDL をインポートするための詳細は、「WSDL をインポートする」のセクションを見てください)。WS-I 準拠にするためには、<complexContent> タグを削除し、それを <sequence> タグと置き換えます (図 17)。


リスト 17. WS-I に準拠した WSDL
                
<complexType name="ArrayOf_xsd_string">
	<sequence>
		<element maxOccurs="unbounded" minOccurs="0" name="item" type="xsd:string"/>
	</sequence>
</complexType>
			

名前空間属性

WS-I に準拠するためには、soapbind:body 要素や soapbind:header 要素、soapbind:headerfault 要素、soapbind:fault 要素のどれにも、名前空間属性を含めることができません。この問題は、下記の WSDL エンコーディングに影響します。

  • Domino 7.0.2 Document Literal
  • Domino 7.0.2 Document Wrapped

WS-I テスト・ツールを実行すると、下記のエラー・メッセージが表示されます。

「A document-literal binding in a DESCRIPTION MUST NOT have

"A document-literal binding in a DESCRIPTION MUST NOT have
the namespace attribute specified on contained soapbind:body,soapbind:header, soapbind:headerfault
and soapbind:fault elements."
※Document Literal によるバインディングが行われている記述部分では、soapbind:body、soapbind:header、soapbind:headerfault、そして soapbind:fault の要素上で名前空間属性を指定することはできません。

リスト 18 は生成された WSDL の一部を示しています。この WSDL は名前空間属性を含んでおり、Document Wrapped に対しても Document Literal に対しても WS-I 準拠ではありません。


リスト 18. 生成された WSDL
                
<wsdl:binding name="DiscussionProfileManagerSoapBinding"
		type="impl:DiscussionProfileManagerPort">
		<wsdlsoap:binding style="document"
			transport="http://schemas.xmlsoap.org/soap/http" />
		<wsdl:operation name="GETVERSION">
			<wsdlsoap:operation soapAction="" />
			<wsdl:input name="GETVERSIONRequest">
				<wsdlsoap:body namespace="urn:DefaultNamespace"
					use="literal" />
			</wsdl:input>
			<wsdl:output name="GETVERSIONResponse">
				<wsdlsoap:body namespace="urn:DefaultNamespace"
					use="literal" />
			</wsdl:output>
		</wsdl:operation>
			

この問題を解決するためには、この WSDL を手動で編集し、<wsdlsoap:body> タグから名前空間属性を削除して、リスト 19 に示す WSDL の例のようにします。そしてこの WSDL を Lotus Domino Designer にインポートします。


リスト 19. 準拠した WSDL
                
<wsdl:binding name="DiscussionProfileManagerSoapBinding"
		type="impl:DiscussionProfileManagerPort">
		<wsdlsoap:binding style="document"
			transport="http://schemas.xmlsoap.org/soap/http" />
		<wsdl:operation name="GETVERSION">
			<wsdlsoap:operation soapAction="" />
			<wsdl:input name="GETVERSIONRequest">
				<wsdlsoap:body use="literal" />
			</wsdl:input>
			<wsdl:output name="GETVERSIONResponse">
				<wsdlsoap:body use="literal" />
			</wsdl:output>		
</wsdl:operation>
			

WSDL 要素属性

このエラーは、<wsdl:message> タグの中の <wsdl:part> タグが、header 要素と fault 要素に対する type 属性を使って定義されている時に発生します。このエラーは下記のエンコーディングに影響します。

  • Domino 7.0.2 RPC Literal
  • Domino 8 RPC Literal

このエラーに対して表示されるメッセージは下記です。

"A wsdl:binding in a DESCRIPTION MUST refer, in each of itssoapbind:header,
soapbind:headerfault and soapbind:fault elements, only to wsdl:part element(s) that have been defined
using the element attribute."
※wsdl:binding の記述部分では、itssoapbind:header 要素、soapbind:headerfault 要素、および soapbind:fault 要素の中で参照することができるのは、要素属性を使って定義されている wsdl:part 要素 (複数可) のみに限られます。

fault と header はパラメーターを含んでいないため、soapbind:fault と soapbind:header、そして soapbind:headerfault は、WSDL 1.1 に基づき、スタイル属性の値を文書と見なします。文書を値とするスタイル属性を持ち、soapbind:body にバインドされるすべての wsdl:part 要素は、要素属性を使って定義されます。この要求は、soapbind:fault 要素と soapbind:header 要素、そして soapbind:headerfault 要素の場合も同じです。

注意: RPC Literal Web サービスに対するヘッダー要素と fault 要素は、Document Literal エンコーディングの場合と同じスタイルで、アサーション要求 R2205 に従って定義される必要があります。

WS-I に準拠しない WSDL をリスト 20 に示します。<wsdl:part> タグの中で type 属性が使われていることに注意してください。


リスト 20. 生成された WSDL
                
<complexType name="DISCUSSIONERROR">
	<sequence>
		...
		...
	</sequence>
</complexType>
...
...
<wsdl:message name="DISCUSSIONERROR">
   <wsdl:part name="DISCUSSIONERROR" type="impl:DISCUSSIONERROR" />
</wsdl:message>
			

この WSDL を変更して WS-I に準拠させるためには、<complexType> タグの前後に <element> タグを手動で追加し、<wsdl:part> タグの中の type 属性を要素属性に変更します。WS-I に準拠した WSDL の例をリスト 21 に示します。WSDL を編集したら、その WSDL を Lotus Domino Designer にインポートします。


リスト 21. 準拠した WSDL
                
                <element name="DISCUSSIONERROR">
	<complexType>
		<sequence>
			...
			...
		</sequence>
	</complexType>
</element>
...
...
<wsdl:message name="DISCUSSIONERROR">
   <wsdl:part name="DISCUSSIONERROR" element="impl:DISCUSSIONERROR" />
</wsdl:message>
			

メッセージ要素が複数の part 要素を持つ

このエラーが発生するのは、<wsdl:message> タグの内側に複数の <wsdl:part> 要素がある場合で、下記のエンコーディングを使用した場合です。

  • Domino 7.0.2 Document Literal
  • Domino 8 Document Literal

これらのエンコーディングは WS-I テストに失敗し、下記のエラー・メッセージが表示されました。

"A document-literal binding which does not specify the parts attribute, has more than one wsdl:part in the associated wsdl:message element." ※Document Literal によるバインディングで、part 属性を指定していないのに、関連付けられた wsdl:message 要素の中に複数の wsdl:part が存在しています。

リスト 22 は、生成された WSDL の違反部分を示しています。


リスト 22. 生成された WSDL
                
	<wsdl:message name="LISTAUTHORSBYEXAMPLEANDSORTCRITERIARequest">
		<wsdl:part element="impl:EXAMPLE" name="EXAMPLE" />
		<wsdl:part element="impl:SORT" name="SORT" />
</wsdl:message>
			

文書サービスあるいはリテラル・サービスを定義する場合には、最大でも、入力メッセージに 1 つの本体部分と、出力メッセージに 1 つの本体部分しか持つことができません。従って、この Web サービスでは 1 つのメソッドに複数のパラメーターを渡すことはできません。複数のパラメーターを持つメソッドを使おうとする場合、WS-I に準拠するためには Document Wrapped エンコーディングを使う必要があります。

固有ではないオペレーションを持つバインディング

このエラーは、メッセージ要素に含まれる part が一意ではないために起こります。このエラーは、下記のエンコーディングに影響します。

  • Domino 7.0.2 Document Literal
  • Domino 8 Document Literal

WS-I テストを実行すると、下記のエラー・メッセージが表示されます。

"A binding has operations that are not unique." ※バインディングに、一意ではないオペレーションが含まれています。

WS-I に準拠していない WSDL のセクションをリスト 23 に示します。メッセージ要素の内側のいくつかの part 要素 (ID 要素など) が、一意ではないことに注意してください。


リスト 23. 生成された WSDL
                	
...
...
<wsdl:types>
		<schema targetNamespace="urn:DefaultNamespace"
			xmlns="http://www.w3.org/2001/XMLSchema">
<element name="ID" type="xsd:string" />
<element name="AUTHOR" type="impl:AUTHORDTO" />
...
...
</schema>
	</wsdl:types>

<wsdl:message name="GETVERSIONRequest">
	Part element missing
	</wsdl:message>

<wsdl:message name="DELETEAUTHORPROFILERequest">
		<wsdl:part element="intf:ID" name="ID" />
	</wsdl:message>

<wsdl:message name="READAUTHORPROFILERequest">
		<wsdl:part element="intf:ID" name="ID" />
	</wsdl:message>

<wsdl:message name="EXISTSAUTHORPROFILERequest">
		<wsdl:part element="intf:ID" name="ID" />
	</wsdl:message>

<wsdl:message name="UPDATEAUTHORPROFILERequest">
		<wsdl:part element="intf:AUTHOR" name="AUTHOR" />
	</wsdl:message>

<wsdl:message name="CREATEAUTHORPROFILERequest">
	<wsdl:part element="intf:AUTHOR" name="AUTHOR" />
</wsdl:message>
...
...

			

WS-I Basic Profile 1.1 に準拠するためには、どのようなメッセージの場合も、メッセージ要素に含まれる part は固有でなければなりません。上記に対応する、WS-I に準拠した WSDL セクションをリスト 24 に示します。このリストでは、<wsdl:part> タグの中の要素宣言と要素名が、すべて固有であることに注目してください。この回避策は、Web サービスの中に多くのメソッドがある場合には面倒です。そのため私達は、Document Wrapped エンコーディングを使うように推奨します。Anne Thomas Manes による「The wrapped document/literal convention」を読んでください。


リスト 24. 準拠した WSDL
                
<wsdl:types>
	<schema targetNamespace="urn:DefaultNamespace"
		xmlns="http://www.w3.org/2001/XMLSchema">
		<element name="GETVERSIONReturn" type="xsd:string" />
<element name="ID_1" type="xsd:string" />
<element name="ID_2" type="xsd:string" />
<element name="ID_3" type="xsd:string" />
...
<element name="AUTHOR_1" type="impl:AUTHORDTO" />
<element name="AUTHOR_2" type="impl:AUTHORDTO" />
...
...

<wsdl:message name="GETVERSIONRequest">
	There must be one part element here
	</wsdl:message>

<wsdl:message name="DELETEAUTHORPROFILERequest">
		<wsdl:part element="intf:ID_1" name="ID" />
	</wsdl:message>

<wsdl:message name="EXISTSAUTHORPROFILERequest">
		<wsdl:part element="intf:ID_2" name="ID" />
	</wsdl:message>
<wsdl:message name="READAUTHORPROFILERequest">
		<wsdl:part element="intf:ID_3" name="ID" />
	</wsdl:message>
<wsdl:message name="UPDATEAUTHORPROFILERequest">
		<wsdl:part element="intf:AUTHOR_1" name="AUTHOR" />
	</wsdl:message>

<wsdl:message name="CREATEAUTHORPROFILERequest">
	<wsdl:part element="intf:AUTHOR_2" name="AUTHOR" />
</wsdl:message>
...
...
			




上に戻る


WSDL をインポートする

Lotus Domino Designer で Web サービスを作成するには、コードを入力して、Lotus Domino Designer に WSDL を生成させる方法や、あるいは WSDL をインポートし、Web サービス・インターフェースに対するコード署名を Lotus Domino Designer に生成させる方法があります。この記事で説明している Web サービスでは、Lotus Domino Designer に WSDL を生成させています。しかし場合によると、既存の WSDL を使いたい場合があります。例えば Lotus Domino Designer で生成した WSDL を WS-I 準拠にするような場合です。

WSDL をインポートすることで Web サービスを作成するためには、下記を行います。

  1. 対象とするデータベースを Lotus Domino Designer で開きます
  2. Nagivation ペインで Shared Code を選択し、次に Web Services を選択します。
  3. New Web Service をクリックします。
  4. Web Service Properties ボックスを閉じます。
  5. Import WSDL を選択し、警告ダイアログ・ボックスで OK をクリックします。
  6. 必要な WSDL ファイルを選択し、Open をクリックします。

これによって、この Web サービスのための LotusScript 関数署名が生成されます。もし生成されたインターフェースが変更され、Web サービスが保存されると、Lotus Domino Designer はインポートされた WSDL を、Lotus Domino Designer 自体が自動生成した WSDL で上書きします。これを防ぎ、インポートされた WSDL を保持するためには、この Web サービスの実装を続行する前に下記を行うことが重要です。

  1. コード・ペインを右クリックし、図 9 に示す Web Service プロパティー・ボックスを開きます。
  2. この Web サービスの名前を入力します。
  3. 「Warn if the WSDL interface is modified」オプションを選択します。


図 9. Web Service プロパティー・ボックス

  1. Web Service プロパティー・ボックスを閉じます。
  2. Web サービスを保存します。

WS-I 静的準拠テストは Ant ベースのビルド環境に容易に統合でき、また CruiseControl などのビルド自動化ツールで自動的に実行されます。公開された Web サービスが WS-I に準拠しているかどうか、そのソリューションの構築中に常にチェックするようにお勧めします。

Domino Discussion データベース Web サービスの場合、Lotus Domino 7.0.2 が生成する WSDL 文書は WS-I 準拠ではありませんが、この WSDL 文書を手動で編集し、WS-I 準拠を実現してから Lotus Domino Designer にインポートすることができます。Lotus Domino 8 の場合、WS-I 準拠の WSDL 文書の生成に失敗したことがないエンコーディングは、Document Wrapped エンコーディングのみです。他のすべてのエンコーディングでは、WS-I に準拠させるためには手動編集する必要があります。

一般的に、Lotus Domino 7.0.2 が WS-I 準拠の WSDLを生成できるのは、RPC Literal エンコーディングで配列も障害も使われていない場合のみです。Lotus Domino 8 が WS-I 準拠の WSDLを生成するのは、RPC Literal エンコーディングで fault が使われていない場合と、Document Literal エンコーディングですべてのメソッドが 1 つのパラメーターしか持たず、すべてのメソッド・パラメーターが固有の名前を持つ場合、そして Document Wrapped エンコーディングを使った場合です。




上に戻る


まとめ

この記事では、Lotus Domino 8 のための Web サービスの設計方法を説明しました。その例として、 Discussion データベースを使いました。ここでは、この Web サービスのアーキテクチャーや、その機能がどのように分解されるのか、また Web サービスとクライアントとの間のデータ転送方法について説明し、そして発生する可能性のあるエラーを定義しました。また、この Web サービスの実装方法と、Lotus Domino 7.0.2 との互換性を実現するための方法、私達が突き当たった問題、そしてその対処方法についての概要を説明しました。そして助言として、HTTPS でセキュアな接続を行えるように Lotus Domino を構成する方法と、Notes クライアントと同じユーザー特権で Web サービスにアクセスするためのユーザー認証方法を説明しました。そして次に、この Web サービスを、Lotus Domino Designer を使って Domino データベースにデプロイする方法を説明しました。

私達は WS-I 相互運用性テストを行い、そして Discussion データベースに対する Web サービスを Document Wrapped エンコーディングで公開すべきことを強調しました。Document Wrapped エンコーディングは、(Lotus Domino で WSDL を生成した場合に) Lotus Domino 8 で WS-I 準拠テストにパスした唯一のエンコーディングです。Lotus Domino 7 で公開した Web サービスは、生成された WSDL のエンコーディングにかかわらず、相互運用性テストにパスすることができません。WS-I に準拠した WSDL 文書を作成するためには、WSDL を手動で編集した後、それを Lotus Domino Designer にインポートします。

この記事で例として使用した Discussion データベース Web サービスは、Lotus Sandbox に置かれています。

謝辞

この記事の技術レビューをしてくださった Gordon Hegfield と Steve Nikopoulos、そして John Grosjean の各氏に感謝いたします。



参考文献

学ぶために

製品や技術を入手するために

議論するために


著者について

Stephen Kruger は IBM の SOA Growth Projects の SOA アーキテクトであり、アイルランドの Dublin Software Lab で働いています。彼はこの地位につく以前、フランスの Xerox Research Centre での高度開発のリーダーとして、言語学と画像処理の領域で文書管理での自動ソリューション発見のプロジェクトに従事していました。それ以前には、フランスのグルノーブルにある、JavaSoft at Sun Microsystems International Centre for Network Computing のエンジニアとして働いていました。


Massimiliano Parlione はアイルランドにある IBM の Dublin Software Lab のシニア・ソフトウェア・エンジニアです。彼は2006年10 月から IBM に勤務しています。彼は 1995年7月に University of L'Aquila でコンピューター・サイエンスの優等学位 (Laurea) を、また 2000年4月に University La Sapienza of Rome でコンピューター・エンジニアリングの博士号を取得しています。アイルランドの IBM に入社する以前は、イタリアのジェノバにある Herzum software のシニア・コンサルタントとして、また IBM Rome の Tivoli Lab でパフォーマンスと可用性の領域のソフトウェア・エンジニアとして働き、また Marche 地域の IT 部門の Executive Officer として地域健康サービスのためのプロジェクトを指導し、またコントラクターとして、ローマの CNR (Italian Research Council) と、イタリアの Avezzano にある Texas Instruments で働いてきました。彼はコンサルタントとして、さまざまな垂直ビジネス領域に関係してきました。そうした中には、政府組織 (イタリアのボルツァーノ自治県) や、医薬卸売り (イタリアとイギリスの Alliance Boots)、製品開発企業 (Infogix と Aspect、共にアメリカ) などがあります。彼は IBM のレッドブック「Introducing IBM Tivoli Monitoring for Web Infrastructure」と「IBM Tivoli Monitoring Version 5.1.1 Creating Resource Models and Providers」を共同で執筆しています。


David Mills はアイルランドの IBM のソフトウェア・エンジニアです。彼はアイルランドの University College Cork でコンピューター・サイエンスを学び、2006 年に優等学位で卒業しました。彼は2006年 6 月に Extreme Blue プログラムの一員としてIBM に入社しています。Extreme Blue では、他の 3 人の卒業生と共に革新的な IP 電話プロジェクトに従事し、このプロジェクトはフランスのニースで開催された展示会で発表されました。現在はアイルランドのダブリンで SOA チームの一員として働いています。


Stephen Mc Nena はアイルランドの IBM のソフトウェア・エンジニアです。彼はアイルランドの Galway Mayo Institute of Technology でソフトウェア開発を学び、2004年にソフトウェア開発の National Diploma を終了、そして2005年にソフトウェア開発の優等学位で卒業しました。2006年11月にIBM の Dublin Software Lab に入社し、現在はアイルランドのダブリンで SOA チームの一員として働いています。


Matt Healy は IBM アイルランドのソフトウェア・エンジニアです。彼はアイルランドの DIT (Dublin Institute of Technology) でコンピューター・サイエンスを学び、2004年に優等学位で卒業後、DIT で「Investigating Text Message Classification Using Case-base Reasoning」のテーマで修士号の研究を継続しました。2006年9月に IBM アイルランドの Dublin Software Lab に入社し、現在はアイルランドのダブリンで SOA チームの一員として働いています。彼は AICS '05 で会議論文「An Assessment of Case-based Reasoning for Short Text Message Classification」を共同執筆しました。


Frederic Biava は IBM アイルランドのソフトウェア・エンジニアです。彼は University of Marseille Luminy (フランス) をコンピューター・サイエンスの学位 (Maitrise) で卒業し、その後 University of Avignon で修士号 (D.E.S.S.) を取得し、2004年に卒業しました。彼は 1 年間、HP の技術サポートに従事していました。2006年11月に IBM アイルランドの Dublin Software Lab に入社し、現在はアイルランドのダブリンで SOA チームの一員として働いています。




記事の評価


サイト改善のため、ご意見をお寄せください。こちらのフォームからお願いいたします。



はいいいえわからない
 


 


12345
不充分・不完全である大変素晴らしい
 


この記事を共有する

はてなブックマーク はてなブックマーク livedoorクリップ livedoorクリップ del.icio.us del.icio.us Buzzurl(バザール) Buzzurl(バザール) Choix! Choix!
Saafブックマーク Saafブックマーク FC2ブックマーク FC2ブックマーク MM/memo MM/memo ニフティクリップ ニフティクリップ Yahoo!ブックマーク Yahoo!ブックマーク
CZブックマーク CZブックマーク newsing newsing




上に戻る


    日本IBMについて プライバシー お問い合わせ