InfoQ

News

Spring Web Flow 2.0.0.RC1リリース:Ajax、JSF、セキュリティの統合を追加

作者 Slobojan, Donald and Grelle , 翻訳者 沼田 暁子 投稿日 2008年5月1日 午前6時11分

コミュニティ
Java
トピック
オープンソース,
Webフレームワーク
タグ
Acegi,
Spring Web Flow,
Spring,
JSF,
Spring IDE,
Grails

InfoQはSpring WebチームのKeith Donald、Jeremy Grelleの両氏と会談し、Web Flowの次期メジャーリリースの最初の製品候補リリースである、Web Flow 2.0.0.RC1(source)について話を聞いた。Web FlowはSpring MVCの機能拡張であり、Webアプリケーションのフロー(source)の実装を行うためのものである。

Web Flow 2.0の新機能は何か?

Web Flow 2には、以下のようなたくさんの重要な新機能がある。

革新的なAjax

まず最初に、Web Flow 2ではAjaxのイベント処理機能が導入された。Ajaxのイベントを他のWebフローのイベントと同じように処理するだけで、処理が終わると、あなたの フローは更新されたUIの特定の断片、あるいは一部分をリクエストすることができるのである。この部分的なレンダリングのサポートは、Spring Travel(Springの参考アプリケーション)(source)の例の、検索結果テーブルの次ページに移動したり、バリデーションエラーのメッセージがUIに表示さ れるところで確かめることができる。

Ajaxサポートで面白いのは、Javascriptがクライアントで利用できない場合は、うまく機能を落としてることである。Spring Travelのページにアクセスし、Javascriptを無効にしてみて欲しい。それでもアプリケーションは動作するはずだ。

Ajax のサポートは、サーバサイドとクライアントサイドの2つの部分から構成されている。サーバサイドのWeb Flow統合は、Ajaxが有効なクライアントを検出し、リクエストに応じて断片をレンダリングする。そしてクライアントサイドでは、実際にAjaxのリ クエストを送信し、レスポンスの断片をページにリンクする。クライアントサイドの部分は「Spring Javascript」と呼ばれている。これはWeb Flowのディストリビューションに含まれる新しいモジュールで、Dojo 1.1で構築されており、Ajaxや革新的な拡張機能などに、きれいな矛盾の無いAPIを提供するためのものである。

より深いSpring MVCとの統合

Spring MVCとWeb Flowとの関係は補完的なものである。Spring MVCはWebアプリケーション開発のベースとなるプラットフォームである。そしてWeb Flowはコントローラの拡張であり、1つ以上のリクエストにわたるステートフルなユーザとの対話フロー(別名カンバセーション)の実装をプラグインする ためのものである。

したがって、Web Flow 2はポピュラーなSpring MVCプラットフォームとの統合をより深めている。今や、Spring MVCのステートレスな@ControllerからのFlowの呼び出しと、Flowの結果のコントローラへのマッピングは、より簡単になった。 Spring Travelの参考アプリケーションで、この「mvc」の特色を確認することができる。このアプリケーションでは、@Controller とFlowを組み合わせた使い方を示している。この例では、「お店」やサイトの検索パーツがステートレスな@Controllerを使用して実装されてい て、完全にブックマークする機能を提供し、予約する部分ではステートフルなWeb Flowを使用しており、予約アプリケーションのトランザクションの隔離をウィンドウ毎に提供している。これはうまく適合している。

リファクタリングと拡張の行われたJSF統合

Web Flow 1では、「慣習的な」JSFアプリケーションのコンテキストの中でWeb Flowを使用していたかもしれない。その場合、JSFのFacesServletが主となり、PhaseListener?NavigationHandlerを使ってWeb Flowを適切な個所にはめ込もうとしていただろう。これは非常に難しい統合タスクであり、いくつかの微妙な問題(source)が発覚した。それは、例外処理や並行処理、セキュリティ、永続化コンテキストの管理のように、扱うのが難しい問題であった。

Web Flow 2では、JSFとSpring Webとの関係(source)が逆になった。制御の反転は実際、この問題を考える早道である。私たちは、SpringをJSFの世界に適合させるかわりに、JSFを Springの世界に適合させた。ネイティブなSpring MVCとWeb Flowの拡張点を利用して、良く知られているSpring MVCのDispatcherServletに 適合させたのである。要するに、JSFの基礎的な部分であるUIコンポーネントモデルを取り込み、 Spring MVCとWeb Flowコントローラモデルのビューの技術としたのである。この統合手法による直接的なメリットは、URLマッピングや例外処理ポリシ、Spring Securityのポリシといった、既存のSpring MVCの全てのインフラを再利用できるということである。そしてUIを構築する際に、それらをJSFのコンポーネントとすぐに組み合わせることができるの だ。これにより、現在利用可能な全てのJSFコンポーネント・ライブラリが、WebのMVCの概念の経験をもつ人々にとって自然な方法でもたらされる。

そうした固有の統合手法では、何か落とし穴があるかもしれないと考える人もいるだろう。今までのところでは、まだ見つかっていない。私たちは、主要な JSFコンポーネント・ライブラリの全てがSpringのWebの環境で実行できることを、首尾よく証明してきた。さらに私たちは、「Spring Faces」とよばれる独自の小さなコンポーネント・ライブラリを作成した。これは、Spring Javascriptを使って、宣言型のクライアントサイドのバリデーションやAjax用の、Faceletタグのセットを提供するものである。 Spring Travelの参考アプリケーションのfacesの特色(source)は、このライブラリの作用を示している。.

Spring Securityの統合

Web Flow 2はセキュアなフローのサポートを導入した。フローや状態、遷移に「secured」とアノテーションを書いて SecurityFlowExecutionListenerを使うだけで、そのフローの開始、処理の開始、あるいはイベントの初期化には認証が必要であることが、ひとつひとつ確認されるだろう。

よりシンプルなFlow定義言語

Web Flow 2ではフローを定義するための中心的な言語がずっとシンプルであることにも気づくだろう。Spring Travelの参考アプリケーションでは、たとえば、Web Flow 1に基づくものは、フローに関係するアプリケーションコードが200行くらいあり、6つのファイルにまたがっている。最新の2.0.0 RC1では、より統合された機能が提供されている。2つのファイルにまたがる、たった93行のコードから成り立っており、保守の必要なファイルは4つ少なく、コードは50%削減されている。バージョン1のフロー(source)と、それに相当するバージョン2のもの(source)を比較するとわかるだろう。

新しいモジュラリティ機能

私たちは、「再利用可能な、内部完結型のアプリケーション制御モジュール」として、フローの概念の拡張も行った。現在初期設定では、フローとそのフローが 依存するビューやメッセージ、ヘルパ等の全てのリソースは、一緒にパッケージされる。コードをドメインの責任に応じてまとめるのはベストプラクティスであ る。そしてWeb Flow 2では、これを簡単に行えるようにするために、私たちは一生懸命取り組んでいる。こちら(source)でその例を見ることができる。bookingディレクトリの中に は、フローのビューと国際化のサポートに使用されるメッセージバンドルが一緒にパッケージされている。

このリリースの背後にはどのような哲学があるのか?

重要なものは、間違いなく、使いやすさであると言えるだろう。Web Flow 1はたくさんの機能を備えた成熟したフレームワークである。しかしWeb Flow 2は、もっとシンプルなフロー定義言語を使用して共通タスクをより簡単に成し遂げられるようにすることで、全体的にさらに発展している。統合は間違いなく主題であり、JSFやSpring Security、Unified EL、Spring Javascript、Rich Facesとの素晴らしい統合が導入された。前述の通り、Spring MVCとの統合は改善された。そして他の拡張機能のプラグインが可能な、Spring WebアプリケーションのベースとなるプラットフォームとしてのSpring MVCの役割を、Web Flow 2はまさに再び示していると思える。

1.0から2.0への移行を考えるような、重要な変更点は何か?

フロー定義言語の単純化は、みなさんが期待できる、主要な変更点である。顧客が1.0から2.0へとアップグレードするのを促進するため、ディストリビューションにはWebFlowUpgraderツールが含まれている。このツールは、バージョン1のフローから新しいバージョン2のシンタックスへの変換を自動化している。

変更点の完全な一覧では、ベストプラクティスを示すために設計された2.0の参考アプリケーションはもちろん、新しいリファレンスガイド(source)を全ての1.0 ユーザがチェックアウトすることを薦めている。私達は、2.0へのアップグレードの経験が、コミュニティにとってできるだけ楽しいものになるように尽力している。

Spring Web Flowのサポートツールにはどのようなものがあるか?

Web Flow定義言語はXMLベースなので、まず必要となるのは、優れたスキーマ対応のXMLエディタである。Web Flowは通常、アプリケーションの振る舞いの実行を、Javaドメインモデルとサービスレイヤに委譲する。そのため、間違いなくすぐれたJavaの IDEが必要である。そのほかに、Spring IDE(サイト・英語)プロジェクトが上質のEclipseプラグインを提供している。このプラグインではSpring Webアプリケーションの設定を視覚化することができ、またグラフィカルなWeb Flowエディタも含まれている。Spring IDEチームは現在、Web Flow 2専用のサポートに取り組んでいる。Spring IDEと先ごろ発表されたSpringSource Tools SuiteのリードであるChristian Dupuis氏は、新しいWeb Flow 2のサポートを5月に発表することを予定している。

SpringSource Tool Suite(source)は、フローを含むSpring Webアプリケーション構築のための十分に統合された開発環境を提供することで、さらに推し進めている。私たちのチームでは、パッケージのベータリリース の一部として、すでにいくつかのタスクに焦点を合わせたチュートリアルや、実行時エラーの解決策(source)を書いている。将来的には、より多くのものを発表する予定 である。さらに、先ごろ発表されたSpringSource Application Management Suite(source)は、近々公開される1.0.0.RC2のリリースで、Web Flowの実行エンジンに実行時の可視性を導入している。

Web Flowの今後の開発で重点的に取り組んでいくもの、そして2.1のリリースで目標としているものは何か?

私たちは、2.1でたくさんのことを計画している。宣言型モデルのバリデーションは人気のある話題であり、2.1のリリースで取り組む予定である。2.0 で既に、ポストバック時のモデルのバリデータの自動検出と実行のサポートが提供されているので、基礎となるものはそこにある。次の段階は、あなたのモデル に対するバリデーションの制約を宣言型で表現できるようにし、そうした制約がクライアントサイドでもサーバサイドでも実行されるようにすることである。

2.1のリリースでは、制御フローを定義する手段としてスクリプト言語の調査も行われるだろう。Grailsは、Web Flow 2のエンジンを基にしているが、すでにGroovyベースのフロー定義言語(source)がうまくいきそうであることを明らかにしている。そして私達はGraeme氏と ともに、GroovyFlowBuilderをWeb Flowに取り入れようとしている。さらに、フロー定義言語を私が「サイト定義言語」と呼んでいるものに広げることには、真のチャンスがあると私は思って いる。サイト全体のマクロ構造を宣言型で定義することが可能であったり、サイトの要素のいくつかがフローであったりするのだ。Jesse James Garrett氏のVisual Vocabulary(source)は実際、こうしたアイデアのいくつかのインスピレーションであり、この分野にはたくさんの興味深い課題があるだろう。

私たちは、Web Flow 2の表現方法の内部で現在生じている新しいアイデアを、Spring Framework自体の意味のあるところに戻す方法を確かめることにも一生懸命取り組んでいる。たとえば、私たちは現在、Web FlowやSpring Facesで得られる全てのAjaxの機能を、JSPやTilesを利用している既存のSpring MVCアプリケーションの開発者にもたらそうとしている。

原文はこちらです:http://www.infoq.com/news/2008/04/spring-webflow-2rc

ブックマーク
digg+,
reddit+,
del.icio.us+,
dzone+,
slashdot+
Hatena

特集コンテンツ一覧

Flex 4の新機能トップ10

今週(2009年6月1日)AdobeはFlex 4の正式な初ベータ版をリリースしました。Flex 4はGumbo(オクラ)というコードネームで開発されています。今回のリリースには大きな変更が多数含まれています。このRIAフレームワークの最新バージョンにおいて変更された事柄についての概要を以下のリストで見ていきましょう。

Domain Driven Design(ドメイン駆動設計) Quickly 日本語版

ビジネス領域の深い理解を反映したドメインモデルを設計するための、ヴィジョンとアプローチです。この本は、Eric Evans氏の「Domain Driven Design」の主要点を短く読みやすく要約しました。

JavaプログラマがFlexとBlazeDSを学んだ方がいい13の理由

この記事ではJavaプログラマがなぜFlexとBlazeDSを学ぶべきなのかについて13の理由を述べています。なぜ高度にインタラクティブなWeb サイトからJavaで開発されたバックエンドをもつエンタープライズ・アプリケーションまでを含む、リッチ・インターネット・アプリケーション(RIA)の開発にFlexとBlazeDSの組み合わせが最適な選択肢となるのかについて述べています。

仮想パネル: バックログは重要な成果物とプラクティスか、それとも無駄か?

Mary Poppendieck氏、Ron Jeffries氏、Jeff Patton氏、David West氏、Steve Freeman氏、Jason Yip氏が、バックログに関する彼らの意見とアジャイルチームを成功させるために必要な事を語った。

Perf4Jを使ったパフォーマンス解析とモニタリング

この記事ではAlex Devine氏が、Java開発者がPerf4Jをどのように利用できるかと、タイミングステートメントにコードを追加し、ロギング、結果の解析とモニタリングを行うオープンソースツールセットの説明をします。

複雑な外部DSLを開発する

本稿では、Vaughn Vernon氏が内部DSLと外部DSLの違いを説明し、複雑な外部DSLを開発する際のステップを示します。

J2EEアプリケーションにおけるAOPを使ったフェッチ戦略の実装

この記事では低レベルのサービス・レイヤやリポジトリ・レイヤを肥大化させることなく、フェッチング・ストラテジによってモジュール化された方法でバックエンドにあるシステムからデータを取得する処理を最適化する方法について説明します。

実証済みのアイデアの融合: S#arp Architectureの裏側

この記事では、Web開発における多数の成熟傾向と、クライアントに価値を提供することに対するそれらのメリット、およびS#arp Architecture(最善の手法と技術を活用しようとするASP.NET MVCをベースとしたフレームワーク)内でのそれらの使用について取り上げます。