InfoQ

InfoQ

News

マイブックマーク

ブックマークするためにログイン または 会員登録 する

ブックマークされました!

ブックマークがエラーになりました。もう一度お願いします。

JBossがGroovyサポートとJSF強化を伴ってSeam 2.0をリリース

作者 Scott Delap , 翻訳者 編集部 投稿日 2007年11月6日

セクション
デベロップメント
トピック
Webフレームワーク ,
Java
タグ
JBoss Seam
先日JBoss SeamがSeam 2.0をリリースした(source)。彼らは8ヶ月前に主要なリリースを行っており、今回のリリースはそれを追うものとなっている。下記はプロジェクトメンバーのNorman Richards氏が挙げた、新しく搭載された機能の中でも注目すべき機能である。
  • WebServices(source) - Webサービスは会話的なものでありまたSeamコンポーネントとサービスを活用できる
  • Groovy(source) - SeamコンポーネントはGroovyで記載することができる
  • ホットデプロイ(source) - 開発モードでSeamは全体的なWARかEARを再デプロイする必要なしにコンポーネント定義をホットデプロイすることが可能
  • Eclipseサポート - JBossToolsのSeam 2はプロジェクトウィザード、テストの統合、EL上での自動完結、ビューページのヴィジュアル編集等を搭載している
  • JSFへの非依存性 - SeamがJSFから分離されたので他のWebフレームワークとより使いやすくなっている。実験的なGWT統合(source)が、これがどのように動作するか示すように原型化されている
  • JSF 1.2サポート - SeamはデフォルトのJSF実装のようにマイフェースからJSF RIに変更した
  • JBoss EL(source) - Seamはパラメータ化されたJBoss ELサポート、非JavaBeanプロパティとプロジェクション用のサポート
  • Maven(source) - Seamが所有している依存性はMaven内で管理されている。Seam用のMavenリポジトリも有効。
  • インテグレーション - インテグレーションがQuartz、JFreeChart、Hibernate Search、iTextのような人気なプロジェクト用にも有効になった

InfoQはこのリリースに関して議論するため、プロジェクトリーダーのGavin King氏と対談した。そして私たちはよりよいフレームワークにした2.0について、1.0バージョンから得た教訓とは何か尋ねた。

1.0で犯した最大のミスとは、

(1)JSF、EJB3、JTAで環境を想定するためにSeamを認可し、開発したこと。間違いなくこれらは全て人気なテクノロジーなのだが、それでもまだ他の環境でSeamを使用したいと思う人々がいてそういう人たちがその実装を始めるよう推し進めたのです。

(2)私たちの内蔵コンポーネントライブラリがどんなに大きく成長するか認識していなかったことです。以前のバージョンでは全ての内蔵コンポーネントを単純にもorg.jboss.seam.core.に全て投げました。Seam2では完全にパッケージ構造を再構築しなくてはならかったのです。

そして私たちは次にKing氏にExtJS:ExtJSのような何かでプレゼンテーション層全体をブラウザに動かす事に対するJSFコンポーネントに関して伺った。

さて、私はここで考えるべき重要なことが二つあると思うのです。

(1)ユーザーインターフェースを宣言的に、それともプログラム的に定義するのどちらを好むでしょうか?

(2)クライアント側で機能がどのくらい実際に実行できるのでしょうか?

どの程度タイプセーフでいたいかという問題もあります。

これらの疑問はほとんど直交なのです。例えばGWTはタイプセーフでプログラム的でクライアント側のアプローチを提供します。一方Wicketはタイプセーフでプログラム的でサーバ側のアプローチを提供します。

JSFはいくらかタイプセーフの宣言型でサーバ側のアプローチを提供します。またそれには、必要なときにはプログラム的モードで働けるオプションがついてきます。それぞれのアプローチには利点と不利点がもちろんありますが、下記になぜJSFアプローチが素晴らしいかという理由を書いています。

一つ目に、私はユーザーインターフェースを宣言型の言語内で定義するのをはるかに好みます。ユーザーインターフェースは生まれつき階級型でコードのストラクチャーがそれを反映するようにしたいです。私はSwingスタイルのコードを使用してユーザーインターフェースを作って心地よく感じた事はありません。 この種のコードはいつも醜く保持するのが困難なものなのです。それは少しDOMツリーを通ってXMLを解析するJavaコードみたいです。そこには基礎的な構造の未結合が存在しているのです。

もちろんインターフェースの動的部分にはプログラム的操作は実用的です。しかしこれは確実に常識なケースではありません。ほとんどのユーザーインター フェースは個々のコントロールのレベル以外では極端に静的なのです。そしてもちろんJSFはブラウザのDOMと一緒に動作するJavaScriptコードの記述に戻ることもできるのです(最近ではJSFコンポーネントツリーへのクライアント側でのアクセスを可能にするJSF実装を作るのが可能ですが、私たちはまだそこに辿り着いていません。)。

二つ目に私はより多くのステートとクライアント側でのアプリケーションロジックをより多く実行すると開発労力をより削減できる、という考え方に同意していません。単にサーバー側でのみ効率的に処理が可能であるという懸念がありすぎるのです。持続性、セキュリティ、データレベル一致性等です。もしアプリケーションコードをクライアント側に持ってくると、ステートレスサービス層、データトランスファーオブジェクト、きめの細かいデータのマニュアルフェッチ、変更点の統合を伴って3、4年前の状態に戻ってしまうことになるのです。ステートフルのコンポーネントを採用し、対話スコープの持続性コンテキスト、つまりは サーバー側のテクノロジーを採用することによって、私たちはこの痛々しいプログラミングモデルから逃れたのです。

RichFacesとSeamを用いて非同期でのフェッチデータ、インタラクティブにビューをアップデートし、非同期にユーザーインタラクションに返答し、インタラクティブに変更を適用する、また全て明確な楽観的処理内で余分で騒々しいボイラープレートなしに、ユーザーインターフェースを作ることができるのです。もちろんJSFとRichFacesを学ぶのには他のアプローチよりも多少労力がかかります。しかしながら長い目でみるとその努力は報われるものなのです。

今日のJSFの基本的なアプローチにおいて一番の弱点はめったにコメントされていません。ビューをモデルに統合するためのELの使用におけるタイプセーフの欠落です。私の理想的な環境はユーザーインターフェースの定義用のタイプセーフで宣言型の言語をサポートするものとなるでしょう。あいにくJavaはそのようなDSLを生成する本当の意味でのサポートがありません。残念です。

InfoQは新たなWeb Beans JSRに関して尋ねた。

Web BeansにはSeamから得たアイディアが盛り込まれています。

  • コンテキスト的コンポーネント
  • 会話
  • ”優先的な”規則を介したコンポーネントオーバードライブ
  • Java EEを伴う”深い”統合
  • アノテーション統合ベースのインターセプター統合
  • イベント告知

一方、Guiceからはアノテーション統合ベースの依存性インジェクションのアイディアを盗み、これには広範囲で影響力のある結論をもたらしました。

Web Beansは”強力なタイピングを伴う疎結合”を強調する、とてもユニークなプログラミングモデルにこれらのアイディア全てを混入します。下記の事項を利用してとても緩い疎結合のアプリケーションを完成することができます。

  • クライアントとサーバーライフサイクルを減結合するコンテキスト的なライフサイクルマネジメント(まるでサービスかのように相互作用するステートフルコンポーネント)
  • クライアントとサーバ実装を減結合するためのデプロイタイムコンポーネントオーバードライブ
  • 消費者からメッセージプロデューサーを減結合するイベント告知
  • 分野横断的な技術的懸念を減結合するインターセプター

全てはタイプセーフを犠牲にすることなく成り立っていて、全てはタイプセーフアノテーションを介して行われているのです。もちろんランタイム時にあなたを襲ってくるトリックは隠されていません。

総合的にWeb BeansはSeamの様式の上に成り立っていますが、それはよりさらに素晴らしいものだと思っています。私は素晴らしいエキスパートグループに恵まれて光栄です。

最後に私たちはKing氏に新たなwikiで動いているin.relation.to(サイト・英語)を開発するのに、Seamを使うことによってフレームワークのホールを発見することに繋がったかどうか尋ねた。

バグをいくつかとマイナーな制限をいくつか見つけました。しかしながらWikiが持っている一番大きな影響力はSeam用のプラグインアーキテクチャの開発のために私たちを奮い立たせたところにあるのです。
原文はこちらです:http://www.infoq.com/news/2007/11/seam20

特集コンテンツ一覧

GAE開発の落とし穴

Googleのクラウド環境をつかったGoogle App Engineによる開発するにあたり、初めての試みで苦悩する開発者達の経験をもとに、各開発フェーズにあわせて問題点やどう解決したかをご紹介します

イベントレポート:「Coqチュートリアル#1」

去る1月12日、定理証明支援系ツールCoqの初心者向けチュートリアルが開催さ れた(http://kokucheese.com/event/index/23667/)。今後も2月2日 (http://kokucheese.com/event/index/23744/)、2月9日、2月16日と引き続き開 催されていく予定である。本記事では、開催の様子をレポートする。

Javaの未来についてのNeal Gafter氏とのディスカッション

Choosing Options

Neal Gafter氏はOracleによるJava買収の影響に関する議論、Javaにセグメンテッドスタックやメタオブジェクトプロトコルを追加することについての主張、そしてJavaとC#との比較について話をしてくれた。

Google Dartのエッセンス:アプリケーションの構築、スナップショット、Isolate

GoogleはVMをともなう新しい言語であり、JSコンパイラでもあるDartをプレビューした。 InfoQはDartのアプリの構築に貢献する文法の裏側を探った:スナップショット、Isolate、モジュール方式

CSPベースのモデル検査ツール「Process Analysis Toolkit」

本記事ではCSPベースの「マルチドメイン・モデル検査ツール」である、PAT(Process Analysis Toolkit)について紹介する。モデル検査は、形式手法(Formal Method)という方法論を基礎とする技術であり、複雑さが増大しながらも安全性を求められる、現在のソフトウェア開発の状況に対する処方箋の1つとして注目されている手法である。

Jenkinsによる継続的インテグレーションのススメ(4) ~CloudBeesでJenkinsをサービスとして使う~

前回まで、Jenkinsの幾つかの側面に注目して解説をしてきました。シリーズ最後の今回は、Jenkinsをサービスとして使う方法を紹介します。

書籍『抽象によるソフトウェア設計-Alloyではじめる形式手法-』の紹介

Alloyは、MITにて開発された仕様記述言語であり、ツールによる自動解析を使い、インクリメンタルに形式仕様が書けることが特長である。筆者らはAlloy開発者による、Alloyを使った形式手法入門書を翻訳、今夏にオーム社より刊行した。本記事では、Alloyの簡単な概要と、翻訳書『抽象によるソフトウェア設計』(「Alloy本」)を紹介する。

Windows デバイスで開発するタッチユーザーインターフェイス

スマートフォンを中心としたマルチデバイスにおけるタッチユーザーインターフェイスへの対応は、既に必須の項目となりつつある。本記事では、Windows デバイスにおける UX のベースとなっている「メトロ」というデザイン言語を掘り下げながら、既存環境を意識しつつもどのようにタッチユーザーインターフェイス開発に取り組んでいくべきであるかについて解説していく。