String address

Download Report

Transcript String address

永続システムのための
アスペクト指向言語
理学部 情報科学科
指導教官 千葉 滋 助教授
学籍番号 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