永続システムのための アスペクト指向言語 理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾 1 典型的なWEBアプリケーション インターネット掲示板 プログラムに関する部分 : Servlet, Struts, JSP ( これらのコンテナとしてtomcat ) データベースに関する部分 リレーショナルデータベース, 永続クラス WEBブラウザ ActionServlet(コントローラ) Index01Action.java 処理を記述 req.setAttribute (“name”, “Taro”); <!– index01.jsp --> <html> …${name} </html> JSP(ビュー) 永続クラス(モデル) String name; String content; // getter & setter WEBコンテナ name : varchar(100) content : text 一貫性を 保つ必要が 2 ある モジュール化が困難 拡張機能をモジュールとして追加したい e.g. メールアドレス欄を追加 オブジェクト指向では困難 Actionクラスなどあちこちの変更が必要 既存のAOPでは不十分 別途データベースに関する部分の編集が必要 post Index01Action.java Map に name, content 情報を入れる (表示部分で利用) address も入れる Index02Action.java データベースに 保存するもの (name, content)を、 Map に入れる address も入れる ・・・ name : varchar(100) content : text address : varchar(200) String name; Post.java String content; 3 String address; 提案: 永続システムのためのアスペクト指向言語 データベースにまたがる関心事もモジュール化可能 GluonJ と AspectualStore を拡張して実現 ウィーブ時にデータベーススキーマの変更を行う ユーザはデータベーススキーマを変更する必要なし Ant タスクによる実行時前の織り込みをサポート 既存の アスペクト 指向言語で Index01 モジュール化 Action できる範囲 Index02 Action post (データ ベース) Post (永続 クラス) 本来 モジュール化 したい部分 4 アドレス欄を追加するアスペクト @Glue public class PostGlue { 永続クラス @Refine @PersistClass static class Post extends Post{ @Type(length = 200, fixed = false) private String address; … Post クラスに // setter & getter Addressフィールドを } 追加 // Action の方も変更 } データベースの型の指定方法は三通り • アノテーションをつけない場合 • Type アノテーションをつける場合 • SqlType アノテーションをつける場合 post name : varchar(100) content : text address : varchar(200) 自動的に データベースの 変更を行う Post.java private String name; private String content; private String address; 5 全体の処理の流れ 1.Aspect 記述 カラム追加情報 管理用テーブル Javac (コンパイル) <本システム> application Class file DB JDBC (DB 変更) Javassist (追加フィールド の取り出し) 2. データベーススキーマを変更 カラムの追加情報は専用の テーブルを作り管理 Weave : カラムを追加 Unweave: カラムを削除 GluonJ (weave) 3. Weave (GluonJ ) 永続クラスに対しては SQL 発行処理を追加 Javassist 6 データベーススキーマの変更方法 ユーザの用途に応じて選択可能 既存のテーブルにカラムを追加 アンウィーブ時にはカラムを削除 テーブル追加に比べて実行速度が速いと考えられる 既存のテーブルとは違うテーブルを作り、カラムを 追加 (実装中) アンウィーブ時にデータを残す SQL 文を変更する必要あり => カラム追加に比べて実行速度が遅いと考えられる 7 デモ インターネット掲示板 アドレス欄を追加するモジュールをAspectQのアス ペクトとして実装 ウィーブ・アンウィーブで容易に抜き差し可能 自動的に DB にも反映 8 関連研究 既存のアスペクト指向言語 (GluonJ, AspectJ 等) データベースまでを含む関心事はモジュール化不可能 XDoclet, hbm2ddl + 既存のアスペクト指向言語 永続クラスから XML 、XML からデータベーススキーマを作成 するツール ソースコードレベルで解析(コメントを利用) ウィーブ時にソースコードを変更する必要あり ウィーブ時にコメントもコピーする必要あり 9 まとめと今後の課題 永続システムに対応したアスペクト指向言語 データベーススキーマの自動変更(実行時前) データベースの型の指定方法は三通り • アノテーションなし、Typeアノテーション、SqlTypeアノテーション データベーススキーマの変更方法 • 既存のテーブルにカラムを追加 • 既存のテーブルとは別テーブルを作成しカラムを追加 実行時前の織り込みをサポート 全体で2500行 今後の課題 既存のテーブルとは違うテーブルを作成する場合 10
© Copyright 2024 ExpyDoc