概要

インターネットの発達にともない, 分散型のソフトウェアの重要性が広く認識され, その需要も爆発的に増大している. しかし, 分散型のソフトウェアを開発することは技術的に難しいことも多い. Java言語にはRMI, JavaIDL, JXTA, Jini, Horb, Voyagerといったクライアント・サーバ型や ピア・ツー・ピア(P2P)型の分散システムを開発するためのツールや開発システムが数多く用意されている. しかし, 分散型のソフトウェアを開発するためには, そのアプリケーション本来の機能であるアプリケーションロジックに加えて, その機能を複数の計算機に分散させて実行するための分散ソフトウェア特有のコードを開発しなければならない. 分散処理のためのコードには, 複数の計算機に分散した機能をネットワークを経由して連携して実行させるためのネットワーク処理やスレッド制御などが含まれる. このような分散処理のためのコードをアプリケーションロジックと合わせて開発することは, アプリケーションロジックと分散処理の混同を招き, 開発作業を必要以上に複雑にしてしまう. また, アプリケーションロジックの開発者が, いつも分散処理に精通しているとは限らない. 既に開発済みのアプリケーションを分散化する必要が発生する場合もある. 既存ソフトウェアの変更は新規開発よりも工数がかかる場合も多い.

しかし, アプリケーションロジックと分散処理のためのコードとを独立して開発できれば, 回避できる問題も多い. アプリケーションロジックと分散処理は, それぞれの分野を得意とする別の開発者が担当し効率よく開発できるようになり, また, 既存のスタンドアロンのアプリケーションには外付けで分散処理を追加できるようになる.

本研究の目的は, 分散システムの開発にあたって, アプリケーションロジックとネットワーク処理を分離して開発できる方式を確立し, その方式を支援するツールを開発することにある. アプリケーションロジックとネットワーク処理とを独立して開発できれば, アプリケーションロジックとネットワーク処理は, それぞれの分野を得意とする別の開発者が担当し効率よく開発できるようになり, また, 既存のアプリケーションには外付けでネットワーク処理を追加できるようになる. 即ち, 分散システム開発における関心事の分離である.

図1: TRMIの概要

TRMIにおいては, スタンドアロンのアプリケーションロジックを実装したオブジェクトは, ネットワーク処理やスレッド制御, 例外処理, オブジェクト配置などの機能を持つ部品と組み合わせるだけで分散オブジェクトとすることができる.

図1で, dispatcher と receptorはネットワーク処理を担当する部品である. 全てのネットワーク処理はこれらの部品内に隠蔽されている. アプリケーションロジックを含む他の部品は, ネットワーク処理に対して一切関知しなくて良い. さらに, 各サーバオブジェクトは exception handlerschedulerおよびfactory オブジェクトを持つ.
exception handler オブジェクトは, サーバのメソッドをネットワーク化されたマルチスレッド環境で実行する際に発生する例外を処理する機能を持つ. scheduler オブジェクトは, サーバのメソッドを同時に実行する複数のスレッドの同期制御を行う役割を持っている. Factoryオブジェクトは, 分散環境におけるサーバオブジェクトの生成や, 遠隔ホストへの配置機能を持つ.

研究は, 現在分散システムの開発に広く使用されているJava言語を対象として行った. また, 方法論の研究のみではなく, その方法論を実現するためのツールを合わせて開発し, 実用化を目指した研究を行った. また, 開発するツールは, 分散ソフトウェアを開発する際に使用するだけでなく, 実行時における開発者やシステム管理者の負担を軽減する機能を含んだ総合的なツールにすることを狙った.
現時点までに, TRMIのおおまかな実装は完了し, クライアント・サーバ型, ピア・ツー・ピア型並びにグリッド型の分散システムをTRMIを用いて関心事を分離しながら開発できるようになった.