InfoQ

News

JavaのWebフレームワークが自動リロードのサポートを強化

作者 Geoffrey Wiseman, 翻訳者 松本 清一 投稿日 2007年9月2日 午後11時35分

コミュニティ
Java
トピック
Webフレームワーク
タグ
Spring Web Flow,
Grails,
Struts,
Tapestry,
Spring,
JBoss Seam,
Spring IDE

ソフトウェア開発において、コンパイル、ビルド、テストのサイクルは、開発者の生産性を大きく左右するものである。開発者がアプリケーションの再コンパイル、再ビルド、デプロイをしなければならないときに、サーバを再起動しなければならず、開発作業がスローダウンしてしまう。

動的なスクリプト言語を使用するような、Webアプリケーションのプラットフォームの場合は特に、開発者がアプリケーション(ソースコード、テンプレート、設定など)を修正した時に、その結果を即座に見ることができる。

このような機能は、自動リロード機能、インクリメンタルなホット・デプロイなどと呼ばれている。プラットフォームやフレームワークが、この種の機能をサポートするということは、開発者が、Webアプリケーションの開発や保守をスムーズに行うことができるという点でインパクトのあるものと言える。

Javaの自動リロード機能

ほとんどのJavaのWebフレームワークが、自動リロード機能をなんらかの形でサポートしており、大抵の場合、ページテンプレート言語からサポートを始めている。例えば、JSPファイルが変更されると、アプリケーションサーバがそれを検知し再表示することができる。

Webアプリケーションのサイズが大きくなるにつれて、ほとんどの場合、サーバの再起動時間も長くなる。自動リロードに関しては、特にRuby on Railsと比較すると、多くの時間を要し、多くの制限があることが多い。

ここ最近、いくつかのJavaのWebフレームワークにおいて、自動リロードの機能が強化されたと発表されている。InfoQでは、ちょうど良い機会であるとして、有名なJavaのWebフレームワークのいくつかをキャッチアップし、その結果をまとめた。

Grails
Grailsは、いくつかの制限付きで自動リロードをサポートしている。

Grailsのアーティファクト(コントローラクラス、タグリブクラス、サービスクラス等)は、リロード可能ですが、いくつかの例外もあります。
  • サービスクラスは、'transactional'プロパティーが、falseの時のみリロードされます。
  • ドメインクラスは、実行時にデータベースに再マップされます。但し、データソースにデータベース自動生成を設定('dbCreate'プロパティーの値に'update'に設定する)した場合、データソースの場合は可能な限りデータベースをアップデートします。この処理は常にスムーズに動作するわけではない上に、ドメインクラスを変更した時に、アプリケーションの再起動が必要な場合もあります。

Seam
Seam 1.2.1では、"incremental hot-deployment"と呼ばれる機能が取り込まれている。

但し、Seamの場合、JavaBeanコンポーネント限定のサポートとなります。entity beanは、未対応です。さらに、EJB3コンポーネントについても同様です。EJB3コンポーネントに対するサポートも予定していますが、JavaOne以降の対応になると思われます。 

Spring MVC & Web Flow
Spring 2.0.4では、Spring MVC dispatcherがリロード可能になる。Springでは動的言語サポートとして、コントローラとバリデータをBeanShellとGroovyで記述できるようにし、アプリケーションの再起動無しでリフレッシュされる。

Spring Web Flowは、Spring MVC、Struts1と2、JSFで使用可能であり、Webアプリケーションのナビゲーションと状態管理に使用することができる。Spring 2.0.4では、サーバの再起動なしにフローの再ビルドが可能となる。

このことに加えて、Keith Donald氏は、Spring Web FlowにおけるSpring IDE 2.0のサポートについて次のように語っている。

Spring IDE 2.0を使用することで、ナビゲーションのロジックを視覚的に(ドラック&ドロップで)変更することができます。そして、これらの変更をコンテナの再起動なしに行います。フローの定義を保存する必要すらありません(ツールが変わりにやってくれます)。

Struts 2
Struts 2では、変更された際のアクションがリロードされる。但し、Patrick Lightbody氏は、次のように警告している。

最終的には、オブジェクトのチェーン(例えば、ステートフルアクションからステートレスなSpringサービスへのチェーン)が複雑になる場合、何がリロードできて、何ができないかを知ることが難しくなるという問題があります。

Tapestry 5
Tapestry4では、開発モードでHTMLテンプレートとページのプロパティのリロードをサポートした。一方、Tapestry5では、クラスとテンプレートのリロードに大きなサポートを加えている。

他のフレームワークと同様に、いくつかの制限事項がある。

  • 現時点で、自動リロードは、JARファイルのリソースに対してサポートしていません
  • クラスローダを使用したリロードとなるので、リロードしていないクラスを操作するとClassCastExceptionsが発生します
  • リロードしたクラスを参照したままにしておくと、メモリリークの可能性があります
(原文は2007年4月25日にリリースされた記事です)
ブックマーク
digg+,
reddit+,
del.icio.us+,
dzone+,
Hatena

No comments

返信

特集コンテンツ一覧

トップスポーツチームの監督に教わる秘訣

この論文では、氏が発見した原則を要約し、その原則をいかにしてソフトウェア開発に応用するかを説明します。

事例研究:Dutch Railwaysのプロジェクトにおける分散拠点でのスクラム・プロジェクト

この記事では、私達がどのようにして大規模(240人月、10万行強)でインドとオランダの開発者も参加したスクラム・プロジェクトを成功させたのかを示しています。

Agile2008チーム参加レポート - 帰国そして変化

Agileカンファレンスに「参加者としてだけでなく、発表者として参加しよう」を掲げたチームgoyattomは、サブミッションを提出し、7つのセッションが日本から選択されました。参加者はカンファレンスで各々の発表や、各セッションへの参加、諸外国のエンジニアとの出会い、ステージ上で DearXPを熱演などの様々な思い出を抱えて、無事日本に戻ってきました。

SilverlightとJavaのインターオペラビリティ

マイクロソフトのRobert Bellが、SilverlightとJavaを使用したインターオペラビリティのシナリオを紹介し、サンプルコードを例にとってアーキテクチャの手引きを提供します。

Agile2008 チーム参加レポート - カンファレンス参加編

Agileカンファレンスに「参加者としてだけでなく、発表者として参加しよう」を掲げたチームgoyattomは、サブミッションを提出し、7つのセッションが日本から選択されました。サブミッションが選択された人、そうでない人も含めて、個々の目的意識の確認、膨大なプログラムから聞きたいセッションの選択、旅行の準備、プレゼンテーションの準備の期間を終えて、無事当日を迎えました。

Agile2008 チーム参加レポート - 動機/準備編

筆者はアジャイルソフトウェア開発についての年に一度の国際会議であるAgile2008に初めて参加してきました。今年の日本からの参加者の数は14名にも及び、発表者は5名、受け持ったセッションは8つに及び、例年にない活躍を見せました。なぜ今年のAgile2008では、これほど多くの日本人が参加し発表に至ったのか? そのレポートをお届けします。

Javaトラブルシューティングメルマガ総集編 2008/08~09

エスエムジーでは、Java全般を対象にしたトラブルシューティングサービス「JaTS」を提供しています。この記事では、前回に引き続き、JaTSにて蓄積したトラブル事例とその解決ノウハウの一部をお送りしている「Javaトラブルシューティングメールマガジン」(JTSMM)の総集編として、過去2ヶ月のトラブル事例と追加情報をダイジェストとして提供いたします。

モデル駆動アプローチがうまく機能しない(しなくなる)8 つの理由

この記事では、モデル駆動アプローチがうまく機能しない、または機能しなくなることによって期待した結果が実現できなくなる 8 つの理由について書きたいと思います。