本システムの動作シナリオを以下に示す.なお,プロバイダが提供するWeb
サービスの実体をポートタイプと呼称する.ポートタイプの厳密な定義は,WSDL
のportType
要素の定義に準じる.
まず,リクエスタが利用するポートタイプの構造を解析し,コードのメタ情報を 取得する.この情報は,変換対象となるコードと変換ルールを記述するために用 いられる.
以下にシーケンスを示す.
以下にシーケンスを示す.
以下にシーケンスを示す.
以下,本研究におけるコード変換技術の位置付けを示し,技術的概要と既存技術 について述べる.
本システムは,ロード済みのポートタイプを直接変換する.したがって,プロバ イダの実行環境が実行時コード変換技術をサポートしていることが必須要件となる.
一方,リクエスタサイドでは,テスト用コードの記述容易性が重要となる. 利便性の観点から見て,テスト用コードは既存のプログラミング言語を 用いて,テストケースの一部としてシームレスに記述できることが望ましい.低級な記法に限定 することはテストコードの難読化に繋がる.また,独自記法では,開発者に学習 コストを負担させることになる.
しかし,記述性の自由度の観点から見ると,高級な記法のみに限定することは自由 度を狭める要因となる.記述能力の限界はテスト用コードの処理系に強く依存す るので,コード変換に既存のフレームワークを用いる場合は,その記述能力の限 界を見定めた上で適用する必要がある.この点から,高級な記法に特化している ツールを本システムにそのまま適用することは得策とは言えない.開発者の 利便性を損ねないという条件を満たした上で,より低級な記法もサポートできる フレームワークを選択するか,または両者の併用を検討すべきである.
上記の観点を踏まえ,コード変換技術について以下説明する.
静的コード変換は,コンパイル済みのコードに対し,実行環境にロードされてい ない状態において変換処理を実行する.一方,動的コード変換は,コードのロード時か, または既にロード済みの状態において変換処理を実行する.
なお,本研究においてコード変換技術と呼称する対象は,変換ルールをプログラマブ ルに記述可能な手法に限定する.
変換ルールの記述形式は,対象をバイナリレベルで直接操作するものからソースコード レベルの高級言語を用いた指定が行えるものまで様々な種類がある.一般に,前 者に近いほど緻密な指定が可能であるが,記述が複雑かつ難解になりやす い.一方,後者は高級言語による記述が可能なので論理的な変換ルールを組みやすいが, コードの振る舞いを完全に制御することは不可能もしくは困難である.
コード変換技術の実現可能性は,その性質上処理系の仕様に極めて依存する. 特に動的変換を実現する場合は,データ型やメソッドシグニチャ などのメタ情報を動的に取得する機能を,実行環境がサポートしていなければな らない.
AOPでは,プログラム全体に散在する共通の処理概念を「横断的関心事」とし, プログラムモジュールの再利用性を損ねるものと見なす.そこで,横断的関心事は「アス ペクト」と呼称される局所化されたモジュールとして抽出し,既存のプログラム コードに挿入するという手法を採る.AOPは,専らオブジェクト指向開発において,オブジェクト 指向方法論ではモジュール化できない処理概念を再利用可能にするものとして, 補完的に導入される.
アスペクトはAOP処理系によって対象となるプログラムへ静的または動的に挿入 される.挿入するコードポイントは設定ファイルなどの外部リソースに高級な記 法で指定する.
動的なAOPは,再利用性の促進効果に加えて,元のコードに静的な影響をまった く及ぼすことなく,容易に,かつ大域的にコードを追加・除去できるという利点 を持つ.例えば,デバッグ時にのみ必要なロギング処理をアスペクトとして実装し ておけば,実運用に移行した際にプログラム全体をソースコードから再コンパイ ルすることなく,設定ファイルや起動パラメタの調整のみで除去できる.
既に多くのAOP実装が開発されており,かつ広く普及しているが,いずれも アスペクトの挿入を静的もしくはロード時に実行する手法を採っており, オンメモリのコードに対する変換はサポートしていないか,もしくは機能的に不 完全な実装に留まっている. この制限は,実行環境の機能不足に起因する.具体的な詳細は次節で述べる.
現在,比較的コード変換を容易に実現可能で,かつ最も多く実装が開発され ているプログラミング環境はJava[14]である. Javaはインタプリタ型の仮想マシンを実行環境としており,コンパイル済みのコー ドに対して比較的容易に変更を加えられる.また,デバッグモードや Hotswapなどの実行時コード変換を可能とする機能が仮想マシン仕様に含まれて おり[15],動的AOPツールなどロード時または実行時にコード変換を行う実装にとっ て都合が良いという利点がある.しかし,メソッドシグニチャの動的な追加や変 更は不可能であるといった制限もあり,完全な実行時コード変換を実現するには 十分でない.将来的にこのような制限は撤廃される予定であるが,現状では各コー ド変換ツールがそれぞれ独自の手法を用いて制限を吸収している事例が殆どであ る.
MITSUBAYASHI Shin 2007-03-14