many of which are significant. We cannot ignore them byGoogle.（n.d.）. self organization. Retrieved 12 2009, from Wikipedia.org:

smoothing the objective functions, and it may be that random

http://www.google.com/search?q ＝ define % 3Aself-organization&sourceid

hill climbing is too inefficient. This is where Monte Carlo
methods such as Simulated Annealing and Genetic Algorithms＝ ie8-activity&hl ＝ en

•Functions whose global structure provides no usefulglossary_definition&ct ＝ title&ved ＝ 0CAcQkAE
Hoffmeyer, J. Swarm-semiotics. Retrieved 12 2009, from Molbio.ku.dk:
http://www.molbio.ku.dk/MolBioPages/abk/PersonalPages/Jesper/Swarm.

■ 概 要 ■

Krink, T. Swarm Intelligence - Introduction. Retrieved 12 2009, from staff.

インターネットでは，様々な機能の Web アプリケーション

an alternative parameterization can be found in which thewashington.edu: http://staff.washington.edu/paymana/swarm/krink_01.

や Web サービスが公開されている。それらを利用するには，

brute force random searching or enumeration may be the only
alternative.

■ Bibliography ■pdf
Liu, Y., & Passino, K. M.（2000）. Swarm Intelligence: Literature Overview.

サービスの提供を求めることが必要である。それは，プログラ

www.itl.nist.gov/div897/sqg/dads/HTML/deterministicAlgorithm.html

ムの面からは，遠隔メソッドの起動（RMI： Remote Method

NIST. probabilistic algorithm. Retrieved 12 2009, from itl.nist.gov: http://

Invocation あるいは RPC： Remote Procedure Call）によるもNojhan. ACO Branches.

Web サービスの実現の形態を拡張して，今後の Web サービスの発展を考える素材とする。

定 め ら れ た API（Application Program Interface） に 従 っ て

NIST. deterministice algorithm. Retrieved 12 2009, from itl.nist.gov: http://

www.itl.nist.gov/div897/sqg/dads/HTML/probablAlgo.html

形態を実現することの基盤とする。
これら二つの方法がどのように応用できるかは別にして，

html

the function is of no use in finding the desired model. Unlessfunction has some global structure, such as in B, extensive

教授

渡邉 勝正

org: http://www.google.com/search?hl ＝ en&defl ＝ en&q ＝ define:are normally used.

for an isolated, deep optimum, then the global structure of

京都情報大学院大学

Google.（n.d.）. swarm intelligence. Retrieved 12 2009, from Wikipedia.
Swarm+intelligence&ei ＝ RyQsS76sFsz_nAfb6pyCCQ&sa ＝ X&oi ＝

information. If the objective function is essentially flat, except

巡回するオブジェクトによるデータの収集のである。

■ 2. 遠隔メソッドの起動（RMI：Remote Method Invocation）■■ 2.1 RMIの手順 ■RMI は，クライアント（C）とサーバ（S）間の通信のプロ

本論文では，まず，RMI の動きを，一つの例を挙げて述べる。

グラム手順を，ソケットによる場合に比べて簡潔にしている。

Answers. Bees-algorithm. Retrieved 12 2009, from Answers.com: http://com/cwr/boids/

それを基にして，RMI を 2 方向の RMI に拡張して，新しいサー（1s）提供するメソッドをもつオブジェクトインスタンスを，

www.answers.com/topic/bees-algorithm

Scholarpedia. Swarm Intelligence. Retrieved 12 2009, from Scholarpedia.

Answers. particle-swarm-optimization. Retrieved 12 2009, from Answers.

org: http://www.scholarpedia.org/article/Swarm_intelligence

ビス形態の可能性を探ると共に，使用に向けての問題点を明らサーバの名前とキーワード（合言葉）で結び付ける（rebind）。

com: http://www.answers.com/topic/particle-swarm-optimization

TechFaq. swarm-intelligence. Retrieved 12 2009, from tech-faq.com:

かにする。その問題点を解消する一つの方策として，RMI を

これは名前の登録になる。

Answers.com website. Ant Colony Optimization. Retrieved 12 2009, fromhttp://www.tech-faq.com/swarm-intelligence.shtml

用いて，複数のサイトを移動して巡回するオブジェクトの実現（2c）サーバの名前とキーワードによって，メソッドをもつオ

Answers.com: http://www.answers.com/topic/ant-colony-optimization

Weiss, T. Global Optimization Algorithms - Theory and Application.

を示す。これは，たとえば，複数の顧客における発注情報を集ブジェクトインスタンスを探し出す（lookup）。これは名前にBeni, G. Order by Disordered Action in Swarms. Retrieved 12 2009, from

Retrieved 12 2009, from it-weise.de: http://www.it-weise.de/projects/book.

swarm-robotics.org: www.swarm-robotics.org/SAB04/presentations/beni-

pdf

めてくる機能として適用できる。

よる検索で行える。

research.ppt

White, T. Swarm Intelligence. Retrieved 12 2009, from sce.carleton.ca:

Beni, G., & Wang, J.（1989）. Swarm Intelligence in Cellular Robotic

http://www.sce.carleton.ca/netmanage/tony/swarm.html

Systems. Proceedings of NATO Advanced Workshop on Robots andWikipedia. Bees-algorithm. Retrieved 12 2009, from Wikipedia.org: http://

Biological Systems , 102.

en.wikipedia.org/wiki/Bees_algorithm

Bishop, J. M.（1989）. Stochastic searching networks. First IEE

Wikipedia. Conway's Game of Life. Retrieved 12 2009, from Wikipedia.org:

International Conference on Artificial Neural Networks（pp. 329-331）.

http://en.wikipedia.org/wiki/Conway% 27s_Game_of_Life

London: IEEE.

Reynolds, C. Boids. Retrieved 12 2009, from red3d.com: http://www.red3d.

（3c）メソッドの入出力仕様を定義したインタフェースに基づ■ 1. はじめに ■いて，遠隔のメソッドを呼び出す。これは，手元のメソッドを呼び出すのと同じ形になる。

インターネット上には種々の Web サービスあるいは Web

結果の型の変数 ＝ オブジェクト . メソッド（引数のリスト）;

アプリケーション（以降は，「Web サービス」とする）が開発（4s）受け取った引数に対する処理をして，その結果の値を送

Wikipedia. Emergence. Retrieved 12 2009, from Wikipedia.org: http://

されている。広く公開されているもの，または，対象とする利り返す。これは，関数値を変数に代入する文で表現できる。

Bonabeau, E., Theraulaz, G., & Dorigo, M.（1999）. Swarm Intelligence.

en.wikipedia.org/wiki/Emergence

用者を限定して通知しているものがある。通知の方法は違って名前の登録（1s）と検索（2c）は，
rmiregistry に任せる。メソッ

Oxford University Press.

Wikipedia. Flocking behavior. Retrieved 12 2009, from Wikipedia.org:

BrokenSegue. Lamp Flow Chart.

http://en.wikipedia.org/wiki/Flocking_（behavior）

いるかもしれないが，Web サービスと連携して利用する形式

ドの入出力仕様（3c, 4s）は，インタフェース（Interface）でCaridff University. The Bees Algorithm. Retrieved 12 2009, from Bee

Wikipedia. Gerardo_Beni. Retrieved 12 2009, from Wikipedia.org: http://の根底には，RMI（または，RPC）がある。

定義する。これらの関係は，図 1 のように表せる。

Algorithm: http://www.bees-algorithm.com/modules/1/0.php

en.wikipedia.org/wiki/Gerardo_Beni

Coool. Why we need lots of optimization algorithms. Retrieved 12 2009,

Wikipedia. list of optimization algorithms. Retrieved 12 2009, fromるメソッド（または，関数）を，あたかも手元にあるかのようfrom coool.mines.edu: http://coool.mines.edu/report/node3.html

Wikipedia.org: http://en.wikipedia.org/wiki/List_of_optimization_algorith

Dorigo, M., & Di Caro, G.（1999）. 2, pp. 1470-1477. Washington DC:

msに起動して，結果の値を受け取るものである。クライアントは，IEEE.

Wikipedia. Swarm. Retrieved 12 2009, from Wikipedia.org: http://

Dorigo, M., Di Caro, G., & Gambardella, L. M.（1999）. Ant algorithms foren.wikipedia.org/wiki/Swarm

で，自分のサイトに新しい機能を構築していくことができる。

discrete optimization. Artificial Life , 5（2）, 137-172.

Wikipedia. Traveling Salesman Problem. Retrieved 12 2009, from

単純な手順であり，現在の Web サービスは，殆ど，この形にEberhart, R. C., Shi, Y., & Kennedy, J.（2001）. Swarm Intelligence. Morgan

Wikipedia.org: http://en.wikipedia.org/wiki/Travelling_salesman_problem

Kaufmann.

Yap, B. V. Termite Cathedral. http://commons.wikimedia.org/wiki/File:

基づいて利用されている。

Fir0002/Flagstaffotos. Bee Swarm On Fallen Tree. http://commons.

Termite_Cathedral_DSC03570.jpg.

wikimedia.org/wiki/File:Bee_swarm_on_fallen_tree02.jpg.

RMI は，使用側（クライアント）が，遠隔のサーバ上にあ受け取った結果によって，別の Web サービスを呼び出すこと

JVM of Client
remotelocal

objectobject（1）RMI を双方向にして，サーバが処理の途中で，クライ

remote object
remote interface

remote interface

本論文では，それを次の二つに適用して，新しい Web サー
ビスの開発の可能性を探ることを目指している。

JVM of Server

2. Reference 参照

Registry

1. Registration 登録

図1 名前の登録と参照 Fig.1 Name Registration and Reference

アント側にあるメソッドを呼び出すことを可能にする。
（RMI2）David Bradford Jr.

received his B.S. in Fine Arts from Auburn University, AL
in 1992 and his M.S. degree from Southern Polytechnic
State University in Computer Science in 2010. He is currently working on Business Intelligence projects in software applications. His research interests are swarm intelligence, pattern recognition, and image processing.

Chih-Cheng Hung

received his B.S. in business mathematics from Soochow University in Taiwan, and his M.S.
and Ph.D. in Computer Science from the University of Alabama in Huntsville, AL in 1986 and1990, respectively. He is a professor of Computer Science at Southern Polytechnic State
University, GA. He developed image processing software tools with the Department of Image Processing Applications at Intergraph Corporation from 1990 to 1993 and an associate（2）RMI の機構を利用して，オブジェクトが複数のサイト

クライアントとサーバのつながりは，メソッドを含むクラス

を巡回移動して，それぞれのサイトで，あらかじめ用意したメ（class）から，rmic（RMI compiler）によって生成したスタブ

ソッドを実行する。たとえば，サイトのファイルを読みだして，（Stub）を介して行われる。

データを収集する。これは，以前には「移動エージェント」とprofessor at Alabama A&M University from 1993 to 1999. He served as the program co-呼ばれていたものである（たとえば，文献［1］）。ここでは，chair for the Association of Computing Machinery (ACM) Symposium on Applied Computing

その動きを「巡回オブジェクト」として実現した例を取り上げ(SAC 2010) – Sierre, Switzerland from March 22 to 26, 2010. He is an associate editor ofInformation: An Intenational Interdisciplinary Journal. His research interests include image

る。それにより，複数のサイトでサービスを連続して提供する■ 2.2 RMIの例 ■上述した手順を示す例として，次の仕様を持つメソッドの呼び出しを取り上げる。

processing, pattern recognition, neural networks, genetic algorithms, artificial intelligenceand software metrics.

10

11

「クライアントが指定した名前に対して，業績と生年月日を返す」
プログラムの構成とそれぞれの役割を示す。

ング操作も簡単になる。
ただし，通信形態がメソッド呼び出しの形式に限定されてい￥RMI2_Server>java ServerImp

サーバに返送する。

ServerDate1 - 2010 年11 月8 日 13：09：34 GMT+09：00

WhoIntf.java：メソッドのインタフェースを定義する。

るため，対話的に連続的なやり取りで機能を進めたい場合には（4）Ｃ← Ｓ：サーバは，クライアントからの起動（1）の結果とin try of Server main - create ServerImp

WhoClient.java：名前を指定して，サーバに尋ねる。

工夫が必要である。

して，日時と挨拶を返す。

ServerMain2 - bound in registry by toServer-key

WhoServer.java：名前から，その人の成果と生年月日を回答とプログラムの構成とそれぞれの役割を示す。

+1+ ServerImp - RMI を受け入れる準備ができました

して送る。

のメソッド func2 の機能を要求するとき，func1 と func2 の継（0s）ServerFuncInf：サーバメソッドのインタフェースを定義

ServerMain3 - End of ServerImp main（）!

Personal.java + BDate.java：人のデータをまとめたクラスと生続性が確保できるようにすることが求められる。

する。

+4+ ServerFunction - RMI を受け入れました

たとえば，第 1 のメソッド func1 の結果に基づいて，第 2年月日のクラス。
（0s&c）メソッドのインタフェースを定義する。
public Personal sayWho（String RecvMess）throws java.rmi.
RemoteException;

引数に，クライアントのIP を送って，サーバで検索する方法■ 3. 双方向遠隔メソッドの起動（RMI2） ■■ 3.1 RMI2の手順 ■+4+ ServerFunction - 引数はClientFuncInf pm です（cip）と，クライアントオブジェクトを送る方法（cob）がある。

ServerFunction - Request ：week

cip では，RMI 操作が対称的になる。

weekday number ＝ 1 daytime ＝ 13

cip：public String ServerFunction（String cip, String WeekdayorTime）+4b sendMessage - pm.ClientFunction を呼び出します

複数のメソッド呼び出しの継続性を確保する方法の一つとし

cob：public String ServerFunction（ClientFuncInf pm, String WeekdayorTime）+4c from ClientFunction ：美しい月の月曜日 for 1

で登録する。

て，双方向の RMI を考える。これは，クライアントからの RMI（0c）ClientFuncInf：クライアントメソッドのインタフェース

sendCallDate - 2010 年11 月8 日 13：10：19 GMT+09：00

WhoServer h ＝ new WhoServer（）;の中で，サーバが処理の途中でクライアントの中のメソッドをを定義する。

クライアント側：Naming.rebind（"who", h）; //bind keyword

呼び出す形態である。その手順は次のステップになる。図 2（1s）サーバのインスタンス h を生成して，キーワード "who"public String ClientFunction（String Message, int WeekdayorTimeValue）￥RMI2_ClientJapanese>java ClientImp 172.17.21.14 week（2c）クライアントが約束したキーワードでサーバインスタン（1）C→S：クライアントがサーバのメソッドfuncSを起動する。

（1s）ServerImp：サーバのmain（）とServerFunction（）メソッ

ClientMain1 - request ＝ week

スを検索する。

（2）C←S：メソッドの中で，それまでの中間結果を用いて，クラドをもつ。

+2+ ClientFunctionImp - インスタンスを作成しました

WhoIntf h＝（WhoIntf）
Naming.lookup（"//"+args［0］+ "/who"）;

イアント側のあらかじめ約束されたメソッドfuncCを起動する。

main（）では、ServerImp のインスタンスを作り，名前を登録する。

ClientMain2 + これから ServerFunction（onepm）を実行します（3c）実行引数に与えられたサーバ名（2c）と名前（たとえば，（3）C→ S：クライアントがfuncCの結果をサーバに返送する。

ServerImp oneServer ＝ new ServerImp（）;+2+ ClientImp - RMI to ServerFunction for week

Turing）で要求を出す。

（4）C← S：funcSは，
funcCの結果を用いて処理を続けて，結果をNaming.rebind（"toServer", oneServer）; // 名前は"toServer"

ClientFunction get ：week with 1

Personal message＝h.sayWho
（args
［1］
+ " を紹介してください !"）;

クライアントに返す。
これが最初のRMI（1）の結果になる。

ServerFunction（）では，前半の処理をして，クライアントのメ

send to Server >> 美しい月の月曜日 for 1

ソッドを名前”toClient” で検索して，前半の中間結果を付けて起ClientMain3 - return from ServerFunction and ClientFunction

動する。ここでは，引数にClientFuncInf pm を受け取る（0s）方ClientRMI：2010 年11 月8 日13：10：19 GMT+09：00：美 し法（cob）で行う。引数と検索結果を同じ名前（pm）にしている。

い月の月曜日 for 1（4s）サーバが sayWho の中で，受け取った名前に対応するデー
タオブジェクトを返す。
Personal m1＝new Personal（"Alan Mathison Turing","Turing Machine",
new BDate（1912,6,23））;
return（m1）;（3c+）クライアントは得られたPersonal型のデータを分解する。
実行結果は，たとえば，次のようになる。
サーバ側 ：>javac WhoServer.java>rmic WhoServer

サーバにおける（1）から（2）の間の処理と，（3）から（4）の間の処理が継続できる。
クライアント
自サイトのプログラム
結果の受け取り

サーバ
実引数
関数値

約束した
名前の
メソッド

>start rmiregistry

遠隔サイトの関数（引数）｛本体｝
クライアントのメソッドの呼び出し
戻り値の返信図 2 双方向遠隔メソッド起動 RMI2 の関係
Fig.2 Step of Bi-directional Remote Method Invocation>java WhoServer 172.16.1.136//pm＝（ClientFuncInf）Naming.lookup（"//" + cip + "/toClient"）;

ClientMain4 - End of ClientImp main（）!

fromClient ＝pm.ClientFunction（WeekdayorTime, week）;

このClientFunction は，サーバからの起動に対して日本語でクライアントから得た挨拶と日時を合わせて，後半の結果とする。

応答するが，別のクライアントでは，サーバからの起動に対して（2c）ClientImp：クライアントは，まず，自分が行うメソッド

英語で応答させることができる。

をもつクラス（3f）のインスタンスを生成して，約束した名前￥RMI2_ClientEnglish>java ClientImp 192.168.0.2 time

"toClient" で登録する。

クライアントの起動状態

ClientFunctionImp onepm ＝ClientMain1 - link to ＝192.168.0.2

new ClientFunctionImp（"We response in English to your question"）;

ClientMain1 - request ＝time

Naming.rebind（"toClient", onepm）;

ClientFunction が返送したメッセージとServerFunction の結果

Fine ! Who Server is ready on kcgi-sotec1

これを実現するために，次の対称的なペアが必要になる。

次いで，名前”toServer” でサーバインスタンスを検索して，要求send to Server >> Good Morning for 8

Please call me by：java WhoClient kcgi-sotec1

S：funcSへのキーワードとfuncSのスタブ（Stub）
をクライアン

のメッセージを付けて起動する。引数に，上で生成したオブジェ

ClientRMI：2010年11月14日 8：33：43 JST：Good Morning for 8

Receive Message：Turing を紹介してください !

トに知らせる。

クトを含める。

クライアント側：

C：funcCへのキーワードとfuncCのスタブ（Stub）
をサーバに知ServerFuncInf cliServer ＝>java WhoClient 172.16.1.136 Turing

らせる。

Start Who Client to Server：172.16.1.136
for Person：Turinglink to server 172.16.1.136
WhoClient 名前：Alan Mathison Turing
his id：Turing Machine
his 生年月日：1912–6–23
クライアントの要求が満たされている。

■ 2.3 RMIの特長と問題点 ■RMI はキーワードによって，クライアントとサーバを結び付けることができる。関数を呼び出す形式なので，プログラミ

12（3）Ｃ→ Ｓ：クライアントは曜日または時刻の日本語の挨拶をまた，双方のサイトで rmiregistry を起動して，提供するメ
ソッドのキーワードの登録と検索に備える。

■ 3.2 RMI2の例 ■クライアントとサーバが協調して「日時にあった挨拶を作る」
動きをRMI2 で構成する。これは，文献［3］を基にして変更したものである。
（1）C → S：クライアントは，サーバに曜日（Weekday）または時刻（Time）
を訊ねる。

（ServerFuncInf）Naming.lookup（"//" + args［0］+ "/toServer"）;String rmiResult＝cliServer.ServerFunction（onepm, weekortime）;（3f）ClientFunctionImp：サーバから前半の処理結果を受けて

こ の よ う に，そ れ ぞ れ の ク ラ イ ア ン ト は，サ ー バ 機 能ServerFunction の中間の結果に対して，ClientFunction の中で異なった対応をすることができる。
RMI2 では，サーバに対して依頼の連続性を維持できるので，次のようなビジネスでの対話通信に適用できる。

起動されると，後半の処理へメッセージを送り返す。
return（clientResult）;
それを受けて，サーバは（1s）で後半の処理をして，（2c）の起動に対する結果を返す。
クライアントサイトとサーバサイトには，それぞれServerImp_Stub.
class，
あるいは，ClientFunctionImp_Stub.classを伝えておく。
たとえば，日本語の挨拶を返す実行結果の一部は，次のように（2）C ← S：サーバは曜日の番号または時刻をクライアントに

なる。

知らせる。

サーバ側 ：

例 1：商品の発注

例 2：貨幣の変換（1）C → S

商品見積りを依頼

2 国間の為替レートを問う（2）C ← S

見積書を送付レートの情報を通知（3）C → S

発注する貨幣の変換を依頼する（4）C ← S

発送通知と請求書を送付

変換の通知と請求書を送付

13

「クライアントが指定した名前に対して，業績と生年月日を返す」
プログラムの構成とそれぞれの役割を示す。

ング操作も簡単になる。
ただし，通信形態がメソッド呼び出しの形式に限定されてい￥RMI2_Server>java ServerImp

サーバに返送する。

ServerDate1 - 2010 年11 月8 日 13：09：34 GMT+09：00

WhoIntf.java：メソッドのインタフェースを定義する。

るため，対話的に連続的なやり取りで機能を進めたい場合には（4）Ｃ← Ｓ：サーバは，クライアントからの起動（1）の結果とin try of Server main - create ServerImp

WhoClient.java：名前を指定して，サーバに尋ねる。

工夫が必要である。

して，日時と挨拶を返す。

ServerMain2 - bound in registry by toServer-key

WhoServer.java：名前から，その人の成果と生年月日を回答とプログラムの構成とそれぞれの役割を示す。

+1+ ServerImp - RMI を受け入れる準備ができました

して送る。

のメソッド func2 の機能を要求するとき，func1 と func2 の継（0s）ServerFuncInf：サーバメソッドのインタフェースを定義

ServerMain3 - End of ServerImp main（）!

Personal.java + BDate.java：人のデータをまとめたクラスと生続性が確保できるようにすることが求められる。

する。

+4+ ServerFunction - RMI を受け入れました

たとえば，第 1 のメソッド func1 の結果に基づいて，第 2年月日のクラス。
（0s&c）メソッドのインタフェースを定義する。
public Personal sayWho（String RecvMess）throws java.rmi.
RemoteException;

引数に，クライアントのIP を送って，サーバで検索する方法■ 3. 双方向遠隔メソッドの起動（RMI2） ■■ 3.1 RMI2の手順 ■+4+ ServerFunction - 引数はClientFuncInf pm です（cip）と，クライアントオブジェクトを送る方法（cob）がある。

ServerFunction - Request ：week

cip では，RMI 操作が対称的になる。

weekday number ＝ 1 daytime ＝ 13

cip：public String ServerFunction（String cip, String WeekdayorTime）+4b sendMessage - pm.ClientFunction を呼び出します

複数のメソッド呼び出しの継続性を確保する方法の一つとし

cob：public String ServerFunction（ClientFuncInf pm, String WeekdayorTime）+4c from ClientFunction ：美しい月の月曜日 for 1

で登録する。

て，双方向の RMI を考える。これは，クライアントからの RMI（0c）ClientFuncInf：クライアントメソッドのインタフェース

sendCallDate - 2010 年11 月8 日 13：10：19 GMT+09：00

WhoServer h ＝ new WhoServer（）;の中で，サーバが処理の途中でクライアントの中のメソッドをを定義する。

クライアント側：Naming.rebind（"who", h）; //bind keyword

呼び出す形態である。その手順は次のステップになる。図 2（1s）サーバのインスタンス h を生成して，キーワード "who"public String ClientFunction（String Message, int WeekdayorTimeValue）￥RMI2_ClientJapanese>java ClientImp 172.17.21.14 week（2c）クライアントが約束したキーワードでサーバインスタン（1）C→S：クライアントがサーバのメソッドfuncSを起動する。

（1s）ServerImp：サーバのmain（）とServerFunction（）メソッ

ClientMain1 - request ＝ week

スを検索する。

（2）C←S：メソッドの中で，それまでの中間結果を用いて，クラドをもつ。

+2+ ClientFunctionImp - インスタンスを作成しました

WhoIntf h＝（WhoIntf）
Naming.lookup（"//"+args［0］+ "/who"）;

イアント側のあらかじめ約束されたメソッドfuncCを起動する。

main（）では、ServerImp のインスタンスを作り，名前を登録する。

ClientMain2 + これから ServerFunction（onepm）を実行します（3c）実行引数に与えられたサーバ名（2c）と名前（たとえば，（3）C→ S：クライアントがfuncCの結果をサーバに返送する。

ServerImp oneServer ＝ new ServerImp（）;+2+ ClientImp - RMI to ServerFunction for week

Turing）で要求を出す。

（4）C← S：funcSは，
funcCの結果を用いて処理を続けて，結果をNaming.rebind（"toServer", oneServer）; // 名前は"toServer"

ClientFunction get ：week with 1

Personal message＝h.sayWho
（args
［1］
+ " を紹介してください !"）;

クライアントに返す。
これが最初のRMI（1）の結果になる。

ServerFunction（）では，前半の処理をして，クライアントのメ

send to Server >> 美しい月の月曜日 for 1

ソッドを名前”toClient” で検索して，前半の中間結果を付けて起ClientMain3 - return from ServerFunction and ClientFunction

動する。ここでは，引数にClientFuncInf pm を受け取る（0s）方ClientRMI：2010 年11 月8 日13：10：19 GMT+09：00：美 し法（cob）で行う。引数と検索結果を同じ名前（pm）にしている。

い月の月曜日 for 1（4s）サーバが sayWho の中で，受け取った名前に対応するデー
タオブジェクトを返す。
Personal m1＝new Personal（"Alan Mathison Turing","Turing Machine",
new BDate（1912,6,23））;
return（m1）;（3c+）クライアントは得られたPersonal型のデータを分解する。
実行結果は，たとえば，次のようになる。
サーバ側 ：>javac WhoServer.java>rmic WhoServer

サーバにおける（1）から（2）の間の処理と，（3）から（4）の間の処理が継続できる。
クライアント
自サイトのプログラム
結果の受け取り

サーバ
実引数
関数値

約束した
名前の
メソッド

>start rmiregistry

遠隔サイトの関数（引数）｛本体｝
クライアントのメソッドの呼び出し
戻り値の返信図 2 双方向遠隔メソッド起動 RMI2 の関係
Fig.2 Step of Bi-directional Remote Method Invocation>java WhoServer 172.16.1.136//pm＝（ClientFuncInf）Naming.lookup（"//" + cip + "/toClient"）;

ClientMain4 - End of ClientImp main（）!

fromClient ＝pm.ClientFunction（WeekdayorTime, week）;

このClientFunction は，サーバからの起動に対して日本語でクライアントから得た挨拶と日時を合わせて，後半の結果とする。

応答するが，別のクライアントでは，サーバからの起動に対して（2c）ClientImp：クライアントは，まず，自分が行うメソッド

英語で応答させることができる。

をもつクラス（3f）のインスタンスを生成して，約束した名前￥RMI2_ClientEnglish>java ClientImp 192.168.0.2 time

"toClient" で登録する。

クライアントの起動状態

ClientFunctionImp onepm ＝ClientMain1 - link to ＝192.168.0.2

new ClientFunctionImp（"We response in English to your question"）;

ClientMain1 - request ＝time

Naming.rebind（"toClient", onepm）;

ClientFunction が返送したメッセージとServerFunction の結果

Fine ! Who Server is ready on kcgi-sotec1

これを実現するために，次の対称的なペアが必要になる。

次いで，名前”toServer” でサーバインスタンスを検索して，要求send to Server >> Good Morning for 8

Please call me by：java WhoClient kcgi-sotec1

S：funcSへのキーワードとfuncSのスタブ（Stub）
をクライアン

のメッセージを付けて起動する。引数に，上で生成したオブジェ

ClientRMI：2010年11月14日 8：33：43 JST：Good Morning for 8

Receive Message：Turing を紹介してください !

トに知らせる。

クトを含める。

クライアント側：

C：funcCへのキーワードとfuncCのスタブ（Stub）
をサーバに知ServerFuncInf cliServer ＝>java WhoClient 172.16.1.136 Turing

らせる。

Start Who Client to Server：172.16.1.136
for Person：Turinglink to server 172.16.1.136
WhoClient 名前：Alan Mathison Turing
his id：Turing Machine
his 生年月日：1912–6–23
クライアントの要求が満たされている。

■ 2.3 RMIの特長と問題点 ■RMI はキーワードによって，クライアントとサーバを結び付けることができる。関数を呼び出す形式なので，プログラミ

12（3）Ｃ→ Ｓ：クライアントは曜日または時刻の日本語の挨拶をまた，双方のサイトで rmiregistry を起動して，提供するメ
ソッドのキーワードの登録と検索に備える。

■ 3.2 RMI2の例 ■クライアントとサーバが協調して「日時にあった挨拶を作る」
動きをRMI2 で構成する。これは，文献［3］を基にして変更したものである。
（1）C → S：クライアントは，サーバに曜日（Weekday）または時刻（Time）
を訊ねる。

（ServerFuncInf）Naming.lookup（"//" + args［0］+ "/toServer"）;String rmiResult＝cliServer.ServerFunction（onepm, weekortime）;（3f）ClientFunctionImp：サーバから前半の処理結果を受けて

こ の よ う に，そ れ ぞ れ の ク ラ イ ア ン ト は，サ ー バ 機 能ServerFunction の中間の結果に対して，ClientFunction の中で異なった対応をすることができる。
RMI2 では，サーバに対して依頼の連続性を維持できるので，次のようなビジネスでの対話通信に適用できる。

起動されると，後半の処理へメッセージを送り返す。
return（clientResult）;
それを受けて，サーバは（1s）で後半の処理をして，（2c）の起動に対する結果を返す。
クライアントサイトとサーバサイトには，それぞれServerImp_Stub.
class，
あるいは，ClientFunctionImp_Stub.classを伝えておく。
たとえば，日本語の挨拶を返す実行結果の一部は，次のように（2）C ← S：サーバは曜日の番号または時刻をクライアントに

なる。

知らせる。

サーバ側 ：

例 1：商品の発注

例 2：貨幣の変換（1）C → S

商品見積りを依頼

2 国間の為替レートを問う（2）C ← S

見積書を送付レートの情報を通知（3）C → S

発注する貨幣の変換を依頼する（4）C ← S

発送通知と請求書を送付

変換の通知と請求書を送付13

び付けるメソッドと，Mobje の累積データをもつ。たとえば，（iag, 1）
TestAgent@15dfd77
16, AS8 - sendAgent to receiveAgent￥w3Osaka>java Place Osaka

本例では次の変数を定義している。

［1］Place Kyotoサイトでの実行表示結果：

17,28*PL5：receiveAgent（ag, ifrom）Place

クライアント側のメソッド名（ClientFunction）を約束して

public int cmax＝4;//MobjeがPlaceを移動する回数を指定する￥w3Kyoto>java Place Kyoto

TestAgent@1a16869 ifrom ＝ 2

おくことにより，サーバ側の複数の機能を連続して起動する形

public int count;//Mobjeの移動回数を数える count〈＝ cmax

1, PL1：main（args［0］）Kyoto

trace ＝ /* KyotoからOsakaに来た履歴を示す */■ 3.3 RMI2の特長と問題点 ■態を実現できる。

public String trace ＝ new String（""）; // 移 動 し たPlace の

ただし，サーバは，それぞれのクライアントの機能と連携するクラスのスタブ（Stub）を備える必要がある。

public String order＝ new String（""）; // 取り込んだ発注情

4,..*PL7：wait in popAgent（ifirst）from Place.start（）
1

1：Kyoto1 + 2 <<rmi：//172.17.21.39/Kyoto>>

17,..*PL5：receiveAgent（ag, ifrom）AgentStarter

2：Osaka1 + 3 <<rmi：//172.17.21.6/Osaka>>

TestAgent@1a16869 ifrom ＝ 1

for GetOrder local filename ＝ OrderOsaka1.txt

そのため，複数のクライアントが同時に依頼を出すことに対応

報を累積する

trace ＝ /* 最初にKyotoに来たとき，発注データを取り出す */O：Dell Desktop Machine, 12個;するには，それぞれのクライアントへのスタブを識別すること（4）TestAgent：Mobje の具体的な実装クラスである。Mobje

1：Kyoto1 + 2 <<rmi：//172.17.21.39/Kyoto>>

O：サーバマシン DELL, 5台;が要求される。

の初期設定（init）あるいは Mobje の本体動作（come），および，for GetOrder local filename ＝ OrderKyoto1.txt

O：Hard Disk 4TB, 8台;

Mobje の移動の指定（go）のメソッドをもつ。Mobje が果た

K：Pnasonic Note PC, 20個;

O：USB メモリ 64GB, 20個■

4. 移動・巡回するオブジェクト■■ 4.1 オブジェクトの移動 ■遠隔メソッド起動RMI では，クライアントが要求するときにサーバの機能を起動した。逆に，サーバ側が要求するときに，サーバのオブジェクトをクライアント側に移して，そこで機能を発揮することが考えられる。これについては，以前に，モバイ
ル・エージェント（Mobile Agent）として研究が進められていた。
たとえば，文献［1］［2］。

す機能を come（）で記述する。

K：サーバマシン DELL, 5台;+++24+Ta3 + 3 到着時刻 - 2010年11月15日 11：45：10（5）AgentStarter：新しい Mobje を作り出して , 指定した最初

K：Hard Disk 4TB, 8台;

GMT+09：00の Place に送り出す。このクラスは，Mobje を作り出すサイト+++24+Ta3 + 2 到着時刻 - 2010年11月15日 11：45：10,25*Ta4 - come（）and go（here, 42）here ＝ rmi：

（start）だけに必要で，各 Place（Kyoto, Osaka, Nara）にはい

GMT+09：00//172.17.21.7/Nara

らない。
それぞれのサイトにPlace_Stubを持たせて，
Place.receiveAgent（）の実行を支える。
また，各サイトに発注データを記録したテキストファイルを準備しておく。

,25*Ta4 - come（）and go（here, 42）here ＝ rmi：

なお，たとえば，PlaceNaraでの発注データのファイルは次のも//172.17.21.6/Osakaのであった。

trace ＝

| N：Note PC, 22個/* 二回目にKyotoに来たとき，集めてきた発注デー

タを表示する */| N：Hard Disk 4TB, 6台

1：Kyoto1 + 2 <<rmi：//172.17.21.39/Kyoto>>| N：USB メモリ 64GB, 10個

その一つの方法は，あらかじめエージェントオブジェクトをサイト間の制御の流れは，大まかに，次のようになる。

2：Osaka1 + 3 <<rmi：//172.17.21.6/Osaka>>

受け入れるサイト（Place）を予定しておいて，RMI によってオ

Step0：AgentStarterを実行するサイト（start）で，一つの3：Nara1 + 4 <<rmi：//172.17.21.7/Nara>>

ブジェクトをPlace に移すことである。

Mobjeを作り出して，最初の Place（たとえば，Kyoto）に送り

4：Kyoto102 + 5 <<rmi：//172.17.21.39/Kyoto>>

えば，上記の例のように，Kyotoから出発して発注を収集する

AgentSystem as＝（AgentSystem）Naming.lookup（place）; // 移出す。

for GetOrder local filename ＝ OrderKyoto102.txt（file read）Mobjeとは逆に，Osakaから出発して商品見積書を配動先のPlace

Step1：Placeのサイトでは，受け入れた Mobjeを一旦キューに

ORDER state ＝布する（file write）Mobjeを構成できる。
これは，各Placeに商品

as.receiveAgent（ag, 2）;// 移動先の受け入れメソッドを起動入れて，キューの先頭から Mobjeを取りだす。これは，複数のrmi：//172.17.21.39/Kyoto;

カタログデータを残していく。たとえば，
各サイトのファイルする。

Mobjeが巡回する場合に備えている。

K：Pnasonic Note PC, 20個;

ReceivePost.txtに次のデータを残していく。

ここで，AgentSystem は，receiveAgent（）を定義しているイン

Step2：Placeで取り出した Mobjeを，AgentKickerが新しいス

K：サーバマシン DELL, 5台;| 01：ノートPC, Dell2010, 45000

タフェースである。

レッドとして働かせる。

K：Hard Disk 4TB, 8台;| 02：大容量USBメモリ, Sharp2011, 6800

このように，サーバからオブジェクトを順にサイトを移動させStep3：Mobje（ 本例では，TestAgent）の come（ ）で，定め

rmi：//172.17.21.6/Osaka;| 03：新規サーバマシン, Fujitsu888, 128000て，
たとえば，各クライアントの状態情報や発注情報を集めるこられた仕事を，現在の Place（ サイト）で実行する。これがO：Dell Desktop Machine, 12個;

| end of 3-items 2010.11.16とができる。

Mobjeの役割を表している。

O：サーバマシン DELL, 5台;

Step4：移動回数 countが，定めた回数 cmaxに達していなけれ

O：Hard Disk 4TB, 8台;

ば，Mobjeを次の Placeに移す。移動先で Step1から Step4が行

O：USB メモリ 64GB, 20個移動するオブジェクト Mobje は，約束されたサイト間で，われる。count〉＝ cmaxならば実行を終了する。

rmi：//172.17.21.7/Nara;

オブジェクトを移動させて，Mobje がもっているメソッドを，

N：Note PC, 22個;

移動先のサイトで実行させることができた。登録された会員，

N：Hard Disk 4TB, 6台;

あるいは，顧客（クライアント）のサイトを周って，取り決め■ 4.2 巡回オブジェクトの動きと手順 ■問題として，「クライアントの発注情報を，各 Place のファ
イルから取り出して集めてくる。」サーバ（オブジェクト）の働きを，一例として考える。ここでは，移動するオブジェクト（mobile object）を Mobje と略称する。
プログラムの構成：文献［1］の例を参考にして，それを，同■ 4.3 巡回オブジェクトの実行例 ■本例と同じPlaceを対象として，巡回の経路が違う，
あるいは，違った動作をする移動オブジェクトMobjeを形成できる。
たと■ 4.4 巡回オブジェクトの特長と問題点 ■一つのMobjeが巡回を実行したとき，
Mobjeを作り出すstart

N：USB メモリ 64GB, 10個た機能を提供することができる。これによって，インターネッ

サイト，
巡回の最初と最後のPlaceになるKyoto，
途中のPlaceのrmi：//172.17.21.39/Kyoto;トを介した新しい応用の可能性が広がることを目指している。
ただし，そのためには，Place に相当するサイトで，Mobje

じ名前で，拡張変更した。

Osaka，
での表示結果の一部を示す。

K：一巡してきました;（0）AgentSystem：Place が Mobje を 受 け 入 れ る メ ソ ッ ド［0］startサイトでの実行表示結果：

end of orderを受け入れるプログラムを準備して，定時に実行していること

Place.receiveAgent（）のインタフェースを定義する。

￥w3start>java AgentStarter TestAgent+++24+Ta3 + 5 到着時刻 - 2010年11月15日 11：45：11

が必要である。クライアントが好きな時にサーバの機能を使う（1）Place：AgentSystem インタフェースの実装クラスである。

5, AS1 - main
（args
［0］
）TestAgent

GMT+09：00

場合は，Web サービスを提供するサーバは，RMI の受け入れ

Mobje の送受信（send/receive）と保存取り出し操作（push/

10, Ta1 - init（）of TestAgent ：count ＝ 1,25*Ta4 - come（）and go（here, 42）here ＝ rmi：

をできるように待機している。逆に，サーバ機能が移動あるpop）のメソッドをもつ。

11, Ta2 - init（）and go（here, 41）here ＝ rmi：//172.17.21.6/Osaka

いは巡回する場合は，Web サービスを受けるクライアントが，,ee*Tae - in come（）over count > cmax：4

約束した時刻には稼働していて，待機している必要がある。

本例では，Kyoto, Osaka, Nara の 3 つの Place サイトを定めた。

//172.17.21.39/Kyoto（2）AgentKicker：引数に与えられた Mobje を , 新しいスレッ

13, AS5 - sendAgent（iag, place）iag ＝ TestAgent@15dfd77

ドとして働かせる。

14, AS6 - sendAgent（iag, place）place ＝ rmi：（3）Agent：Mobje の抽象クラスであり，Mobje と Place を結

14

経歴を記録する//172.17.21.39/Kyoto

最初の訪問では，発注データを読み取り，一巡した後の二回目の訪問では，各サイトの発注データをまとめて表示している。
［2］Place Osakaサイトでの実行表示結果：

巡回の時刻に停止しているクライアントをスキップする方法が求められる。
本例で示したような，データの収集やデータの配布の他に，15び付けるメソッドと，Mobje の累積データをもつ。たとえば，（iag, 1）
TestAgent@15dfd77
16, AS8 - sendAgent to receiveAgent￥w3Osaka>java Place Osaka

本例では次の変数を定義している。

［1］Place Kyotoサイトでの実行表示結果：

17,28*PL5：receiveAgent（ag, ifrom）Place

クライアント側のメソッド名（ClientFunction）を約束して

public int cmax＝4;//MobjeがPlaceを移動する回数を指定する￥w3Kyoto>java Place Kyoto

TestAgent@1a16869 ifrom ＝ 2

おくことにより，サーバ側の複数の機能を連続して起動する形

public int count;//Mobjeの移動回数を数える count〈＝ cmax

1, PL1：main（args［0］）Kyoto

trace ＝ /* KyotoからOsakaに来た履歴を示す */■ 3.3 RMI2の特長と問題点 ■態を実現できる。

public String trace ＝ new String（""）; // 移 動 し たPlace の

ただし，サーバは，それぞれのクライアントの機能と連携するクラスのスタブ（Stub）を備える必要がある。

public String order＝ new String（""）; // 取り込んだ発注情

4,..*PL7：wait in popAgent（ifirst）from Place.start（）
1

1：Kyoto1 + 2 <<rmi：//172.17.21.39/Kyoto>>

17,..*PL5：receiveAgent（ag, ifrom）AgentStarter

2：Osaka1 + 3 <<rmi：//172.17.21.6/Osaka>>

TestAgent@1a16869 ifrom ＝ 1

for GetOrder local filename ＝ OrderOsaka1.txt

そのため，複数のクライアントが同時に依頼を出すことに対応

報を累積する

trace ＝ /* 最初にKyotoに来たとき，発注データを取り出す */O：Dell Desktop Machine, 12個;するには，それぞれのクライアントへのスタブを識別すること（4）TestAgent：Mobje の具体的な実装クラスである。Mobje

1：Kyoto1 + 2 <<rmi：//172.17.21.39/Kyoto>>

O：サーバマシン DELL, 5台;が要求される。

の初期設定（init）あるいは Mobje の本体動作（come），および，for GetOrder local filename ＝ OrderKyoto1.txt

O：Hard Disk 4TB, 8台;

Mobje の移動の指定（go）のメソッドをもつ。Mobje が果た

K：Pnasonic Note PC, 20個;

O：USB メモリ 64GB, 20個■

4. 移動・巡回するオブジェクト■■ 4.1 オブジェクトの移動 ■遠隔メソッド起動RMI では，クライアントが要求するときにサーバの機能を起動した。逆に，サーバ側が要求するときに，サーバのオブジェクトをクライアント側に移して，そこで機能を発揮することが考えられる。これについては，以前に，モバイ
ル・エージェント（Mobile Agent）として研究が進められていた。
たとえば，文献［1］［2］。

す機能を come（）で記述する。

K：サーバマシン DELL, 5台;+++24+Ta3 + 3 到着時刻 - 2010年11月15日 11：45：10（5）AgentStarter：新しい Mobje を作り出して , 指定した最初

K：Hard Disk 4TB, 8台;

GMT+09：00の Place に送り出す。このクラスは，Mobje を作り出すサイト+++24+Ta3 + 2 到着時刻 - 2010年11月15日 11：45：10,25*Ta4 - come（）and go（here, 42）here ＝ rmi：

（start）だけに必要で，各 Place（Kyoto, Osaka, Nara）にはい

GMT+09：00//172.17.21.7/Nara

らない。
それぞれのサイトにPlace_Stubを持たせて，
Place.receiveAgent（）の実行を支える。
また，各サイトに発注データを記録したテキストファイルを準備しておく。

,25*Ta4 - come（）and go（here, 42）here ＝ rmi：

なお，たとえば，PlaceNaraでの発注データのファイルは次のも//172.17.21.6/Osakaのであった。

trace ＝

| N：Note PC, 22個/* 二回目にKyotoに来たとき，集めてきた発注デー

タを表示する */| N：Hard Disk 4TB, 6台

1：Kyoto1 + 2 <<rmi：//172.17.21.39/Kyoto>>| N：USB メモリ 64GB, 10個

その一つの方法は，あらかじめエージェントオブジェクトをサイト間の制御の流れは，大まかに，次のようになる。

2：Osaka1 + 3 <<rmi：//172.17.21.6/Osaka>>

受け入れるサイト（Place）を予定しておいて，RMI によってオ

Step0：AgentStarterを実行するサイト（start）で，一つの3：Nara1 + 4 <<rmi：//172.17.21.7/Nara>>

ブジェクトをPlace に移すことである。

Mobjeを作り出して，最初の Place（たとえば，Kyoto）に送り

4：Kyoto102 + 5 <<rmi：//172.17.21.39/Kyoto>>

えば，上記の例のように，Kyotoから出発して発注を収集する

AgentSystem as＝（AgentSystem）Naming.lookup（place）; // 移出す。

for GetOrder local filename ＝ OrderKyoto102.txt（file read）Mobjeとは逆に，Osakaから出発して商品見積書を配動先のPlace

Step1：Placeのサイトでは，受け入れた Mobjeを一旦キューに

ORDER state ＝布する（file write）Mobjeを構成できる。
これは，各Placeに商品

as.receiveAgent（ag, 2）;// 移動先の受け入れメソッドを起動入れて，キューの先頭から Mobjeを取りだす。これは，複数のrmi：//172.17.21.39/Kyoto;

カタログデータを残していく。たとえば，
各サイトのファイルする。

Mobjeが巡回する場合に備えている。

K：Pnasonic Note PC, 20個;

ReceivePost.txtに次のデータを残していく。

ここで，AgentSystem は，receiveAgent（）を定義しているイン

Step2：Placeで取り出した Mobjeを，AgentKickerが新しいス

K：サーバマシン DELL, 5台;| 01：ノートPC, Dell2010, 45000

タフェースである。

レッドとして働かせる。

K：Hard Disk 4TB, 8台;| 02：大容量USBメモリ, Sharp2011, 6800

このように，サーバからオブジェクトを順にサイトを移動させStep3：Mobje（ 本例では，TestAgent）の come（ ）で，定め

rmi：//172.17.21.6/Osaka;| 03：新規サーバマシン, Fujitsu888, 128000て，
たとえば，各クライアントの状態情報や発注情報を集めるこられた仕事を，現在の Place（ サイト）で実行する。これがO：Dell Desktop Machine, 12個;

| end of 3-items 2010.11.16とができる。

Mobjeの役割を表している。

O：サーバマシン DELL, 5台;

Step4：移動回数 countが，定めた回数 cmaxに達していなけれ

O：Hard Disk 4TB, 8台;

ば，Mobjeを次の Placeに移す。移動先で Step1から Step4が行

O：USB メモリ 64GB, 20個移動するオブジェクト Mobje は，約束されたサイト間で，われる。count〉＝ cmaxならば実行を終了する。

rmi：//172.17.21.7/Nara;

オブジェクトを移動させて，Mobje がもっているメソッドを，

N：Note PC, 22個;

移動先のサイトで実行させることができた。登録された会員，

N：Hard Disk 4TB, 6台;

あるいは，顧客（クライアント）のサイトを周って，取り決め■ 4.2 巡回オブジェクトの動きと手順 ■問題として，「クライアントの発注情報を，各 Place のファ
イルから取り出して集めてくる。」サーバ（オブジェクト）の働きを，一例として考える。ここでは，移動するオブジェクト（mobile object）を Mobje と略称する。
プログラムの構成：文献［1］の例を参考にして，それを，同■ 4.3 巡回オブジェクトの実行例 ■本例と同じPlaceを対象として，巡回の経路が違う，
あるいは，違った動作をする移動オブジェクトMobjeを形成できる。
たと■ 4.4 巡回オブジェクトの特長と問題点 ■一つのMobjeが巡回を実行したとき，
Mobjeを作り出すstart

N：USB メモリ 64GB, 10個た機能を提供することができる。これによって，インターネッ

サイト，
巡回の最初と最後のPlaceになるKyoto，
途中のPlaceのrmi：//172.17.21.39/Kyoto;トを介した新しい応用の可能性が広がることを目指している。
ただし，そのためには，Place に相当するサイトで，Mobje

じ名前で，拡張変更した。

Osaka，
での表示結果の一部を示す。

K：一巡してきました;（0）AgentSystem：Place が Mobje を 受 け 入 れ る メ ソ ッ ド［0］startサイトでの実行表示結果：

end of orderを受け入れるプログラムを準備して，定時に実行していること

Place.receiveAgent（）のインタフェースを定義する。

￥w3start>java AgentStarter TestAgent+++24+Ta3 + 5 到着時刻 - 2010年11月15日 11：45：11

が必要である。クライアントが好きな時にサーバの機能を使う（1）Place：AgentSystem インタフェースの実装クラスである。

5, AS1 - main
（args
［0］
）TestAgent

GMT+09：00

場合は，Web サービスを提供するサーバは，RMI の受け入れ

Mobje の送受信（send/receive）と保存取り出し操作（push/

10, Ta1 - init（）of TestAgent ：count ＝ 1,25*Ta4 - come（）and go（here, 42）here ＝ rmi：

をできるように待機している。逆に，サーバ機能が移動あるpop）のメソッドをもつ。

11, Ta2 - init（）and go（here, 41）here ＝ rmi：//172.17.21.6/Osaka

いは巡回する場合は，Web サービスを受けるクライアントが，,ee*Tae - in come（）over count > cmax：4

約束した時刻には稼働していて，待機している必要がある。

本例では，Kyoto, Osaka, Nara の 3 つの Place サイトを定めた。

//172.17.21.39/Kyoto（2）AgentKicker：引数に与えられた Mobje を , 新しいスレッ

13, AS5 - sendAgent（iag, place）iag ＝ TestAgent@15dfd77

ドとして働かせる。

14, AS6 - sendAgent（iag, place）place ＝ rmi：（3）Agent：Mobje の抽象クラスであり，Mobje と Place を結

14

経歴を記録する//172.17.21.39/Kyoto

最初の訪問では，発注データを読み取り，一巡した後の二回目の訪問では，各サイトの発注データをまとめて表示している。
［2］Place Osakaサイトでの実行表示結果：

巡回の時刻に停止しているクライアントをスキップする方法が求められる。
本例で示したような，データの収集やデータの配布の他に，

15クライアントの定期診断などのサービスが考えられる。

ては問題点もあるが，２つの形態を用いて，新しい Web サー

暦に基づく時間指示表現の意味表現形式

ビスを開発することの可能性を探った。どのような機能を実現■するかは，今後に取り組む興味ある問題である。

5. おわりに ■インターネット上の Web サービスあるいは Web アプリケー

近畿大学

溝渕 昭二

香川大学

安藤 一秋

【参考文献】

ションを利用する基盤になる遠隔メソッド起動（RMI）に注目

1. 岩井俊弥 , “Java モバイル・エージェント ”, ソフト・リサーチ・

した。RMI の動きを明確にして，それを双方向 RMI に拡張すセンタ , 1998.

ること（RMI2）と，RMI を用いてサイト間でオブジェクトを

2.Jeff Nelson, “Programming Mobile Objects with Java”, John

移動させること（Mobje）を導入した。RMI2 によって，一つWilly & Sons, 1999.

■ 概要 ■

いるので，暦表現の表す量的な意味の把握は特に重要になる。
しかしながら，従来の研究では，質的な意味ばかりが注目され，

自然言語処理システムにおいて，時間表現の意味を理解する

量的な意味についてはあまり考慮されていなかった。

のクライアントからの複数のメソッド起動に連続性を保つこと

3.Charles W. Kann,“Creating Components ： Object Oriented,

ことは非常に重要である。そして，このような機能を実現する

そこで，本論文では，暦表現を対象として，その意味の量的ができる。Mobje によって，サーバがクライアント側に移動しConcurrent, and Distributed Computing in Java”, Auerbach

ことにより，人間とコミュニケーションを図る情報処理システ

側面を記述するための手法を提案する。本手法では，暦表現のてサービスを提供することができる。それぞれの適用に当たっPublication, 2003.

ム，特に，言語によって示される事態の時間的関係を視覚化し指し示す時間の範囲を時間指示式と呼ばれる式で表す。これは，たり，形式化された時間情報を言語化したりするなどの高度な暦表現の示す時間の範囲を最終的にはコレクションという一つ

情報変換を必要とするシステムの能力を向上させることができの数値情報に変換するものである。したがって，本手法は先にる。しかしながら、従来の研究では，そのようなシステムの実述べたような高度な情報変換に活用することができる。

渡邉

Watanabe

勝正

Katsumasa

京都大学大学院工学研究科博士課程修了（数理工学専攻），工学博士。
元京都大学助教授，元福井大学教授，元奈良先端科学技術大学院大学教授，
社団法人情報処理学会フェロー。

現に必要な時間情報の量的側面があまり考慮されていないとい

本論文の構成を次に記す。2 章では，先行研究とその問題点

う問題があった。本論文では，暦に基づく時間指示表現を対象について述べる。3 章では，時間表現における暦表現の位置付として，その意味を記述するための表現形式である時間指示式

けとその意味的な性質について述べる。4 章では，暦表現の意を提案する。暦に基づく時間指示表現は，時間表現のうち暦が味表現形式である時間指示式を提案する。5 章では，時間指示規定する時間の区割りに基づいて特定の時間を指し示す表現で式の処理系の実装とその上での工夫について述べる。6 章では，あり，質的な意味と量的な意味を併せもつ。提案する時間指示

先行研究において提案された手法と本手法とを比較により評価

式は，その量的な意味を最終的にはコレクションと呼ばれる区する。最後に，7 章では，まとめと今後の課題について述べる。

間の集合で表すという特徴を持つ。これは，参照可能な時間の範囲と精度が限定されているという Leban らの手法が持つ欠■ ２．先行研究とその問題点 ■点を改善したものである。
暦表現を取り扱った研究は，言語学やコンピュータ科学の分■ １．はじめに ■野などで行われている。以降では，各分野での研究を概観し，それらが抱える問題点について述べる。

言語を媒体として人間とのコミュニケーションを図る情報処

言語学の分野において時間を対象とする研究のほとんどは，理システム，特に，言語によって示される事態の時間的関係を

時間表現をテンスやアスペクトなどの質的なカテゴリに分類す視覚化したり，形式化された時間情報を言語化したりするなど

るものである。このような状況において，金子は時間表現の形の高度な情報変換を必要とするシステムにおいて，時間表現の。これは，コンピュータで式的記述方法を提案している［1］意味を正確に理解する機能を実現することは重要である。なぜ

時間表現を取り扱うための基盤を提供するものであるが，暦表

なら，時間表現は言語が描写する事態の理解に必要不可欠な時

現の内容は，例えば，t =「1 月」（t は指し示している時間）の間情報を含み，そして，それは多くの言語表現において明示的ように，式の中に言語表記が埋め込まれた形でしか参照されなにあるいは暗示的に出現するからである。

い。つまり，暦表現に限って言えば，その意味を記述するよう時間表現には，「2001 年」や「今日」のように暦が規定す

16な形式を提案するまでには至っていない。

る時間の区割りに基づいて特定の時間を指し示す表現が存在す

自然言語処理の分野では，言語表現の解析や生成を行う枠組る。この表現は，数を使って表される内容であり，時間表現のみの中で時間表現が取り扱われている。暦表現を取り扱った従中で最も具体的な内容を提供する。本論文では，この表現を「暦来の研究を見た場合，そのほとんどは，機械翻訳や情報抽出に基づく時間指示表現」，以降では，単に「暦表現」と呼ぶこ

における質的な意味だけに着目した当該表現の認識方法［2］とにする。

（「2001 年」が時間表現であると認識すること）や変換方法［3］

暦表現の意味を考えた場合，それは質と量の二つの側面を併（「今日」を「today」と翻訳すること）の提案である。このよせもつ。例えば，「2001 年」の質的な意味とは，それが時間うな状況において，量的な意味の解釈（「2001 年」を「紀元表現あるいは西暦年を表すということであり，量的な意味とは，から 2001 番目の年」と解釈すること）まで至った研究としてそれが紀元から 2001 番目に位置する年を表すということであは，溝渕らの手法（M 手法）［4］が挙げられる。この手法では，る。

あらかじめ定めたパターンに値を埋め込むような表現形式が提さて，冒頭で述べたようなシステムにおいて暦表現の表す時案されているが，そこに埋め込まれる数値には，特定の暦のも間情報を変換する場合，そこには数値化可能な情報が含まれてのが想定されているので，すべての暦表現の量的な意味を記述

17