Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク

Slides:



Advertisements
Similar presentations
1 情報基礎 A 第 9 週 プログラミング入門 VBA の基本文法 1 準備・変数・データの入出力 徳山 豪・全 眞嬉 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野.
Advertisements

1 安全性の高いセッション管理方 式 の Servlet への導入 東京工業大学 理学部 千葉研究室所属 99-2270-6 松沼 正浩.
関心事指向アーキテクチャモデリング環 境 Concern-oriented Architecture Modeling Environment 九州工業大学大学院情報工学府 情報科学専攻 鵜林研究室 M1 佐藤 友紀 1.
OWL-Sを用いたWebアプリケーションの検査と生成
ASP入門 - Windows 2000 Server 活用 -.
IIS 4.0で開発をするコツ Webアプリケーション構築.
情報処理実習 第05回 Excelマクロ機能入門 操作マクロ入門.
WordPressの基礎.
Dynamic AOPと その実装手法について
ケータイキット for Smarty のご紹介
ASP.NET開発標準化を考えてみよう! わんくま同盟 東京勉強会# /03/15 mxb & 片桐継.
ASP.NET開発標準化を考えてみよう! わんくま同盟 東京勉強会# /03/15 mxb & 片桐継.
Androidソースコード公開後のJNI
変数のスコープの設計判断能力 を育成するプログラミング教育
JavaBeans とJSP データベース論 第5回.
JSFによるWebアプリケーション開発 第6回
AspectScope によるアスペクトとクラスのつながりの視覚化
同期的にアドバイスを活性化できる分散動的アスペクト指向システム
Kintone 新デザインコンセプト サイボウズ株式会社 2016/10/28 更新.
ユーザ毎にカスタマイズ可能な Web アプリケーション用のフレームワークの実装
アスペクト指向プログラミングを用いたIDSオフロード
アスペクト指向プログラミングと Dependency Injection の融合
遠隔ポイントカット - 分散アスペクト指向プログラミング のための言語機構
部分的再ロードによる Java プログラムの再起動の高速化手法
型付きアセンブリ言語を用いた安全なカーネル拡張
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
図書館職員のための アプリケーション開発講習会
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
関心事ごとに視点を切り替えて プログラムを編集できる 統合開発環境の提案と実装
第4回 javaのプログラミング 04A2029           古賀慎也.
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
対応可否 スキル一覧 株式会社エージェント 2015年10月7日 Ver.1.0.
ユーザ毎にカスタマイズ可能な Webアプリケーションの 効率の良い実装方法
実行時情報に基づく OSカーネルのコンフィグ最小化
アスペクト指向に基づく 拡張可能な MDAモデルコンパイラ
横断的関心事に対応したオブジェクト指向言語GluonJとその織り込み関係の可視化ツール
既存Javaプログラム向け 分散化支援システムの開発
クラスのインターフェース やその振る舞いに及ぼすアスペクトの影響の解析と可視化
アスペクト指向言語のための 独立性の高いパッケージシステム
アプリケーション依存の先読みが可能なO/Rマッピングツール
アスペクト指向言語のための 独立性の高いパッケージシステム
pointcut に関して高い記述力を持つ アスペクト指向言語 Josh
一歩進んだ Views の使い方 スタジオ・ウミ 山中.
Java における 先進的リフレクション技術
プログラムの織り込み関係を可視化するアウトラインビューの提案と実装
手書き文字の自動認識アプリケーション 15K1013 坂本 倖輝
福岡工業大学 情報工学部 情報工学科 種田研究室 于 聡
分散 Java プログラムのための アスペクト指向言語
Josh : バイトコードレベルでのJava用 Aspect Weaver
統合開発環境によって表現された 言語機構によるコードのモジュール化
IDE を活用した言語機構に頼らないコード再利用のためのモジュール化
同期処理のモジュール化を 可能にする アスペクト指向言語
Javaによる Webアプリケーション入門 第4回
アスペクト指向言語のための視点に応じた編集を可能にするツール
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
アスペクト指向プログラミングの 動的プログラムスライスへの応用
ユビキタスコンピューティングの ための ハンドオーバー機能付きRMIの実装
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
統合開発環境のための プログラミング言語拡張 フレームワーク
開発者との対話を活かした 横断的構造の表現
第2回 Webサーバ.
プログラム理解のための 付加注釈 DocumentTag の提案
GluonJ を用いたビジネスロジックからのデータベースアクセスの分離
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク 東京工業大学 情報科学科4年 千葉研究室 戸部 敦

ユーザー毎にカスタマイズ可能なWebアプリ 新しい機能やスタイルを追加 知識のあるユーザーが高度な機能を組み込める 他のユーザーとの差をつけられる 例) FC2 ブログ 自分だけのページを作成できる よく使うコンテンツを配置して利便性を向上 例) my Rakuten, My Yahoo! サイトの集客に影響

カスタマイズの自由度 Web アプリ開発者が提供 利用者が自由にカスタマイズ どの範囲でサポートするかは状況次第 パラメータ ページのスタイルを変更(色、フォント・サイズ) プログラム・モジュール 開発者が用意する機能の中から選択 利用者が自由にカスタマイズ 新しいプログラム・モジュールをアップロードして利用 セキュリティ対策が必要 どの範囲でサポートするかは状況次第

現状:プラグイン機構の利用 プラグイン機構 実装コスト 拡張ポイントの制限 拡張ポイントを公開 設定ファイルに拡張ポイントで使われるクラスを記述 実装コスト Web アプリ毎にプラグイン機構を個別に実装する必要があり面倒 DI コンテナは実装コストを軽減 コンテナのコーディング規則に従う必要あり 拡張ポイントの制限 Web アプリ開発時に決めた拡張ポイント 以外はカスタマイズ不可能 interface Style { String table(String[][] data); } <config> <Style class=“StyleImpl” /> </config> class StyleImpl impl. Style { String table(String[][] data) { ... String html = webApp.style.table(data);

ユーザー単位のプラグイン機構 単純なプラグイン機構だけでは実現できない 例) ユーザー毎にスタイルを変更可能なコード ユーザー毎に読み込む設定が異なる 一般的な DI コンテナでは提供されない 例) ユーザー毎にスタイルを変更可能なコード 明示的な切り替えが必要。コードが不自然。 String html = webApp.getStyle(uid).table(data); String html = webApp.style.table(data); Aさん用の設定(uid=“A”) Bさん用の設定(uid=“B”) <config> <Style class=“StyleImplA” /> </config> <config> <Style class=“StyleImplB” /> </config>

開発したフレームワーク AOP 言語でカスタマイズ部分を記述 Per-session weaving ユーザーのアスペクトを登録する API 開発時に拡張ポイントを決定する必要がない 開発中に予期しない部分も拡張可能 元のソースコードを変えなくて良い Per-session weaving ユーザー単位のカスタマイズ機構を実現 セッションを見てユーザー毎に異なるアスペクトを適用 ユーザーのアスペクトを登録する API Web アプリ開発者が利用

AOP (アスペクト指向プログラミング) Weave 横断的関心事をモジュール化するプログラミング技法 アスペクト:新しいコードの内容とそれを実行する場所の組 Weave アスペクトを適用して元のコードの挙動を変更すること 元のソースコードの修正は不要(上書きされる) 開発時に見落とした拡張ポイントも変更可能 webApp. .table(data); class HtmlRenderer { String table(String[][] data) { ... } } style weave 後の weave 出力 @Glue class Customizer { @Around(“{ return HTMLコード; }") Pointcut pc = Pcd.call(“table(..)”); } 名前 カナ 敦 アツシ 滋 シゲル 名前 カナ 敦 アツシ 滋 シゲル

Per-session weaving の考案 ユーザー毎に異なるアスペクトを weave セッションからユーザーの識別子を取得 ユーザー毎に異なるクラスローダを使用 他のユーザーに影響を与えない Web アプリでユーザー毎に処理を明示的に分ける必要がない Aさんのアスペクト webApp.getStyle(uid).table(data); (処理A); webApp.style.table(data); (処理B); @Glue class CustomizerA { @Around(“return (処理A)”) } weave フレームワーク Bさんのアスペクト セッションに応じて weave するアスペクトを 自動的に振り分ける @Glue class CustomizerB { @Around(“return (処理B)”) }

処理の流れ 予めアスペクトを登録しておく リクエストを処理するときにセッションを取得 セッションに保存された識別子に応じてアスペクトを weave サーバー フレームワーク Webアプリ アスペクトを登録 リクエストの処理 セッションを取得 weave 実行 ロード weave された Web アプリを

実装 フレームワークを開発 サンプルアプリを作成 他のユーザーに影響を与えないことを確認

実装 Aさんのアスペクトを設定

実装 Aさんのアスペクトを weave した サンプルページ

実装 Bさんのアスペクトを設定

実装 Bさんのアスペクトを weave した サンプルページ

フレームワークの構成 サーバープログラムとして Tomcat を使用 AOP 言語として GluonJ を採用 Java で書かれた Web サーバー 設定ファイルでフレームワークを有効化 AOP 言語として GluonJ を採用 Java 文法内でアスペクトを記述 OS Java Tomcat フレームワーク GluonJ Web アプリ

関連研究 プラグイン機構 Load-time weaving Dynamic weaving AOP を使用しないカスタマイズ機構 カスタマイズが予め予測された拡張ポイントに限られる Web アプリでユーザー毎に読み込む設定を変更する必要 Load-time weaving クラスをロードする時にアスペクトを weave ユーザー毎に異なるアスペクトを weave できない Dynamic weaving プログラム実行中にアスペクトを weave アスペクトによるカスタマイズが制限される 新たなフィールドやメソッドを追加できない

まとめ ユーザー毎にカスタマイズ可能な Web アプリの開発フレームワーク 従来手法 フレームワークの実装 AOP 言語の利用 Per-session weaving の考案 従来手法 プラグインを Web アプリ毎に実装する必要 開発時に決めた拡張ポイント以外はカスタマイズ不可能 ユーザー毎に明示的に処理を分ける必要 フレームワークの実装 サンプルアプリを作成し動作を確認 実装コスト大!!

今後の課題 パフォーマンスの向上と検証 セキュリティ対策 クラスローダの親子関係を用いる キャッシュを使用 カスタマイズ不可なクラスは親ローダーでロード 親ローダーは最初のリクエストでのみ作成 キャッシュを使用 訪問者が少ないときに有効 アスペクトの weave によるオーバーヘッドを計測 セキュリティ対策 サーバー上のファイルを不正に読み込むなど Java アプレットと同等の対策を取る

おしまい ご清聴ありがとうございました。

複数アスペクトの weave 現在は単一のアスペクトのみサポート 複数のアスペクトを weave するには? 登録したアスペクトから他のアスペクトを読み込む場合は GluonJ の実装に依存 複数のアスペクトを weave するには? 共通部分が存在した場合ユーザーに警告を表示 登録されているアスペクトが 挙動を変更する箇所 登録するアスペクトが 挙動を変更する箇所

クラスローダでの効率化 AOP クラスローダ AppLib クラスローダ アスペクトを weave するクラスローダ(現在)