■Rooはファイルの手動編集とコマンド実行が自動同期
では、追加したフィールドの名前を変更したり、削除したい場合はどうすればいいでしょうか?方法は非常に簡単で、.javaファイルから普通に削除すればOKです。
試しに、baseプロパティをPizza.javaから削除してください。削除して保存すると、Roo Shell上で関連ファイルが更新されます。このように、ファイルの手動編集とコマンド実行の双方向で関連ファイルが作成/更新されていきます。
ちなみに、ファイル自体を削除すれば、関連する.ajファイルも削除されます。
.ajファイルはRooが管理するファイルなので、編集を行ってはいけません。
JPA操作メソッドを追加/修正したり、「toString」を自分で定義したい場合は、javaファイルに対して追加/修正してください。
例えば、Pizza.javaにtoStringメソッドを定義すれば、Rooがその変更を自動検出し、Pizza_Roo_ToString.ajを削除してくれます。これは、この後生成するコントローラでも同様です。
■エンティティの作成を完了
残りのPizzaOrderエンティティも作成してしまいましょう。下記コマンドを順番にRoo Shellで実行していってください。
roo> entity --class ~.domain.PizzaOrder --testAutomatically ~.domain.PizzaOrder roo> field string --fieldName name --notNull --sizeMin 2 ~.domain.PizzaOrder roo> field string --fieldName address --sizeMax 30 ~.domain.PizzaOrder roo> field number --fieldName total --type java.lang.Float ~.domain.PizzaOrder roo> field date --fieldName deliveryDate --type java.util.Date ~.domain.PizzaOrder roo> field set --fieldName pizzas --type ~.domain.Pizza
これでエンティティの作成はすべて完了です。
エンティティ作成時には、testAutomaticallyを付加していました。これによりエンティティが持つ「persist」「remove」など、メソッドのテストが生成されます。テストを実行してみましょう。
roo> perform tests
初回はライブラリのダウンロードも行われるので少し時間がかかるかもしれません。記事の通りにrooコマンドを実行してきたなら、問題なくすべてのテストが通るはずです。
テスト結果を確認したい場合、「target/surefire-reports」以下にレポートが出力されています。エンティティのテストはすべて成功していますので、安心してエンティティを使用できるようになりました。
エンティティもすべて動くようになったので、最後にWeb層を作成しましょう。ドキュメントではWeb層の生成のために「controller all」コマンドを実行していますが、現在このコマンドは非推奨になっています。代わりに、「web mvc」コマンドを使用してWeb層を生成しましょう。
roo> web mvc setup roo> web mvc all --package ~.web
■「web mvc setup」コマンド
「web mvc setup」コマンドを実行することにより、Spring MVCを使用するための準備ができ、コントローラの生成ができるようになります。
■「web mvc all」コマンド
「web mvc all」コマンドは、すべてのエンティティに対してSpring MVCコントローラを生成します。
「package」オプションは「web mvc all」コマンド唯一のオプションで、生成されるコントローラのパッケージを「~.web」(トップレベルパッケージ.web)に指定しています。
原稿執筆時の2011年8月18日現在、生成されたload-scripts.tagxファイルでエラーが発生しています(参考:[#STS-1915] Invalid error marker on load-scripts.tagx file in resultant clinic.roo project - SpringSource Issue Tracker)
次バージョンのSpring Roo 1.2では修正されている予定ですが、現状は手動で修正するしかありません。エラーの出ている<link>タグの位置を、下記のコメントの後ろの位置から、移動します。
<link rel="stylesheet" type="text/css" href="${tundra_url}"> <!-- required for FF3 and Opera --> </link> <link rel="stylesheet" type="text/css" media="screen" href="${roo_css_url}"> <!-- required for FF3 and Opera --> </link>
以下のようにコメントの前の位置に移動してください
<link rel="stylesheet" type="text/css" href="${tundra_url}"> </link> <!-- required for FF3 and Opera --> <link rel="stylesheet" type="text/css" media="screen" href="${roo_css_url}"> </link> <!-- required for FF3 and Opera -->
これでエラーは消えます。
■生成された.javaファイルを確認
それでは生成されたファイルを見てみましょう。サンプルとして「PizzaController.java」ファイルを開いてみてください。
package jp.cm.pizzashop.web; import jp.cm.pizzashop.domain.Pizza; import org.springframework.roo.addon.web.mvc.controller.RooWebScaffold; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @RooWebScaffold(path = "pizzas", formBackingObject = Pizza.class) @RequestMapping("/pizzas") @Controller public class PizzaController { }
■使われているアノテーション
エンティティと同じく、Javaのコントローラに具体的な定義はありません。@RooWebScaffoldアノテーションでは、コントローラの基本的な設定を行っています。このアノテーションを設定することで、生成されるメソッドの制限を行うこともできます。
また、@RequestMappingアノテーションでは、Pizzaに関連する操作のURLマッピングを行っています。
これらアノテーションの詳細はリファレンスを確認してみてください。
■生成された.ajファイルを確認
次に、PizzaController_Roo_Controller.ajファイルを見てみましょう。「create」「show」「list」「update」と、CRUD操作のためのメソッドが一通り定義されており、メソッド内では先ほどテストした各エンティティのメソッドが呼ばれています。これらのメソッドがコントローラに織り込まれます。
コントローラ処理結果を表示するためのWebページを構成するのは、「WEB-INF」ディレクトリ以下に置いてあるファイルです。
では、それぞれの用途を説明します。
■image
画像ファイルを格納しています。
■styles
スタイルシートを格納しています。デザインを変更したい場合、ここにあるデフォルトのCSSを変更するか、新しいCSSを追加できます。
■WEB-INF/i18n
国際化のためのメッセージプロパティを定義しています。「web mvc install language」コマンドを実行することで、新たな言語用のプロパティファイルが生成されます。
■WEB-INF/layout
基本レイアウトは「Apache Tiles」を使用して定義されており、ここにある「layouts.xml」で定義されています。
■WEB-INF/spring/webmvc-config.xml
Spring MVCの設定を記述しています。ViewResolverの定義・設定もここで行っており、レスポンス形式をカスタマイズしたい場合などは、ここでカスタムしたViewResolverを定義/設定します。
■WEB-INF/tags
XML形式のカスタムタグが格納されています。
■/WEB-INF/views
XML形式のJSPが機能ごとに格納されています。機能ごとに「views.xml」があり、そこのTiles定義で各.jspxファイルを設定しています。
自動生成されたファイルのUIを変更したい場合、これらのファイルを修正して独自のUIを定義します。
作成したWebアプリを起動して動かしてみましょう。パッケージエクスプローラでpizzaアプリを[右クリック]→[Run As]→[Run on Server]と選択してください。
ダイアログが起動するので、登録されているServerを選択して[Finish]ボタンを押下してください。
STSでは、VMware vFabric tc Serverが初めからサーバとして登録されており、このServerを使用してアプリが起動します(vFabricはアプリケーションサーバとしてtc Serverを使用しています)。
pizzaアプリがデプロイされ、STS内のウィンドウでpizzaアプリのトップページが表示されます。左のメニューからToppingやPizzaの操作が可能です。
今回は各コマンドや生成されるファイルを説明しながらアプリを作成しました。複数のエンティティが関連したモデルでも、コマンド入力を数回行うだけで適切な関連が定義され、CRUD処理ができるようになります。また、コマンドの種類やオプションも多岐に渡り、さまざまなパターンの生成を補助してくれると思います。
基本的にRooでアプリを開発する際には、まずRooでコマンドが提供されていないかを調べてみてください。ただ、あくまでもRooは開発の補助です。ビジネスロジックは自分でJavaに記述するということを忘れないでください。
次回は、Rooのより便利な機能について解説する予定です。
Copyright © ITmedia, Inc. All Rights Reserved.