• 検索結果がありません。

SOA Web 4 WS-Notification Web 前回説明した WS-RF(WS-ResrouceFramework) では,Web サービス間の非同期のメッセージ ングを,WS-Notification 1) という技術で実現 しています.WS-Notification はいくつかの仕

N/A
N/A
Protected

Academic year: 2021

シェア "SOA Web 4 WS-Notification Web 前回説明した WS-RF(WS-ResrouceFramework) では,Web サービス間の非同期のメッセージ ングを,WS-Notification 1) という技術で実現 しています.WS-Notification はいくつかの仕"

Copied!
8
0
0

読み込み中.... (全文を見る)

全文

(1)

 前回説明した

WS-RF

WS-ResrouceFramework

では,

Web

サービス間の非同期のメッセージ

ン グ を,

WS-Notification

1)

と い う 技 術 で 実 現

し て い ま す.

WS-Notification

は い く つ か の 仕

様 か ら な る の で す が, 基 本 的 な 部 分 は

"WS-BaseNotification"

と い う 仕 様 に ま と め ら れ

て い ま す.

WS-Notification

に は, こ の

"WS-BaseNotification"

のほかに,メッセージを分類す

Topic

の構造を規定した

"WS-Topics"

,メッセー

ジの送り手と受け手の間に介在する「ブローカ」

の役割を規定した

"WS-BrokeredNotification"

いう

2

つの仕様があります.今回は,基本的な

"WS-BaseNotification"

の仕様を紹介したいと思

います(図

-1

).

 本稿では,まず,

WS-Notification

の概観を与えよう

と思います.ここでは,受け手が

Subscribe

(登録)し

て,送り手が

Notify

(通知)するという関係が基本です

(図

-2

).注意してほしいことは,受け手側のポートに

Notify

オペレーションが実装され,送り手側のポートに

Subscribe

オペレーションが実装されるということです.

 続いて,こうした基本的な関係が

WS-Notification

仕様の中でどのように形式的に定義されているかを見て

いきます.前回紹介した

WSDL

と,その中で利用され

ている

WS-RF

のリソースプロパティのスキーマ定義を

見ることが,とても重要です.実は,

WS-Notification

は,

WS-RF

とは独立の仕様なのですが,内部で

WS-RF

のリ

ソースを操作する機能を利用しています.

 最後に,サーバ上のリソース(

WS-Resource

)であ

るカウンタの値が変更されたときに,クライアントに

そのことをコールバックで通知する,

GT4

Globus

Toolkit4

2)

Counter

サンプルを紹介したいと思いま

す.このプログラムは,

Java

で書かれていて,

Java

WS-Notification

の実装のスタイルを学ぶことができ

ます.

 

WS-Notification

はパブリッシュ/サブスクライブ(パ

ブ/サブ)型のメッセージ通信に分類されます.パブ

/サブ型の通信には基本的なパターンがあります.第

1

に,メッセージの送り手と受け手の

2

つの役割の区別

があって,両者の間をやりとりされるメッセージがあり

ます.これは,当然です.第

2

に,送り手の側にメッ

セージの受け手と受け手の興味の対象であるトピックの

登録が必要です.そうしないと,送り手は,誰にどのメッ

セージを送ればいいのか分からなくなります.そして登

録は,受け手の側の仕事です.第

3

に,送り手のメッセー

ジ送信は,メッセージを受け取る受け手の側の,あるメ

ソッド/オペレーションの呼び出しとして行われます.

  具 体 的 に

WS-Notification

を 見 て み ま し ょ う. 第

1

に,

WS-Notification

で は, メ ッ セ ー ジ の 送 り 手 は

NotificationProducer

」と,メッセージの受け取り手は

NotificationConsumer

」と呼ばれています.これらは,

いずれも

Web

サービスとして実装されています.メッ

セージは,「

NotificationMessage

」と呼ばれています

(図

-2

).

 第

2

に,

WS-Notification

では,メッセージの送り手

にメッセージの受け手を登録することを,「

Subscribe

WS-Notification

を概観する

WS-Notification

を概観する

WS-Notification

の基礎

Webサービスの非同期メッセージングの実装

4

連 載

グリッドと

SOA

からみる

Web

サービス標準技術

丸山不二夫 

(稚内北星学園大学)

-1

 

WS-RF/WSDM

スタック WS-Notification WSDM(Web Services Distributed Management)

今回の説 明対象 WS-ResourceFramework ・WS-BaseNotification ・WS-BrokerdNotification ・WS-Topics ・WS-ServiceGroup ・WS-ResourceLifeTime ・WS-Resource ・WS-BaseFaults ・WS-ResourceProperties

(2)

するといいます.実際には,

Web

サービスとしての

NotificationProducer

は,そのポートに

Subscribe

オペ

レーションを実装することになります.

WS-Notification

では,

Notification

メッセージが,いくつかのテーマ

Subject

)によってグループ分けされています.このグ

ループは「

Topic

」と呼ばれています.「

Subsctiption

(登

録)」の情報には,たとえば「“

A

”(

Consumer

)を登録

する ,“

SystemError

”(

Topic

notifications

に.

Severity =

1

の場合のみ(

Precondition

)」という形で,

Topic

の情

報が含まれています.

Topic

という用語・概念は,

WS-Notification

以外でも,メッセージングの世界ではよく

使われているものです(図

-3

).

  第

3

に,

WS-Notification

で は, メ ッ セ ー ジ の 送 り

出しは,「

Notify

」すると呼ばれています.

Notification

Consumer

は,そのポートに

Notify

オペレーションを実

装していますが,

Producer

から

Consumer

へのメッセー

ジの送り出しとは,

Producer

側からの

Consumer

ポー

トの

notify

オペレーションの呼び出しにほかなりませ

ん(図

-4

).

NotificationProducer

WSDL

定義

 

NotificationProducer

WSDL

で の 定 義

3)

を 見 て

み る こ と に し ま し ょ う( リ ス ト

1

).

Producer

で は,

Subscribe

オ ペ レ ー シ ョ ン が 定 義 さ れ,

Notification

ProducerRP

というリソース・プロパティが定義されて

いることが分かります.

リスト

1

NotificationProducer

WSDL

定義

---◉

Subscribe request

のスキーマ定義

 

NotificationProducer

ポートタイプの

Subscribe

オペ

レーションが,どのようなドキュメントをやりとりする

のかを,先の

WSDL

定義の

types

節から見ておきましょ

う(リスト

2

).クライアントからサーバに対して向け

られるリクエスト,すなわち

NotificationConsumer

NotificationProducer

に渡されるリクエスト・ドキュ

メントは,次のようなスキーマで定義されています.要

素の細かな説明は省きますが,これらの要素のうち必

須なのは,

Consumer

のエンドポイントリファレンス

TopicExpression

だけであることに注目してください.

リスト

3

に,

Subscribe

メッセージのサンプルを示します.

通知の送り手 NotificationProducer 通知の受け手 NotificationConsumer 通知メッセージ NotificationMessage Notify Subscribe 図

-2

 

WS-Notification

の基本的プレーヤたち

通知の受け手/

登録者

“A” を登録する “SystemError” notifications に. Severity = “1”の場合のみ “B” を登録する “SystemError” Notificationsに. Consumer Topic Notify Precondition Consumer Topic Notify

通知の受け手

A

B

通知の送り手

-3

 

WS-Notification Subscribe

<wsdl:portType name="NotificationProducer" wsrp:ResourceProperties = "wsnt:NotificationProducerRP"> ... <wsdl:operation name="Subscribe"> <wsdl:input message= "wsnt:SubscribeRequest" /> <wsdl:output message= "wsnt:SubscribeResponse" /> <wsdl:fault name="ResourceUnknownFault" message="wsnt:ResourceUnknownFault" /> <wsdl:fault name="SubscribeCreationFailedFault" message= "wsnt:SubscribeCreationFailedFault"/> <wsdl:fault name="TopicPathDialectUnknownFault" message= "wsnt:TopicPathDialectUnknownFault"/> </wsdl:operation> ... </wsdl:portType>

(3)

リスト

2

Subscribe

リクエストのスキーマ定義

---リスト3:

Subscribe

メッセージ

---◉

Subscribe

レスポンスのスキーマ定義

 こうしたリクエストに対して,

NotificationProducer

は,リスト

4

のスキーマで定義されたレスポンスを返

します.これは,

Producer

内にリソースとして登録さ

れた

Subscription

情報のエンドポイントリファレンスだ

と考えることができます.

リスト

4

Subscribe

レスポンスのスキーマ定義

--- 

NotificationProducer

に は, リ ス ト

5

Subscription

Manager

ポートタイプが定義されています.オペレー

ションとしては,

wsrp:ResourceProperties

ポートから

GetResourceProperty

オペレーションを,

wsrl:Immediate

ResourceTermination

ポ ー ト か ら

Destroy

オ ペ レ ー

シ ョ ン を,

wsrl:ScheduledResourceTermination

か ら

SetTerminationTime

オ ペ レ ー シ ョ ン を 継 承 し て い ま

す.また,このポートの独自のオペレーションとして,

PauseSubscription

ResumeSubscription

2

つが定義

されています.

NotificationProducer

SubscriptionManager

のポートタイプ

NotificationProducer

SubscriptionManager

のポートタイプ

A

B

通知の送り手

通知の受け手

通知の受け手

Message1を  “SystemError” のときに “A”に対して通知する Message1を  “SystemError”のときに “B”に対して通知する

-4

 

WS-Notification Notify

<xsd:element name="Subscribe" > <xsd:complexType> <xsd:sequence> <!-- Consumerのエンドポイントリファレンス --> <xsd:element name="ConsumerReference" type="wsa:EndpointReferenceType" minOccurs="1" maxOccurs="1" /> <!-- ProducerがサポートしているTopicの指定 --> <xsd:element name="TopicExpression" type="wsnt:TopicExpressionType" minOccurs="1" maxOccurs="1" /> <!-- Notifyメッセージを使うか否か? --> <xsd:element name="UseNotify" type="xsd:boolean" default="true" minOccurs="0" maxOccurs="1" /> <!-- Notificationの前提条件の設定 --> <xsd:element name="Precondition" type="wsrp:QueryExpressionType" minOccurs="0" maxOccurs="1" /> <!-- NotificationMessageの選択 --> <xsd:element name="Selector" type="wsrp:QueryExpressionType" minOccurs="0" maxOccurs="1" /> <!-- Subscriptionのポリシー--> <xsd:element name="SubscriptionPolicy" type="xsd:anyType" minOccurs="0" maxOccurs="1" /> <!-- Subscriptionの生存期間の指定 --> <xsd:element name="InitialTerminationTime" type="xsd:dateTime" minOccurs="0" maxOccurs="1" /> </xsd:sequence> </xsd:complexType> </xsd:element> <wsnt:Subscribe> <wsnt:ConsumerReference> <wsa:Address> http://localhost/services/notifyReceiver </wsa:Address> </wsnt:ConsumerReference> <wsnt:TopicExpression dialect= "http://www.ibm.com/xmlns/stdwip/web-services/ WS-Topics/TopicExpression/simple"> SystemError </wsnt:TopicExpression> <wsnt:UseNotify>true</wsnt:UseNotify> </wsnt:Subscribe> <xsd:element name="SubscribeResponse"> <xsd:complexType> <xsd:sequence> <xsd:element name="SubscriptionReference" type="wsa:EndpointReferenceType" minOccurs="0" maxOccurs="1" /> </xsd:sequence> </xsd:complexType> </xsd:element>

(4)

4

連 載

グリッドと

SOA

からみる

Web

サービス標準技術

<wsnt:Subscribe> <wsnt:ConsumerReference> <wsa:Address> http://localhost/services/notifyReceiver </wsa:Address> </wsnt:ConsumerReference> <wsnt:TopicExpression dialect= "http://www.ibm.com/xmlns/stdwip/web-services/ WS-Topics/TopicExpression/simple"> SystemError </wsnt:TopicExpression> <wsnt:UseNotify>true</wsnt:UseNotify> </wsnt:Subscribe>

リスト

5

SubscriptionManager

WSDL

定義

---◉

SubscriptionManager

ポートタイプの

リソースプロパティ

  こ の

SubscriptionManager

ポ ー ト の 特 徴 は,

wsnt:

SubscriptionManagerRP

と い う 名 前 の, リ ソ ー ス プ

ロパティを持っていることです.そのスキーマ定義

をリスト6に記します.注意してほしいことは,こ

のリソースプロパティの要素が,先に見たリスト

1

NotificationProducer

Subscribe

オ ペ レ ー シ ョ

ン の リ ク エ ス ト メ ッ セ ー ジ に 対 応 し て い る こ と で

す.

NotificationProducer

への

Subscription

は,こうし

て,

SubscriptionManager

ポートのリソースプロパティ

wsnt:SubscriptionManagerRP

として,貯えられている

のです.

リスト

6

Resource Properties for SubscriptionManager

--- 

NotificationConsumer

WSDL

での定義(一部)を

見てみましょう(リスト

7

).

Consumer

では,

Notify

オペレーションが定義されています.同時に,このオペ

レーション定義では,

wsdl:input

要素しかなく,

wsdl:

output

要素がないことに注意してください.これは,

一方向の

One-Way

メッセージの

operation

定義の特徴

です.

リスト

7

NotificationConsumer

---NotificationConsumer

WSDL

定義

NotificationConsumer

WSDL

定義

<wsdl:portType name="NotificationConsumer"> <wsdl:operation name="Notify"> <wsdl:input message="wsnt:Notify" /> </wsdl:operation> </wsdl:portType> <xsd:element name="SubscriptionManagerRP" > <xsd:complexType> <xsd:sequence> <!-- From WS-ResourceLifetime ScheduledResourceTermination --> <xsd:element ref="wsrl:CurrentTime" minOccurs="1" maxOccurs="1" /> <xsd:element ref="wsrl:TerminationTime" minOccurs="1" maxOccurs="1" /> <!-- SubscriptionManager specific --> <xsd:element ref="wsnt:ConsumerReference" minOccurs="1" maxOccurs="1" /> <xsd:element ref="wsnt:TopicExpression" minOccurs="1" maxOccurs="1" /> <xsd:element ref="wsnt:UseNotify" minOccurs="1" maxOccurs="1" /> <xsd:element ref="wsnt:Precondition" minOccurs="0" maxOccurs="1" /> <xsd:element ref="wsnt:Selector" minOccurs="0" maxOccurs="1" /> <xsd:element ref="wsnt:SubscriptionPolicy" minOccurs="0" maxOccurs="1" /> <xsd:element ref="wsnt:CreationTime" minOccurs="0" maxOccurs="1" /> </xsd:sequence> </xsd:complexType> </xsd:element> <wsdl:portType name="SubscriptionManager" wsrp:ResourceProperties ="wsnt:SubscriptionManagerRP"> <!-- === extends wsrp:ResourceProperties ============= --> <wsdl:operation name="GetResourceProperty" .... /> <!-- === extends wsrl:ImmediateResourceTermination === --> <wsdl:operation name="Destroy" .... /> <!-- === extends wsrl:ScheduledResourceTermination === --> <wsdl:operation name="SetTerminationTime" .... /> <!-- === SubscriptionManager specific operations ===== --> <wsdl:operation name="PauseSubscription" .... /> <wsdl:operation name="ResumeSubscription" .... /> </wsdl:portType>

(5)

column

 一方向のメッセージングを

WSDL

で定義しようとするとき,難しいことが

1

つあります.それは,メッセージの向き

をどう表現するのかということです.リスト

7

NotificationConsumer

ポートタイプでの

Notify

オペレーションを考え

てみてください.どうして,ここのサブ要素は,

output

ではなく,

input

なのでしょう? 説明できますか? 

 

1

つの問題は,

Notify

を「通知する」と考えると,それは送り手側のアクションであって,送り手側の

operation

を呼

び出すことと考えやすいことです.そうではありません.

Notify

は,確かに送り手側から始まるアクションなのですが,

それはネットワーク上で受け手側の

Notify

オペレーションを呼び出すことで実現されています.

 ただ,そのことが分かったとしても,メッセージの向きをどう表現するかが決まるわけではありません.それは,次

のようなルールで,約束事として決められています.

  「ネットワーク上で,

requestor

provider

が相対しメッセージを交換するとき,

  

メッセージの向きは,

provider

から見た向きで決める」

 リスト7の

Notify

の例では,送り手が

requestor

,受け手が

provider

です.ですから,受け手側から見て,外から内に入っ

てくるメッセージだから,

input

だということになります.

 コンピュータの世界では,理詰めで考えると理解できることが多いのですが,メッセージの向きは,前提となる約束

事を知らないと,考えても理解できないという例の

1

つです.

メッセージの向きはどう決まるか

NotificationConsumer

Notify

スキーマ定義

 今度は,

NotificationConsumer

Notify

が,どのよ

うなドキュメントを送り出すのか,そのスキーマ定義

を見ておきましょう(リスト

8

).先にも触れたように,

Notify

オペレーションは,

One-Way

ですので,レスポ

ンスはありません.

リスト

8

Notify

スキーマ定義

---◉

NotificationMessageHolderType

スキーマ定義

  も っ と も, リ ス ト

8

の ス キ ー マ 定 義 だ け で は

Notification

メッセージの形は分かりません.リスト

9

に,

NotificationMessageHolderType

の定義を示します.

これを見ると,

Notification

メッセージは,

Topic

とメッ

セージを発した

NotificationProducer

のエンドポイント

リファレンスと,メッセージ本体の

3

つの部分から構

成されていることが分かります.

リスト

9

NotificationMessageHolderType

--- リスト

10

Notify

メッセージの具体例を示します.

<xsd:element name="Notify" > <xsd:complexType> <xsd:sequence> <xsd:element name="NotificationMessage" type="wsnt:NotificationMessageHolderType" minOccurs="1" maxOccurs="unbounded" /> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:complexType name="NotificationMessageHolderType" > <xsd:sequence> <xsd:element name="Topic" type="wsnt:TopicExpressionType" minOccurs="1" maxOccurs="1" /> <xsd:element name="ProducerReference" type="wsa:EndpointReferenceType" minOccurs="1" maxOccurs="1" />

<xsd:element name="Message" type="xsd:anyType" minOccurs="1" maxOccurs="1" />

</xsd:sequence> </xsd:complexType>

(6)

4

連 載

グリッドと

SOA

からみる

Web

サービス標準技術

リスト

10

Notify

メッセージ

--- ここでは,

GT4

と一緒に提供されているサンプル・

プログラムのうち,

Counter

というサンプルを取り上げ

たいと思います.

Counter

サンプルは,大きく

2

つの内

Counter

サンプルを見る

Counter

サンプルを見る

容を持っています.

1

つは,

WS-

リソースを生成しそれ

を管理する

WS-RF

です.

Counter

サンプルのもう

1

の内容は,

Notification

の手法です.

◉クライアントからの

WS-

リソースの生成

 前回は,

WS-RF

でのサーバ側のプログラミングにつ

いて見てきました.ここでは,

WS-RF

のクライアント

側のプログラミングのスタイルを見ておこうと思います.

WS-RF

のプログラムでは,クライアント側からサーバ

側に

WS-

リソースを生成するのは,基本的な手法です.

 リスト

11

は,

Counter

というリソースを持つ,

WS-リソースを生成するコードの一部です.図

-5

6

7

見てください.一般的には,次のような手順のプログラ

ミングになります.

1. ServiceAddressingLocator

のインスタンスを生成する

(図

-5

2. Endpoint

に対して

get*Port

を行って,

Stub

を獲得

する(図

-5

3. Stub

上の

create*

は,サーバ上で

create*

を呼び出

す(図

-6

4.

サーバ上の

create*

Home

クラスの

create

メソッ

ドを通じてリソースを生成する(図

-6

5. Stub

上の

create*

メソッドの呼び出しは,レスポン

スを返す(図

-7

6. Response

から

EndpointReference

を獲得する(図

-7

リスト

11

:クライアントからの

WS-

リソースの生成

// 1. ServiceAddressingLocatorのインスタンスを生成する CounterServiceAddressingLocator locator = new CounterServiceAddressingLocator(); // 2. Endpointに対してget*Portを行って,Stubを獲得する

service =

"http://localhost:8080//services/CounterService"; URL endpoint = new URL(service);

CounterPortType port =

locator.getCounterPortTypePort(endpoint); // 3. Stub上のcreate*は,サーバ上でcreate*を呼び出す

// 4. サーバ上のcreate*はHomeクラスのcreateメソッドを通じて

リソースを生成する // 5. Stub上のcreate*メソッドの呼び出しは,レスポンスを返す CreateCounterResponse createResponse = port.createCounter(new CreateCounter()); // 6. ResponseからEndpointReferenceを獲得する EndpointReferenceType epr = createResponse.getEndpointReference(); 1. *ServiceAddressingLocator WS-RFクライアント EndPoint WS-RFサーバ 2. get*Port Stub 図

-5

 

ServiceAddressingLocator

を生成し

Endpoint

に対して    

get*Port

を実行すると

Stub

が獲得される 3. create * Stub Request 状態を持つリソース

4. home.create()

create * WS-RFクライアント WS-RFサーバ 図

-6

 

Stub

上の

create*

は,メッセージを通じてサーバ上で    

create*

を呼び出す 状態を持つリソース 5. Response 6. getEPR EndpointReference WS-RFサーバ WS-RFクライアント

-7

 

Response

に対する

getEPR

で,

WS-

リソースへの

EPR

が返る

<wsnt:Notify> <wsnt:NotificationMessage> <wsnt:Topic>widget:TestTopic</wsnt:Topic> <wsnt:ProducerReference> <wsa:Address> http://localhost/services/ WidgetService</wsa:Address> </wsnt:ProducerReference> <wsnt:Message>test message</wsnt:Message> </wsnt:NotificationMessage> </wsnt:Notify>

(7)

リソースの変更がクライアントへの通知を

引き起こす設定

 

Counter

サンプルでは,サーバ側のリソースの値が変

更されたときに,クライアント側に通知が発行されるよ

うになっています.いくつかの部分に分けて,基本的な

設定を見ていくことにしましょう.

リソース

TopicList

への

Topic

の登録

  サ ー バ 側 で は, サ ー バ が 発 行 す る

Notification

属 す る

Topic

の 管 理 を, 管 理 す べ き

Topic

イ ン ス タ

ンスを

TopicList

に登録することで行っています.ま

た,

WS-RF

Java

実装では,サーバ側の

WS-

リソー

スは,

ResourceProperty

のインスタンスとして存在し

て, そ れ ら は,

ResourcePropertySet

に 登 録 さ れ て 管

理されています.要するに,あるサーバ(

Producer

が,どのような

Topic

を扱っているかは,

TopicList

見れば分かるし,また,そのサーバ上にどのような

WS-

リ ソ ー ス(

ResourceProperty

) が 存 在 す る か は,

ResourcePropertySet

を見れば分かるということです.

  サ ー バ リ ソ ー ス・ プ ロ パ テ ィ の 変 更 に 反 応 す る

と い う

ResourcePropertyTopic

の イ ン ス タ ン ス は,

ResourceProperty

のインスタンスから生成されます(リ

スト

12

).リスト

12

で少し分かりにくいのは,この

ResourcePropertyTopic

は, 実 は,

ResourceProperty

ンタフェースを実装しており,

Topic

でもあると同時に

ResourceProperty

でもあるという,二重の性格を持って

いるということです.

  で す か ら, リ ス ト

12

で,

ResourcePropertyTopic

の イ ン ス タ ン ス と し て 生 成 さ れ た

value

は, ま ず,

ResourceProperty

と し て

ResourcePropertySet

に 登 録

され,つづいて

Topic

として

TopicList

に登録されてい

ま す.

ResourcePropertyTopic

の 二 重 の 性 格 に 対 応 し

て,同じインスタンスが異なる管理用のリストに,二

重に登録されているわけです.ここでは,最後に,

ResourceProperty

としての値が初期化されています(リ

スト

12

,図

-8

).

リスト

12

TopicList

ResourcePropertySet

への

Topic

     

の登録

---◉

NotifyCallback

インタフェースの実装と

NotificationConsumerManager

の利用

 今度はクライアント側です.コールバックで通知を受

け取るクライアントは,

NotifyCallback

インタフェース

を実装する必要があります.具体的には,

deliver

メソッ

ドを実装する必要があります.また,このクライアン

トを

NotificationConsumer

とするために,

Notification

ConsumerManager

というクラスを利用した,リスト

13

のようなコードが使われています(図

-8

).

リスト

13

NotificationConsumerManager

の利用

---図

-8

 

TopicList

ResourcePropertySet

への    

Topic

の登録/

Subscribe

WS-Resource

ResourcePropertyTopic ResourceProperty TopicList Res ourceP rop erty Set

WS-Client

NotificationConsumerManager NotificationConsumer Deliverメソッド NotifyCallback インタフェース

Subscribe

private ResourcePropertySet propSet; private TopicList topicList;

... ...

this.value = new ResourcePropertyTopic( new SimpleResourceProperty(VALUE)); this.propSet.add(this.value); this.topicList.addTopic((Topic) this.value); this.value.add(new Integer(0)); consumer = NotificationConsumerManager.getInstance(); consumer.startListening(); EndpointReferenceType consumerEPR = consumer.createNotificationConsumer (new CounterClient());

(8)

4

連 載

グリッドと

SOA

からみる

Web

サービス標準技術

Topic

の設定と

Subscribe

 

Topic

を設定したら,

subscribe

を呼び出します(リス

14

).これでパブ/サブ型通信の基本的な設定は終了

です(図

-8

).

リスト

14

Subscribe

---◉

リソースの値の変更と

Notification

 カウンタに

3

を加算するコードは次のようなもので

す(リスト

15

).サービス・ロケータから,エンドポイ

ント・レファレンスを指定してポート(

Stub

)を取得し,

add

メソッドを呼び出しています.その次のコードは,

前回見た

WS-RF

getResourceProperty

メソッドを使っ

てリソースの取得を行っています.こうしてカウンタの

値を確認することができます.

リスト

15

:リソースの値の変更と

Notification

---  カ ウ ン タ の 値 が 更 新 さ れ る と,

ResourceProperty

Change

が検知されて,クライアントに対して

Notify

行われ,クライアントの

deliver

メソッドが呼び出され

ることになります(図

-9

).

 だいぶ駆け足でしたが,

WS-Notification

の基本部

分を見てきました.

WS-Notification

では,冒頭でも

触れたように,今回登場した

NotificationProducer

NotificationConsumer

に 加 え て, 両 者 の 仲 介 を す る

Broker

の拡張や,

subscribe

時に利用される

Topic

が階

層構造を持つなどの拡張がなされています.紙面の都合

で省略しましたが今回の内容の詳細な説明を公開してい

ますので参考にしてください

4)

 次回は,

Web

サービスの管理フレームワークを提供

する

WSDM

について紹介したいと思います.

参考文献

1)OASIS WSN TC Webページ:http://www.oasis-open.org/committees/ tc_home.php?wg_abbrev=wsn

2)Globus Toolkit Webページ:http://www.globus.org/toolkit/ 3)WS-BaseNotification v1.0:http://www-128.ibm.com/developerworks/ webservices/library/specification/ws-notification/ 4)サマースクール「Grid/WSRFとビジネスプロセスの統合」テキスト: http://www.wakhok.ac.jp/~maruyama/summer04/wsrf.pdf (平成18年11月7日受付) 図

-9

 

PropertyChange / Notify

CounterPortType addPort = locator.getCounterPortTypePort(counterEPR); client.setOptions((Stub)addPort); addPort.add(3); ... ... GetResourcePropertyResponse getRPResponse = counterPort.getResourceProperty(Counter.VALUE); System.out.println("Counter has value: " +

getRPResponse.get_any()[0]. getValue()); WS-Resource WS-Client 2. PropertyChange 3. Notify 4. Deliver ResourceProperty ResourcePropertyTopic NotificationConsumerManager NotificationConsumer 1. add

Subscribe request = new Subscribe(); request.setUseNotify(Boolean.TRUE); request.setConsumerReference(consumerEPR); TopicExpressionType topicExpression = new TopicExpressionType(); topicExpression.setDialect (WSNConstants.SIMPLE_TOPIC_DIALECT); topicExpression.setValue(Counter.VALUE); request.setTopicExpression(topicExpression); EndpointReferenceType subscriptionEPR = counterPort.subscribe(request). getSubscriptionReference(); 丸山不二夫(正会員) [email protected]  東大教育学部卒業.一橋大学大学院社会学研究科博士課程修了. 「最北端・最先端」をモットーに,稚内で新しいスタイルとコン テンツの情報教育を展開.「新しい時代の新しい大学」を目指して, 社会人IT技術者をターゲットとしたサテライト校を秋葉原に設置. アジアでのIT教育も熱心に展開している.現在,稚内北星学園大 学学長.

図 -7   Response に対する getEPR で, WS- リソースへの EPR が返る

参照

関連したドキュメント

それでは資料 2 ご覧いただきまして、1 の要旨でございます。前回皆様にお集まりいただ きました、昨年 11

現行の HDTV デジタル放送では 4:2:0 が採用されていること、また、 Main 10 プロファイルおよ び Main プロファイルは Y′C′ B C′ R 4:2:0 のみをサポートしていることから、 Y′C′ B

すべての Web ページで HTTPS でのアクセスを提供することが必要である。サーバー証 明書を使った HTTPS

当面の間 (メタネーション等の技術の実用化が期待される2030年頃まで) は、本制度において

基準の電力は,原則として次のいずれかを基準として決定するも

 今日のセミナーは、人生の最終ステージまで芸術の力 でイキイキと生き抜くことができる社会をどのようにつ

 筆記試験は与えられた課題に対して、時間 内に回答 しなければなりません。時間内に答 え を出すことは働 くことと 同様です。 だから分からな い問題は後回しでもいいので

・私は小さい頃は人見知りの激しい子どもでした。しかし、当時の担任の先生が遊びを