既存Javaプログラム向け 分散化支援システムの開発

Slides:



Advertisements
Similar presentations
1 安全性の高いセッション管理方 式 の Servlet への導入 東京工業大学 理学部 千葉研究室所属 99-2270-6 松沼 正浩.
Advertisements

Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
Remote Method Invocation
JPAを利用した RESTful Webサービスの開発
2006年11月22日 植田龍男 Webサービス II (第9回) 年11月22日 植田龍男.
Javaのための暗黙的に型定義される構造体
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
AspectScope によるアスペクトとクラスのつながりの視覚化
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
同期的にアドバイスを活性化できる分散動的アスペクト指向システム
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
ユーザ毎にカスタマイズ可能な Web アプリケーション用のフレームワークの実装
RMI ソフトウェア特論 第6回 /
アスペクト指向プログラミングと Dependency Injection の融合
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
既存Javaプログラムの バイトコード変換による 機能分散
遠隔ポイントカット - 分散アスペクト指向プログラミング のための言語機構
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
統合開発環境のための アスペクト指向システム
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
Javaプログラムの変更を支援する 影響波及解析システム
アスペクト指向に基づく 拡張可能な MDAモデルコンパイラ
横断的関心事に対応したオブジェクト指向言語GluonJとその織り込み関係の可視化ツール
豊富な情報を基にした pointcut を記述できるアスペクト指向言語
コードクローンの動作を比較するためのコードクローン周辺コードの解析
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
アプリケーション依存の先読みが可能なO/Rマッピングツール
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
pointcut に関して高い記述力を持つ アスペクト指向言語 Josh
Java における 先進的リフレクション技術
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
分散 Java プログラムのための アスペクト指向言語
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
Josh : バイトコードレベルでのJava用 Aspect Weaver
統合開発環境によって表現された 言語機構によるコードのモジュール化
IDE を活用した言語機構に頼らないコード再利用のためのモジュール化
同期処理のモジュール化を 可能にする アスペクト指向言語
アスペクト指向言語のための視点に応じた編集を可能にするツール
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
オープンソースソフトウェアに対する コーディングパターン分析の適用
ソフトウェア制作論 平成30年11月28日.
ユビキタスコンピューティングの ための ハンドオーバー機能付きRMIの実装
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
プログラム分散化のための アスペクト指向言語
統合開発環境のための プログラミング言語拡張 フレームワーク
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
GluonJ を用いたビジネスロジックからのデータベースアクセスの分離
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

既存Javaプログラム向け 分散化支援システムの開発 東京工業大学大学院 情報理工学研究科 数理計算科学専攻 千葉研究室所属 03M37200 須永 豊 修士論文発表会

既存ソフトウェアの分散化 現実的なソフトウェアを分散化出来るか? ターゲットとするのは機能分散 非分散な既存ソフトウェア 分散用に開発しなおすのはコストがかかる 再利用したいモジュール 分散アプリケーション開発用のモジュールは不向き EJB,Servlet,ORB・・・ フレームワークに応じた大幅なプログラムの変更 煩雑な修正作業を自動化するツール Addistant,J-Orchestra etc 現実的なソフトウェアを分散化出来るか?

このプログラムをサーバ・クライアント型のアプリケーションに変えて欲しい! 実例の紹介(ARMSoftware) ARMSoftware[Arita,M. ‘03] 化学物質の構造式・反応式・パスウェイを辿るためのJavaプログラム 2003年度未踏ソフトウェア事業 2万行強の中規模サイズアプリケーション スタンドアロンなプログラム 利用者はホームページからダウンロードし、自分のマシン上で利用 このプログラムをサーバ・クライアント型のアプリケーションに変えて欲しい! 修士論文発表会

ARMSoftwareの分散化 開発者からの要求 手動で分散化を行い、約3人月 プログラムの変更 特定の機能のみをサーバで動かしたい DBからパスウェイを探索する機能 DBから構造式の画像を取得する機能 etc プログラムの変更 サーバ側で動かすために特定クラスをリモート化 JavaRMIの仕様に合わせてリモートクラス化 呼び出し元の変更 リモート化によって生じる                  アプリケーションセマンティクスの変更 アプリケーション毎に異なる処理 手動で分散化を行い、約3人月 典型的な 分散化のための リファクタリング 従来ツールで サポートが可能 修士論文発表会

アプリケーションセマンティクスの変更(メソッド単位での遠隔配置) あるクラスの特定メソッドのみ遠隔配置 分散化に適していないモジュール分割 従来システムではサポートされていない class Doc extends…{ public short urlIndex; public Vector urlList; public Object[] search (…){ /*サーバ側で処理させたい。 フィールド等にアクセスし、 outputData()の処理内容に影響 する*/ } public void output(…) {  //クライアント側で処理 ….. urlList urlIndex  output()     search() ……… Docオブジェクト Docオブジェクト Docオブジェクト urlList urlIndex 同期処理 Client Server

アプリケーションセマンティクスの変更 (マルチユーザ化) 複数ユーザで利用可能に クライアント毎にセッションを用意 セッションの実装方法は様々 リストを使ったり、デザインパターンを用いたり 用意したいセッション処理も異なる Server スタンドアロンな プログラム Client C Client Client B 修士論文発表会

従来の自動分散化システムでは困難な点 アプリケーションセマンティクスの変更を伴う 分散化 分散化に適さないモジュール分割のプログラム アプリケーションセマンティクスの変更を伴う 分散化 分散化に適さないモジュール分割のプログラム 遠隔配置以外の処理も必要 機能拡張等のプログラムの構造を変える処理 遠隔配置を施す以外のプログラム変換は行わない セッション処理の付加等 しかし、現実的なソフトウェアには必要 典型的な自動化では対応できない箇所を サポートできるツールが必要 修士論文発表会

分散化支援ツールJacrossの提案 分散に関する記述力を強化した分散支援ツール XMLによる、より詳細な分散配置の指定 Aspect指向技術を応用し、プログラムの構造を変化 ソースコードに変更は加えない 分散処理用Aspectとしてモジュール化 遠隔参照の実現等の典型的な分散化処理は自動化 バイトコード変換により実現 分散 処理用 Aspect 分散 ポリシー 元プログラム ・スタンドアロン ・シングルユーザ用 生成プログラム ・サーバクライアント ・マルチユーザ用 Jacrossで分散化 修士論文発表会

典型的な自動分散化処理 対象クラスのタイプに応じた配置指定 プロキシマスタ方式に基づき、クラスを遠隔参照出来る用に変換 Replace 対象クラスのコードが可変である場合に適用可能 元クラスを中身がプロキシ化されたもので置換 Rename 参照側クラスのコードが可変である場合に適用可能 <クラス名>+_Proxyでプロキシクラスを生成 参照側クラス内の対象クラスへの参照をプロキシに変更 Subclass 対象クラスを遠隔とローカルの2箇所で利用したい場合 対象クラスのサブクラスとしてプロキシを実装 指定クラス内からの参照のみをサブクラス化されたプロキシへと変更 修士論文発表会

permethod メソッド単位で分散化処理 ローカルと遠隔でそれぞれ1つずつオブジェクトを生成 メソッドを指定し、対象メソッドのみを遠隔配置 各方針と併用 ローカルと遠隔でそれぞれ1つずつオブジェクトを生成 遠隔メソッド呼び出し時のみ遠隔オブジェクトを利用 遠隔とローカルのオブジェクトの反映が必要 自動化すべきではない箇所(実装は様々) Doc d = new Doc(); Object ret = d.search(); d.output(); Client Doc output() index 同 期 化 等 の 処 理 が 必 要 R  M   I Doc search() index Server 修士論文発表会

分散処理用Aspect ソースコードに変更は加えない Inter-type Declaration インタセプタ XMLを利用したバインド 元プログラムにフィールドとメソッドを追加する。 インタセプタ 元プログラムの制御フローを変える 利用者の指定した箇所で割り込み処理を行う。 XMLを利用したバインド Inter-type Declarationとインタセプタをバインドする為の記述は分散ポリシー内で行う 修士論文発表会

Inter-type Declaration フィールドやメソッドを追加する Javaで定義 追加されたメソッドもリモート化の対象に 追加先を予測して指示 Inter-type Declaration public class DocInterType { public Vector indexlist; public Vector getList() { …… } 生成クラス public class Doc…{ public Vector indexlist; public Vector getList() { …… } public Object foo(..) { 元クラス class Doc…{ …… public Object foo(..) { } 修士論文発表会

インタセプタ 元プログラム インタセプタ 制御フローを変える為のプログラム JacrossInterceptor Invocation プログラムの指定した箇所で割り込み処理を行う インタセプタはJavaで定義 JacrossInterceptor インタセプタは、このクラスを継承し、全てのメソッドはObject型の戻り値とInvocation型の引数を持つ → 制約 proceed() : 割り込み元の操作を実行するメソッド Invocation getThis(), getTarget() 等: 割り込み元のコンテクストを取得するメソッドを提供 元プログラム Doc d = new Doc(..); …… d.setIndex(..); …. 割り込み箇所 (pointcut) イ ン タ セ プ で 処 理 class DocInterceptor…{ ……. Object setLog(Invocation i) { System.out.println(“before”); Object ret = proceed(i); System.out.println(“after”); return ret; } …… インタセプタ 修士論文発表会

ポリシー記述 XMLで記述 配置方針を選択 分散処理用Aspectのバインド 遠隔配置の方針を指定 <import>タグ Inter-type Declarationの指定と追加先<inter-type>タグ pointcutの指定とインタセプタの指定<inteceptor>タグetc 利用できるpointcut指定子は5つ <policy> <import proxy=“replace-permethod” host=“server1”> armview.util.Doc.search(..)@armview.util.BasicDoc armview.util.Doc.remotesetIndex(..) </import> <import proxy=“replace” host = “server2”> …… <inter-type name=“DocInterType”                bind-to=“armview.util.*Doc” /> <interceptor classname=“DocInterceptor”> <intercept name=“setIndex” expression=“execution(armview.util.*.setIndex(..))”/> <intercept name=…/> <binding intercept-name=“synchroIndex” to=“setIndex”/> <binding …/> </interceptor> </policy> call メソッドの呼び出し execution メソッドの実行 set/get フィールドの読み出し/書き出し new インスタンス生成 修士論文発表会

ARMSoftwareの例 メソッド単位での分散化処理 Inter-type Declaration Doc d = new Doc(..); …… d.setIndex(..); Objec ret = d.search(..) d.output(); 元プログラム public class DocInterType { int index; public void remotesetIndex(int index) { this.index = index; } …… 遠 隔 参 照 の 自 動 化 pointcut 要素 の 追 加 class Doc…{ public int index; …… public Object search(..) { } public void setIndex(..){ public void output(..) { class DocInterceptor…{ ……. Object synchIndex(Invocation i) { Object ret = proceed(i); Doc d = (Doc) i.getTarget(); d.remotesetIndex(d.index); return; } …… 修士論文発表会 インタセプタ 対象クラス

ARMSoftwareの例 機能拡張(セッション処理) Doc d = new Doc(..); …… Objec ret = d.search(..) d.output(); クライアント側 元プログラム Inter-type Declaration public class DocInterType { public static Vector namelist; public static void setUName (int id,String name) { indexlist.set(id,name); } public static String getUName(int id) { …… 遠 隔 参 照 の 自 動 化 pointcut class DocInterceptor…{ ……. Object setSession(Invocation i) { Doc.name = getUName(id); Object ret = proceed(i); Doc.setUName(id,Doc.name); } Object sendCurrentID(Invocation i) { …… class Doc…{ public static String name; …… public Object search(..) { } public void output(..) { 要素 の 追 加 pointcut サーバ側元クラス インタセプタ

コード数の比較 ARMSoftwareの変換を通じた比較 オリジナルとの差分(変更が必要なコード数、クラス数の比較) 変更が必要なクラス数 オリジナル=元プログラム 手動=手動による分散化処理 Jacross=Jacrossによる分散化処理 分散ポリシーも含む 変更が必要なクラス数 変更に必要な行数 オリジナル⇔手動 33 951 オリジナル⇔Jacross 5 349 割合(Jacross/手動) 15% 36% 修士論文発表会

関連研究 自動分散化システム アスペクト指向言語 Addistant[Tatsubori’01] J-Orchestra[Tilevich’02] アスペクト指向言語 AspectJ[Kiczales’01] AspectWerkz JBossAOP 修士論文発表会

まとめ 分散化処理は定型的な作業ではない 典型的ではない分散化を支援するシステムJacrossの提案 課題 アプリケーションに依存した処理が必要 典型的ではない分散化を支援するシステムJacrossの提案 アプリケーションセマンティクスの変更を伴う分散化 より現実的なアプリケーションに対応 利用者のニーズに応じた分散化処理の実現 分散処理に伴う機能拡張が容易に 典型的な作業→自動化 アプリケーションに依存→アスペクトでサポート 課題 分散処理用Aspectの工夫 pointcut指定子の増加 統合したシステム 修士論文発表会