2009年6月24日水曜日

Spring Roo

http://www.infoq.com/jp/news/2009/06/spring-roo-1.0-m1-release

ちょっと見てみました。
  • Ruby on Railsみたくscaffoldを簡単に作れるようにしている(平たく言えばJava版Rails)
  • エンプラ系の機能が組込みやすそう(Web workflowやsecurityなど)
  • ラウンドトリップ対応
Rooシェルというものがあって、そこからソースや設定ファイル、コンポーネントのインストールのコマンドを実行するという感じ。

たとえば・・・
roo> create project -topLevelPackage net.stsmedia.roo.shoppinglist
roo> install jpa -database HYPERSONIC_IN_MEMORY -provider HIBERNATE
roo> new persistent class jpa -name ~.domain.Item
roo> add field string -fieldName name -notNull
roo> add field string comments -sizeMax 150
roo> add field number -fieldName price -type java.lang.Float
roo> new persistent class jpa -name ~.domain.ShoppingList
roo> add field string -fieldName title -notNull
roo> add field date jpa -fieldName shoppingDate -type java.util.Date
roo> add field set jpa -element ~.domain.Item -fieldName items
roo> new controller automatic -name ~.web.ShoppingListController
roo> new controller automatic -name ~.web.ItemController -formBackingObject ~.do.main.Item
で、Springを使ったWebAPのひな型が生成される。

具体的には上記コマンドで以下のようなものが生成される。
  • Maven2プロジェクト構造に沿ってフォルダや設定ファイル
  • エンティティクラス(上記だとItem、ShoppingListクラス)
  • コントローラクラス(上記だとShoppingListControllerクラスなど)
  • テストコード
  • JSPファイル
  • その他、設定ファイル(applicationContext.xmlやweb.xmlなど)
  • そして、アスペクト(.ajファイル)
生成されるエンティティクラスの例:
@Entity
@RooEntity
@RooJavaBean
@RooToString
public class ShoppingList {

@NotNull
private String title;

@Temporal(TemporalType.TIMESTAMP)
private Date shoppingDate;

@OneToMany(cascade = CascadeType.ALL)
private Set items = new HashSet();
}
アノテーションでORマッピングやバリデーションが定義されており、そのアノテーション定義にしたがって何らかの処理を行うアスペクト定義コードも一緒に生成されている。

AOPでラウンドトリップを実現していて、開発者がいじるコード部分以外はアスペクトとして自動生成されている。アスペクトコードは開発者がいじらないようになっている(つまり、再生成時はアスペクトコードのみ変更される)。

…っていうのが、概要を見た感じだが、もう少し中身見たいな。

0 コメント: