GAE開発の落とし穴
Googleのクラウド環境をつかったGoogle App Engineによる開発するにあたり、初めての試みで苦悩する開発者達の経験をもとに、各開発フェーズにあわせて問題点やどう解決したかをご紹介します
ブックマークされました!
ブックマークがエラーになりました。もう一度お願いします。
作者 Charles Humble , 翻訳者 吉田 英人 投稿日 2010年2月16日
前回の記事で私たちは,Servlet 3.0 API とその Ajax サポートについて取り上げた。Servlet API を Java EE Web フレームワークの技術ファミリに相応しいものにするためには,非常に多くの作業が必要であったが,JavaServer Faces (JSF) はフレームワークのレベルでステートフルな UI コンポーネントツリーを維持していることもあり,Ajax のアプローチにも無理なく対応可能なはずだ。それでも JSF 1.x では組み込みでの Ajax サポートは実現されず,Ajax4jsf/RichFaces,ICEFaces,ADF Faces/Trinidad といったサードパーティのライブラリにその機能を依存していた。今回 EE6 で提供される JSF 2.0 では,パーシャル・ページ・アップデート (partial page update)とパーシャル・ビュー・トラバーサル(partial view traversal) のサポートを追加し,ビュー内の選択されたコンポーネントをページ全体の再描画なしに処理,表示可能とすることで,この機能に対応する。ユーザインターフェースでイベントが発生すると,サーバがツリー上の関連するセクションの処理のみを実行して,その結果発生した変更をブラウザにプッシュして返す,という仕組みだ。
JSF 2 の Ajax サポートではさらに "ビヘイビア(behaviour)" という新たな概念も導入されている。コンポーネントは,ある機能をそのコンポーネントにとって最良の方法でサポートするための手段として,ビヘイビアをアタッチして所持することができる。例えばテキストフィールドには,そのフィールドの onChange( ) JavaScript イベントに結合されたイベントを発生させるためのビヘイビア AjaxBehaviour がアタッチされる。コマンドボタンにも同様に,そのボタンの onClick( ) イベントからトリガされる AjaxBehaviour がアタッチされる,という具合だ。
JSF 2 エキスパートグループにとって Ajax サポートは ,コミュニティの経験を活用できた多くの領域のうちのひとつであると同時に,JSF 1 に対して繰り返されてきたもうひとつの批判,エキスパートグループへの限られた外部入力によってデザインされている,という指摘への対応でもある。例えば,JSF 2 ではビューレイヤとしての JSP が廃止され,より JSF 的な Facelet に置き換えられている。Facelet は元々 Apache ライセンスのオープンソースプロジェクトとして生まれ,JCP とは離れた場所で開発が続けられてきたものだ。Facelet は Hans Bergsten 氏の記事 "JSP 廃止による JSF 改良 (Improving JSF by Dumping JSP)" で提起された,JSF と JSP の表示順の違いなどの諸問題に対する解決策として,JSF 開発者の間では広く使用されてきた。
Facelet は標準化され,スタンドアローンであった頃よりも深くフレームワークに結合されたため,エキスパートグループがその主要なアイデアをさらに発展させることも可能になった。例えば,Facelet は複合コンポーネントによるテンプレート処理をサポートするが,複合コンポーネントには任意の有効な Facelet XHTML ページを用いることができる。しかし JSF 1.x での Facelet では,複合コンポーネントは真の UI コンポーネントとしては扱われていなかった。しかし JSF 2 においては複合コンポーネントは本当の UI コンポーネントであるので,バリデータ,コンバータ,リスナ(アクションと値変更のどちらも)をサポートすることができる。
エキスパートグループはまた,Seam フレームワーク からアイデアを大々的に採用した。その中のひとつ,Seam のページパラメータ (page parameter) を発展させたビューパラメータ(view parameter) は,クエリ文字列パラメータとモデル値のマッピングである。マッピングの指定は,ビューの <f:metadata> セクションに新たに追加された <f:viewParam> コンポーネントを使用して行う。ビューパラメータは GET リクエストのパラメータを JSF ライフサイクルに追加して,パラメータのデコード,タイプ変換,バリデーション,モデル更新などを完全にサポートする。
さらに GET リクエストは,アプリケーション定義のリスナを PreRenderViewEvent によって起動することができる。PreRenderViewEvent はビューパラメータの処理が完了した後,ビューが表示される前に発行されるイベントだ。
GET リクエストサポートの最後となるのは,標準HTML RenderKit に追加された,関連性のある2つの機能 (<h:link> と <h:button>) だ。GET リクエストリンクの生成手段を提供するものであり,ビューパラメータとの組み合わせによって JSF 2 のブックマーク可能なページの基礎となる。
前述の PreRenderViewEvent は システムイベント (System Event) の1例である。Seam フレームワークに影響されたもうひとつの JSF 新機能であるシステムイベントは,Ken Paulsen 氏による JSFTemplating からの影響も受けている。システムイベントは JSF ライフサイクル中に発生する事象に対する publish/subscribe 方式のイベントバスであり,以下の3つのスコープでリスナを登録することができる。
発行(publish)については Application.publishEvent() を共通で使用する。
JSF 2 はその他のフレームワーク利用者の不満点に対しても,以下のように数多く対応している。
最後に,JSF 2 で導入された小さな拡張の数々から,重要なものを紹介する。
2004年3月に登場して以来,JavaServer Faces は標準的な Java の Web フレームワークとしての批判を数多く受けてきた。JSF 2 では多数寄せられた不満に対応して,数多くの新機能が追加されている。次期 Web アプリケーションに対してコンポーネントベースのアプローチを検討しているならば,再確認する価値がある。ただし JSF 2 の効果を完全に評価するためには,Java EE Web プロファイルのより広いコンテキストにおいて,それを検討する必要があるかもしれない - 特に こちら で説明しているような,タイプセーフとアノテーション駆動の依存性注入フレームワーク,スコープ管理の宣言的方法,コンテキストに結びつけられたコンポーネントの状態とライフサイクル,そして今後の記事で取り上げる予定の EJB/JPA などを提供する CDI (Context and Dependency Injection)などでそれが重要だろう。
世界の先進エンジニアが集結 - QCon TOKYO 2012 早期割引実施中!
【豆蔵】大好評のため、Jenkins講座を追加開催致します!Jenkins作者の川口氏が講師です。
Googleのクラウド環境をつかったGoogle App Engineによる開発するにあたり、初めての試みで苦悩する開発者達の経験をもとに、各開発フェーズにあわせて問題点やどう解決したかをご紹介します
去る1月12日、定理証明支援系ツールCoqの初心者向けチュートリアルが開催さ れた(http://kokucheese.com/event/index/23667/)。今後も2月2日 (http://kokucheese.com/event/index/23744/)、2月9日、2月16日と引き続き開 催されていく予定である。本記事では、開催の様子をレポートする。
Neal Gafter氏はOracleによるJava買収の影響に関する議論、Javaにセグメンテッドスタックやメタオブジェクトプロトコルを追加することについての主張、そしてJavaとC#との比較について話をしてくれた。
GoogleはVMをともなう新しい言語であり、JSコンパイラでもあるDartをプレビューした。 InfoQはDartのアプリの構築に貢献する文法の裏側を探った:スナップショット、Isolate、モジュール方式
本記事ではCSPベースの「マルチドメイン・モデル検査ツール」である、PAT(Process Analysis Toolkit)について紹介する。モデル検査は、形式手法(Formal Method)という方法論を基礎とする技術であり、複雑さが増大しながらも安全性を求められる、現在のソフトウェア開発の状況に対する処方箋の1つとして注目されている手法である。
前回まで、Jenkinsの幾つかの側面に注目して解説をしてきました。シリーズ最後の今回は、Jenkinsをサービスとして使う方法を紹介します。
Alloyは、MITにて開発された仕様記述言語であり、ツールによる自動解析を使い、インクリメンタルに形式仕様が書けることが特長である。筆者らはAlloy開発者による、Alloyを使った形式手法入門書を翻訳、今夏にオーム社より刊行した。本記事では、Alloyの簡単な概要と、翻訳書『抽象によるソフトウェア設計』(「Alloy本」)を紹介する。
スマートフォンを中心としたマルチデバイスにおけるタッチユーザーインターフェイスへの対応は、既に必須の項目となりつつある。本記事では、Windows デバイスにおける UX のベースとなっている「メトロ」というデザイン言語を掘り下げながら、既存環境を意識しつつもどのようにタッチユーザーインターフェイス開発に取り組んでいくべきであるかについて解説していく。
No comments
スレッド表示 返信