SpringSource が Spring Roo 1.2.0.M1 をリリースした。Spring Roo はオープンソースの RAD (Rapid Application Development) ツールで,Spring ベースの Java アプリケーション開発を convention-over-configuration (設定より規約を優先) 原則を用いて行う。今回のリリースで新しいのは以下のものだ。
- パフォーマンスの改善
- Apache ソフトウェアライセンス2でのリリース
- GitHub によるホスティング
- Spring Data JPA リポジトリ
- MongoDB リポジトリ
- サービスレイヤ
- GWT サポートの改良
- データベース・リバースエンジニアリングのマルチスキーマ対応
- シェルの改良
大規模なベンチマークプロジェクトの結果によれば,パフォーマンスが10 倍に増加している。これはプロファイリング,モニタリング,ディスク I/O,XML モデルおよびラウンドトリップの検討を行った結果から得られたものだ。規模の大きなプロジェクトで作業するとき,処理速度の向上を最も実感できるだろう。
今回のリリースからライセンスが Apache ソフトウェアライセンス (ASL) 2 に変更され,他の Spring 製品と整合性の取れたものになった。ASL はこれまでのライセンスより寛大なため,今回の変更は営利目的の開発やクローズドソースとの統合,独占的再配布を行う上ではプラスとなる。これまでは主要部分のランセンスとして GPL3,アノテーション JAR については ASL 2 と GPL 3 が採用されていた。
Spring Roo は今回より,人気の高い Git ホスティングサービスである GitHub でホストされることになった。移行の主な目的は,コミュニティからの関与をさらに促進することだ。さらに GitHub には,コミュニティから提供されるコードの配布が容易になるという利点もある。Spring Roo の GitHub ページは https://github.com/SpringSource/spring-roo である。
リポジトリレイヤのアプローチ方式をユーザ自身が指定できるようになった。デフォルトのデータアクセスパターンが "アクティブレコード" 形式の JPA 永続化ドメインエンティティであることに変わりはないが,Spring Data JPA ベースの JPA リポジトリを使用する,より従来的なアプローチも選択できる。設定はエンティティの生成時に activeRecord パラメータを true あるいは false にすることで行う。
entity --class ~.domain.Entity --activeRecord [true|false]
リポジトリとしてさらに MongoDB も選択できる。この場合には Spring Data MongoDB が使用される。MongoDB はスケーラブルで高性能なドキュメント指向のデータベースだ。Spring Roo で NoSQL を使用したいならば,この方法を選択すればよい。以下の Roo コマンドが新たに追加されている。
mongo setup - 永続化に MongoDB を使用するようにプロジェクトを設定する entity mongo - MongoDB リポジトリに保存可能なドメインタイプを生成する repository mongo - 対象となる型に @RootRepositoryMongo アノテーションを追加する
サービスレイヤのサポートも追加された。この機能はコミュニティからの要望が多かったもので,@RooService アノテーションを使ってサービスレイヤを追加することによってコントローラからデータアクセスコードを隠蔽する。Roo の管理する web レイヤ,リポジトリ,テストなどはすべてこの新しいサービスレイヤを認識する。以下の Roo コマンドが新たに導入されている。
service - 対象となる型に @RooService アノテーションを追加する
下図は Spring Roo の新サービスと永続性レイヤを表したものだ。
Spring Roo の新レイヤについては,SpringSource のブログポスト "Spring Roo 1.2 で新たに追加されたアプリケーションレイヤと永続性選択" に詳しく説明されている。
GWT サポートが改善され,ドメインモデルおよびサービスレイヤの RequestFactory クラス群 (EntityProxy, RequestContext, Locator) の同期を管理させることが可能になった。GWT の UI 機構は必須ではなくなり,GWT のプロジェクトへの統合方法は任意に選択できる。以下の Spring Roo コマンドが導入されている。
web gwt all - すべてのエンティティをプロジェクトに配置して GWT リクエストとプロキシを生成し,処理の基盤を構成する web gwt gae update - GWT プロジェクトを更新して,GAE サポートを追加する web gwt proxy all - すべてのエンティティをプロジェクトに配置して GWT プロキシを生成する web gwt proxy request all - すべてのエンティティをプロジェクトに配置して GWT リクエストとプロキシを生成する web gwt proxy request type - 指定された型をベースとするプロキシとリクエストを生成する web gwt proxy type - 指定された型をベースとする GWT プロキシを生成する web gwt request all - すべてのエンティティをプロジェクトに配置して GWT リクエストを生成する web gwt request type - 指定された型をベースとする GWT プロキシを生成する web gwt scaffold - GWT リクエストとプロキシ,および指定された基盤を生成する
Spring Roo で評価の高い機能として,データベースリバースエンジニアリング (DBRE) のサポートがある。リレーショナルスキーマからのエンティティモデルの構造構築や,スキーマの変更に応じたエンティティレイヤの自動メンテナンスを実現するものだ。Spring Roo 1.2 では新たに,複数のデータベーススキーマを同時にリバースエンジニアリングすることが可能になった。複数スキーマコマンドは次のような形式で指定する。
database reverse engineer --schema "s1 s2 s3" --includeTables "s1.table1 s1.table2 s3.table3"
Spring Roo シェルも改良され,バックスペースで前の行に移動できるようになった。また "!" 演算子を指定すれば,オペレーティングシステムのコマンドを Roo シェル上で実行することも可能だ。
! - オペレーティングシステム (OS) コマンドを実行する。
次回の Spring Roo 1.2 マイルストーンリリースには JSF/PrimeFaces やマルチモジュール Maven サポートなど,コミュニティから要望の多かった機能が含まれる予定だ。さらに JSP に代えて Facelet を使用した JSF 2.0 ビュー用の新アドオンや,マルチモジュール Maven プロジェクト作成のための新アドオンなども提供される。
これらの新機能は SpringSource から Spring Roo 1.2 M1 をダウンロード することで体験できる。ただしマイルストーンリリースであるので,製品版プロジェクトについては引き続き Roo 1.1.5 を使用するように推奨されている。詳細については,Spring Roo オフィシャルサイトあるいは Spring Roo コミュニティフォーラム を参照してほしい。