GluonJ を用いたビジネスロジックからのデータベースアクセスの分離

Slides:



Advertisements
Similar presentations
関心事指向アーキテクチャモデリング環 境 Concern-oriented Architecture Modeling Environment 九州工業大学大学院情報工学府 情報科学専攻 鵜林研究室 M1 佐藤 友紀 1.
Advertisements

OWL-Sを用いたWebアプリケーションの検査と生成
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
シーケンス図の生成のための実行履歴圧縮手法
IIS 4.0で開発をするコツ Webアプリケーション構築.
Webサービスに関する基本用語 Masatoshi Ohishi / NAOJ & Sokendai
S2Container.NET, S2Dao.NET コミッタ 藤井 宏明
Dynamic AOPと その実装手法について
変数のスコープの設計判断能力 を育成するプログラミング教育
JavaBeans とJSP データベース論 第5回.
AspectScope によるアスペクトとクラスのつながりの視覚化
同期的にアドバイスを活性化できる分散動的アスペクト指向システム
ユーザ毎にカスタマイズ可能な Web アプリケーション用のフレームワークの実装
アスペクト指向プログラミングを用いたIDSオフロード
アスペクト指向プログラミングと Dependency Injection の融合
遠隔ポイントカット - 分散アスペクト指向プログラミング のための言語機構
AOP言語への 織り込みインターフェイスの導入 A Weaving-Interface for AOP Languages
契約に基づいたアスペクト指向リファクタリングの検証
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
アスペクト指向の 分散化支援ツール 西澤無我、千葉滋 東京工業大学 SPA summer 2002, Hakone.
暗黙的に型付けされる構造体の Java言語への導入
関心事ごとに視点を切り替えて プログラムを編集できる 統合開発環境の提案と実装
{t-isio, kamiya, kusumoto,
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
統合開発環境のための アスペクト指向システム
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ユーザ毎にカスタマイズ可能な Webアプリケーションの 効率の良い実装方法
AspectScope による アスペクト指向プログラ ミングの支援
アスペクト指向に基づく 拡張可能な MDAモデルコンパイラ
横断的関心事に対応したオブジェクト指向言語GluonJとその織り込み関係の可視化ツール
既存Javaプログラム向け 分散化支援システムの開発
豊富な情報を基にした pointcut を記述できるアスペクト指向言語
Recoveryアドバイスをもつ アスペクト指向システム
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
アスペクト指向を利用した永続オブジェクト・アクセスの高速化
クラスのインターフェース やその振る舞いに及ぼすアスペクトの影響の解析と可視化
アスペクト指向言語のための 独立性の高いパッケージシステム
アプリケーション依存の先読みが可能なO/Rマッピングツール
アスペクト指向言語のための 独立性の高いパッケージシステム
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
pointcut に関して高い記述力を持つ アスペクト指向言語 Josh
契約による クラスとアスペクト間の 影響解析
プログラムの織り込み関係を可視化するアウトラインビューの提案と実装
アルゴリズムとプログラミング (Algorithms and Programming)
ソフトウェア工学 知能情報学部 新田直也.
分散 Java プログラムのための アスペクト指向言語
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
統合開発環境によって表現された 言語機構によるコードのモジュール化
IDE を活用した言語機構に頼らないコード再利用のためのモジュール化
同期処理のモジュール化を 可能にする アスペクト指向言語
Javaによる Webアプリケーション入門 第4回
様々なAOPメカニズムをモデル化する パラメータ化インタプリタ
アスペクト指向言語のための視点に応じた編集を可能にするツール
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
稚内北星学園大学 情報メディア学部 安藤 友晴
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
ロールを基にした構造進化の表現 Role based Evolution Dependency Structure Matrix
開発者との対話を活かした 横断的構造の表現
クラスの追加 メソッドの追加 TestCaseの追加 Test Methodの追加.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
複雑度メトリクスを用いた JAVAプログラム品質特性の実験的評価
Microsoft Office Project Server 2007
コードクローン解析に基づく デザインパターン適用候補の検出手法
プログラム理解のための 付加注釈 DocumentTag の提案
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

GluonJ を用いたビジネスロジックからのデータベースアクセスの分離 東京工業大学 情報理工学研究科 数理・計算科学専攻 石川 零 千葉 滋 SPA '05, Ikaho, Gunma

コンポーネント間の依存関係 コンポーネント間の依存関係を弱める技術が注目されている : Design Patterns     : Design Patterns Dependency Injection Aspect Oriented Programming (AOP) 横断的関心事を実装するコンポーネントと、他のコンポーネントの間の依存関係を弱める 仕様変更による、コンポーネントの追加や取り外しを容易にする …と我々は 考えている SPA '05, Ikaho, Gunma

依存関係を弱めたい例 Database Access Object (DAO) Service オブジェクトとの依存関係 同じセッションに属す Service オブジェクトは同一の DAO と結びつける 横断的関心事の一種 例: SPAの論文投稿システム DAO 著者登録 Service DAO データ ベース 論文投稿 Service DAO 著者登録 Service これは典型的な Web アプリケーションの構成 SPA '05, Ikaho, Gunma

Dependency Injection (DI) コンテナの利用 サービスオブジェクトからDAO の生成を分離 DI コンテナ: DAO を生成してService オブジェクトへ与える Service オブジェクトはインタフェースを介してDAO を操作 欠点: サービスオブジェクトの再利用性は低い 決められたインタフェースを実装しないオブジェクトとは一緒に使えない DI コンテナによる注入 OracleDAO AuthorCheckService MySQLDAO DAO dao; MailTransferAgent SPA '05, Ikaho, Gunma

提案するAOP 言語 : GluonJ アスペクト指向の利用 コンポーネント同士の結びつけに利用 依存関係の記述をコンポーネントから完全に除去 AuthorCheckService DAO PaperCheckService DAO AuthorCheckService アスペクトが Service オブジェクトと DAO を結ぶ SPA '05, Ikaho, Gunma

GluonJ のアスペクト 大きく2つの要素から構成 Service オブジェクトからDAO へのリンクの宣言 DAO の呼び出しの記述 <aspect> <injection> DAO AuthorCheckService.aspect = DAO.factory (this.sessionId); </injection> <advice> <pointcut> execution ( void AuthorCheckService. checkAuthorInfo(..)) </pointcut> <after> DAO.aspectOf (this). postAuthor ( this.firstname, this.lastname); </after> </advice> </aspect> 大きく2つの要素から構成 Service オブジェクトからDAO へのリンクの宣言 DAO の呼び出しの記述 AspectJ のポイントカット&アドバイスと似た記述 DAO の 呼び出し アスペクト (XML で記述) SPA '05, Ikaho, Gunma

リンクの宣言 Service オブジェクトからDAO へのリンクを追加 リンク元コンポーネント <injection> DAO AuthorCheckService.aspect = DAO.factory (this.sessionId); </injection> リンク先コンポーネント SPA '05, Ikaho, Gunma

DAO の呼び出し リンクしたDAO を呼び出す Service オブジェクトのメソッド呼び出しのあとに、DAO のメソッドを呼び出す <advice> <pointcut> execution (void AuthorCheckService. checkAuthorInfo(..)) </pointcut> <after> DAO.aspectOf (this).postAuthor (this.firstname, this.lastname); </after> </advice> AspectJ のポイントカット& アドバイスに似た記述 aspectOf メソッド: this と リンクする DAO オブジェクト を取得 SPA '05, Ikaho, Gunma

AspectJ では記述できないか? プログラミング idiom を駆使すれば可能 AspectJ のデザイン プログラムから開発者の設計意図(アーキテクチャ)を読み取りにくい AspectJ のデザイン 横断的関心事をアスペクトで直接実装する アスペクトは暗黙のうちに生成 (new できない) AuthorCheckService オブジェクト AuthorCheckService オブジェクト PaperCheckService オブジェクト SID : 001 SID : 002 SID : 002 DAO をアスペクトとして実装 DAO DAO SPA '05, Ikaho, Gunma

AspectJ 実装 – issingleton + ハッシュテーブル DAO をアスペクトとして記述 DAO アスペクトインスタンスを1つ用意 セッション ID ごとにまとめておきたいデータをハッシュテーブル型のフィールドで管理 AuthorCheckService オブジェクト AuthorCheckService オブジェクト PaperCheckService オブジェクト 002 001 ハッシュテーブル ID SID : 001 SID : 002 SID : 002 DAO 問合せ SPA '05, Ikaho, Gunma

AspectJ 実装 – issingleton + インタータイプ宣言 DAO アスペクトインスタンスを1つ用意 DAOのフィールドのデータをインタータイプ宣言したフィールドに保存 インタータイプ宣言 他のクラスにフィールドやメソッドを追加する技術 AuthorCheckService オブジェクト AuthorCheckService オブジェクト PaperCheckService オブジェクト SID : 001 SID : 002 SID : 002 DAO SPA '05, Ikaho, Gunma

AspectJ 実装 – perthis の利用 サービスオブジェクトごとにアスペクトインスタンスを生成 perthis : 1つのオブジェクトに1つのアスペクトインスタンスを結びつける セッション ID ごとの結びつけは困難 AuthorCheckService オブジェクト AuthorCheckService オブジェクト PaperCheckService オブジェクト SID : 001 SID : 002 SID : 002 DAO DAO DAO SPA '05, Ikaho, Gunma

Association Aspects [Sakurai, ’04] の利用 新しい言語機構を導入して AspectJ を拡張 アスペクトインスタンスを明示的に生成できる 結びつけのルールを新たに追加 下の設計を実現できる AuthorCheckService オブジェクト AuthorCheckService オブジェクト PaperCheckService オブジェクト SID : 001 SID : 002 SID : 002 DAO DAO SPA '05, Ikaho, Gunma

Dependency Reduction [ECOOP ’05] これが AOP の本質なのでは? コンポーネント間の依存関係を弱める技術が AOP GluonJ はこの認識に立って設計された言語 横断的関心事はAOPが役立つ応用例 横断的関心事: 他のコンポーネントの結びつきが元々弱く、将来結びつきが変わる可能性が高い   → 依存関係を弱める必要がある 横断的関心事の実装技術が AOP ではない GluonJ はAspectJ とは異なる立場 -> DB のような、コンポーネントの依存関係の解決を大きな問題としてみる 最初からこの解決を目的に、根本的に作り直してみたのがGluonJ ECOOP で我々が発表する論文 一般にAOP := 横断的関心事の解決 but, AOP にとってCC は1つの応用例では? cc : もともと SPA '05, Ikaho, Gunma

関連研究: Dependency Injection コンポーネント間の依存関係を、プログラムから分離して記述する技術 DI コンテナ: コンポーネントの生成を分離 DI コンテナは、AOP言語のサブセットと見ることができるのでは? GluonJ はコンポーネントの生成とメソッド呼び出しをプログラムから分離できる GluonJ はDI コンテナより強力 SPA '05, Ikaho, Gunma

まとめと今後の課題 まとめ 今後の課題 GluonJ AspectJ, Association Aspects との比較 アスペクトをコンポーネント同士の結びつけに用いる 依存関係の記述をコンポーネントから完全に除去 今後の課題 AspectJ, Association Aspects との比較 GluonJ を用いたコンポーネントフレームワークの作成 SPA '05, Ikaho, Gunma