SOA アプリケーションプラットフォームのプロダクトライン化に関する研究—再利用コンポーネントの定義， 設計， 実装—
2009SE124 小林利誌 2010SE244 富塚祐太
指導教員：野呂昌満

1

はじめに
本研究室では，SOA アプリケーションプラットフォー妥当性を確認した．

2

本研究の前提ム (以下，App.PF) のプロダクトライン化に関する研究 [2]再利用コンポーネントは，ホットスポットに適合するミが行なわれている．App.PF のプロダクトライン化によっドルウェアの柔軟な変更を実現するためのコンポーネンて，ミドルウェアの選択に影響されない SOA システムのト群である．ミドルウェアの柔軟な変更を実現するため開発が支援される．プロダクトラインアーキテクチャはアに，変動性を実現する仕組みを参考にした．本研究では，スペクト指向に基づいて構築している．アプリケーション

Variant ごとにインターフェースが異なるので，Variation
Point ごとに統一のインターフェースを定義する．

フレームワークはプロダクトラインアーキテクチャに基づ

ホットスポットにミドルウェアを適合させるためには，いて定義している．アプリケーションフレームワークの構
築では，ミドルウェアの選択に影響を受けるアスペクトを次の３つの条件を満たす必要がある．

ホットスポットとして定義する．ミドルウェアは製品ごと• オブジェクトの Semantics が包含関係にインターフェースが異なる．ミドルウェア間の差異を吸• メソッドの Semantics が同一収し，ホットスポットにミドルウェアを適合させるための• メソッドのシグネチャが同一再利用コンポーネント群を用意する．App.PF のプロダク
トライン化の課題として，再利用コンポーネントの自動生成が挙げられる．再利用コンポーネントの自動生成を実現するためには，自動生成の仕組みを整理し，自動生成のためのツールを整備する必要がある．
本研究の目的は，再利用コンポーネントの自動生成の仕組みの整理である．自動生成の仕組みを整理することで，App.PF のプロダクトライン構築を支援する．再利用コン

オブジェクトの Semantics を比較するために，オブジェ
クトの Operational Semantics を比較する．オブジェク
トの Operational Semantics は，状態遷移図で記述し，比較する．ミドルウェアのオブジェクトの状態遷移図
が，Variation Point のオブジェクトの状態遷移図を包含していれば，ホットスポットにミドルウェアを適合可能である．本研究では，ミドルウェアのオブジェクトのOperational Semantics は，Variation Point のオブジェ
クトの Operational Semantics を包含しているものとす
可能な箇所を整理し，入力と出力を整理する．
る．メソッドの Semantics を比較するために，Variation
ホットスポットにミドルウェアを適合させるためには，Point のメソッドと，ミドルウェアのメソッドの事前条件，ポーネントの自動生成の仕組みの整理のために，自動生成次の３つの条件を満たす必要があると考え，その方法について整理した．

• オブジェクトの Semantics が包含関係事後条件を比較する．比較するメソッドは，開発者が用意した対応表に基づいて決定する．本研究では，Variation• メソッドの Semantics が同一

Point のメソッドと，ミドルウェアのメソッドの事前条件，事後条件は包含で，メソッドの Semantics が同一である• メソッドのシグネチャが同一とする．これらの前提があるとき，ホットスポットにミド

本研究では，オブジェクトの Semantics は包含関係にあルウェアを適合させるためには，メソッドのシグネチャがり，メソッドの Semantics は同一であることを前提とす同一であればよい．メソッドのシグネチャが同一でなけれる．ミドルウェアの柔軟な変更を実現するために，変動性ば，その差異を吸収することで，ホットスポットにミドルを実現する仕組み [1] を参考にし，Variation Point(変動ウェアを適合させることができる．シグネチャの差異は，点) ごとに統一のインターフェースを定義した．統一のイ

統一のインターフェースでミドルウェアのインターフェー

ンターフェースとミドルウェアのインターフェースのシグスをラッピングすることで吸収する．ラッピングするさいネチャの差異を吸収するために，引数を Semantics で対応に，統一のインターフェースの引数と，ミドルウェアのイづけた．引数の Semantics の対応関係をパターン化するこ

ンターフェースの引数を役割で対応づける必要がある．とで，引数を対応させるコードが自動生成可能であると考えた．引数を対応させるコードの自動生成の入力と出力を3引数の対応づけ整理した．App.PF のアプリケーションフレームワークの統一のインターフェースの引数と，ミドルウェアのインホットスポットで事例検証を行ない，自動生成の仕組みのターフェースの引数を対応づけるために，引数の Seman-tics に着目した．引数にそれぞれタグを与え，タグの名前で引数の Semantics を記述した．同一の名前のタグを与えられている引数同士を対応づける．引数に与えたタグが，複数のタグのレコードである場合は，タグにタグパターンを与えることでその情報を記述する．図 1 は，引数に与えたタグのタグパターンを示している．

図 4 結合対応

図 1 タグパターン

4

図 5 分割 + 結合対応

再利用コンポーネントの自動生成
統一のインターフェースの引数と，ミドルウェアのイン

3.1

タグの対応関係のパターン化

ターフェースの引数に与えたタグの対応関係をパターン化

統一のインターフェースの引数に与えたタグと，ミドルできたことから，引数を対応させるコードが自動生成可能

ウェアのインターフェースの引数に与えたタグの対応関係と考えた．引数と，引数に与えたタグの対応関係を入力とからパターンを発見し，整理した．引数に与えたタグの対し，引数を対応させるコードを出力とする．通常対応の場応関係のパターンとして，次の４つを定義した．

合は，入力した統一のインターフェースの引数を，タグが対応しているミドルウェアのインターフェースの引数に渡• 通常対応すコードを出力する．図 6 は，図 2 の通常対応の例で出• 分割対応

力する，引数を対応させるコードである．分割対応の場合• 結合対応は，入力した統一のインターフェースの引数を役割で分割• 分割 + 結合対応

し，その役割を持つ値を生成する．生成した値を，タグが通常対応は，統一のインターフェースの引数に与えたタ対応しているミドルウェアのインターフェースの引数に渡グと同一のタグが，ミドルウェアのインターフェースの引すコードを出力する．図 7 は，図 3 の分割対応の例で出力数に与えられているパターンである．図 2 では，引数にする，引数を対応させるコードである．結合対応の場合は，与えたタグが，通常対応のパターンで対応づいている．分

入力した統一のインターフェースの引数のレコードをタグ

割対応は，統一のインターフェースの引数に与えたタグの対応関係をもとに生成する．生成したレコードを，タグのフィールドと同一のタグが，ミドルウェアのインターが対応しているミドルウェアのインターフェースの引数にフェースの引数に与えられているパターンである．図 3 で渡すコードを出力する．図 8 は，図 4 の結合対応の例で出は，引数に与えたタグが，分割対応のパターンで対応づい力する，引数を対応させるコードである．分割 + 結合対応ている．結合対応は，統一のインターフェースの引数に与の場合は，入力した統一のインターフェースの引数を役割えたタグのレコードと同一のタグが，ミドルウェアのインで分割し，その役割を持つ値を生成する．生成した値のレターフェースの引数に与えられているパターンである．図コード，または生成した値と他の引数のレコードを，タグ2 では，引数に与えたタグが，結合対応のパターンで対応づいている．分割 + 結合対応は，統一のインターフェースの対応関係をもとに生成する．生成したレコードを，タグの引数に与えたタグのフィールドと同一のタグをフィール渡す値を出力する．図 9 は，図 5 の分割 + 結合対応の例

ドとするタグが，ミドルウェアのインターフェースの引数で出力する，引数を対応させるコードである．

が対応しているミドルウェアのインターフェースの引数にに与えられているパターンである．図 5 では，引数に与えたタグが，分割 + 結合対応のパターンで対応づいている．

図 6 通常対応の場合におけ 図 7 分割対応の場合における引数を対応させるコード5
図 2 通常対応
図 3 分割対応

る引数を対応させるコード

事例検証

App.PF の Variation Point で あ る Message ServiceProvider(以下，MSP) で，事例検証を行なった．Variation Point MSP は，サービス同士のメッセージングを仲図 8 結合対応の場合におけ 図 9 分割 + 結合対応の場る引数を対応させるコード 合における引数を対応させる
コード

図 10 Variation Point MSP の統一のインターフェースの引数に与えたタグ介する．Variation Point MSP の統一のインターフェース
は，process(Packet packet):void と定義する．引数 packetは，次の３つの情報を保持している．

• 自身を送る相手• App.PF のセッション情報• 相手に送信するメッセージ
packet を受け取ったサービスは，送られてきたメッセージに応じてオペレーションを実行し，App.PF のセッションを変更する．

引数 messages は，App.PF のセッション情報と，相手に送信するメッセージの情報を保持している．よって，

Tag:MESSAGES は，Tag:TARGET と Tag:MESSAGEの レ コ ー ド で あ る ．Tag:MESSAGES が レ コ ー ド で あることを示すために，タグパターン +(Tag:SESSION，Tag:MESSAGE) を Tag:MESSAGES を付加する．図 11
は，ミドルウェアのインターフェースの引数 name，messages に与えたタグを示している．

Variation Point MSP の Variant であるミドルウェアの選択肢には，次の３つが存在する．

• JBossESB• MuleESB• ServiceMix
これら３つのミドルウェアは，いずれも JMS をサポートしている．よって，これら３つのミドルウェアのインターフ

図 11 Variation Point MSP の Variant であるミドルウェ

ェースは，process(String name, Message messages):void

アのインターフェースの引数に与えたタグである．

5.1

引数の対応づけ

統一のインターフェースの引数とミドルウェアのイ統一のインターフェースの引数と，ミドルウェアのインターフェースの引数に与えたタグの対応関係の中かンターフェースの引数を Semantics で対応づけるため

ら ，定 義 し た パ タ ー ン を 発 見 す る ．統 一 の イ ン タ ー フに，引数にタグを与えて Semantics を記述する．統一のェースの引数 packet に与えた Tag:PACKET のフィー

インターフェースの引数 packet に Tag:PACKET を与ルド Tag:TARGET と同一のタグが，ミドルウェアのイえる．引数 packet は，３つの情報を保持している．それ

ンターフェースの引数 name に与えられている．この対らの情報の Semantics を記述するために，それぞれにタ応関係は，分割対応のパターンである．統一のインターグを与える．自身の送り先の情報に，Tag:TARGET をフェースの引数 packet に与えた Tag:PACKET のフィー

与 え る ．App.PF の セ ッ シ ョ ン 情 報 に ，Tag:SESSION

ルド Tag:SESSION，Tag:MESSAGE のレコードであるを 与 え る ．相 手 に 送 信 す る メ ッ セ ー ジ の 情 報 に ， Tag:MESSAGES が，ミドルウェアのインターフェース

Tag:MESSAGE を与える．よって，Tag:PACKET は， の引数 messages に与えられている．この対応関係は，分Tag:TARGET，Tag:SESSION，Tag:MESSAGE のレコー 割 + 結合対応のパターンである．図 12 は，Variation
ドである．Tag:PACKET がレコードであることを示す Point MSP における，引数に与えたタグの対応関係のために，タグパターン +(Tag:TARGET，Tag:SESSION， 中から発見したパターンを示している．統一のインター
Tag:MESSAGE) を Tag:PACKET に付加する．図 10 は， フェースの引数 packet が持つ３つの情報すべてを，ミド統一のインターフェースの引数 packet に与えたタグを示 ルウェアのインターフェースの引数に対応させることがしている．
できた．よって，統一のインターフェース process(Packet
ミドルウェアのインターフェースの引数にタグを与え packet):void で，ミドルウェアのインターフェース proる．引数 name は，メッセージを送る相手の情報を保持 cess(String name，Message messages):void をラッピングしている．よって，引数 name には，Tag:TARGET を与 することができる．ラッパーの実現によって，ホットスえる．引数 messages には，Tag:MESSAGES を与える． ポットにミドルウェアを適合させることが可能となった．

できると考えた．引数が複数の情報を保持していることを示すために，引数に与えるタグにタグパターンを付加することを提案した．

App.PF の Variation Point である MSP の事例で，タグによって引数を対応づけることが可能か検証した．統一のインターフェースの引数が持つすべての情報を，ミドルウェアのインターフェースの引数に対応させることができた．よって，タグを利用して引数を対応づける方法は妥当であると考える．

6.2

引数を対応させるコードの自動生成の仕組みの妥
当性

引数に与えたタグの対応関係のパターンを整理した．引図 12 Variation Point MSP におけるタグの対応関係から数と，引数に与えたタグ同士の対応関係のパターンを入力発見したパターンすることで，引数を対応させるコードが自動生成可能であると考えた．App.PF の Variation Point である MSP の事例で，引数を対応させるコードを導出可能か検証した．

5.2

再利用コンポーネントの自動生成

引数と，引数に与えたタグの対応関係のパターンを入力

統一のインターフェースとミドルウェアのインターとし，引数を対応させるコードを出力とした．統一のインフェースの引数に与えたタグの対応関係から，定義したターフェースの引数が持つすべての情報を，ミドルウェアパターンを発見した．発見したパターンから，引数を対応のインターフェースの引数に対応させるコードを導出するさせるコードを導出する．引数 packet と引数 name が， ことができた．よって，提案した自動生成の仕組みは妥当

Tag:TARGET の通常対応によって対応づいている．よって，引数 packet が持つ，自身を送る相手の情報を，引数name に渡すコードを自動生成する．引数 packet と引数messages が，Tag:SESSION，Tag:MESSAGE の分割 +結合対応によって対応づいている．よって，引数 packet がを整理するために自動生成可能な箇所と入力と出力の整理持つ，セッション情報と，相手に送信するメッセージの情を行なった．オブジェクトの Semantics が包含関係であである．

7

おわりに本研究では，再利用コンポーネントの自動生成の仕組み報のレコードを生成するコードを自動生成する．さらに， り，メソッドの Semantics が同一であるときのメソッドの生成した値を引数 messages に渡すコードを自動生成する． シグネチャの差異を吸収した．引数を対応させるためにタ
引数と，引数に与えたタグの対応関係のパターンを入力とグを用いて引数の Semantics を記述した．タグの名前からすることで，引数を対応させるコードを導出することがで引数を Semantics で対応させた．タグの対応関係をパターきた．図 13 は，引数と，引数に与えたタグの対応関係のン化することで，引数を対応させるコードを自動生成可能パターンから導出した，出力となる引数を対応させるコーであると特定した．自動生成の入力を引数と，引数に与えドである．

たタグの対応関係のパターンとし，引数を対応させるコードを出力とした．
本研究の成果は，ある前提のもとで再利用コンポーネントの自動生成の仕組みを整理したことである．今後の課題は，自動生成のためのツールを整備することである．オブジェクトの Semantics が包含関係にないときの再利用コン

図 13 MSP の事例において入力から導出したコードポーネントの自動生成の仕組みも整理する必要がある．

参考文献

6

考察

6.1

引数を対応づける方法の妥当性

統一のインターフェースの引数と，ミドルウェアのイン[1] K. Czarnecki, and U. W. Eisenecker, Generative
Programming: Methods, Tools, and Applications,
Addison-Wesley, 2000.

ターフェースの引数を対応づける方法について考察する． [2] 江坂篤侍，野呂昌満，沢田篤史， SOA に基づくシス
引数同士を対応づけるために，引数の Semantics に着目しテムのためのアプリケーションプラットフォームのプた．引数にタグを与え，タグの名前で引数の Semantics をロダクトライン化に関する研究, 情報処理学会研究報記述した．同一の名前のタグを与えられている引数同士を告．ソフトウェア工学研究会報告，vol. 2013-SE-179，対応させることで，引数を Semantics で対応させることがno. 25, pp. 1-6, 2013.