Spring Rooとは
Spring Roo は、Javaによる Springアプリケーション開発を効率化するコード生成ツールです。現在のバージョンは1.0.0.RC1となっています。まぁ、Java版のRailsみたいな感じですが、ラウンドトリップが行えます。簡単なコマンドでMavenのpom.xmlやソースを作成してくれます。
インストール
以下のサイトよりSpring Rooを取得します。今回取得したファイルはSpring Roo 1.0.0.RC1になります。
http://www.springsource.org/roo
任意ディレクトリに解凍した後、\bin へパスを通します。ここではC:\spring-rooに解凍したものとし、環境変数のPathにC:\spring-roo\binを追加します。
spring roo の起動
コマンドプロンプトより以下の操作を行います。
mkdir wedding cd wedding roo
作成するアプリケーション用のディレクトリを作成し、rooコマンドを実行しています。以下のような画面となりrooコンソールが起動されます。
____ ____ ____ / __ \/ __ \/ __ \ / /_/ / / / / / / / / _, _/ /_/ / /_/ / /_/ |_|\____/\____/ 1.0.0.RC1 [rev 198] Welcome to Spring Roo. For assistance press TAB or type "hint" then hit ENTER. Initializing Timer roo>
hintと入力すると、行うべき作用のヒントが表示されます。
roo> hint Welcome to Roo! We hope you enjoy your stay! Before you can use many features of Roo, you need to start a new project. To do this, type 'create project' (without the quotes) and then hit TAB. Enter a -topLevelPackage like 'com.mycompany.projectname' (no quotes). When you've finished completing your -topLevelPackage, press ENTER. Your new project will then be created in the current working directory. Note that Roo frequently allows the use of TAB, so press TAB regularly. Once your project is created, type 'hint' and ENTER for the next suggestion. You're also welcome to visit http://forum.springframework.org for Roo help.
ここで言われているように、create projectコマンドで新しいプロジェクトを作成します。createと入力してTABキーを押すと、コマンドが補間されるため楽です。パッケージ名も同時に指定します。
roo> create project -topLevelPackage com.wedding Created C:\Documents and Settings\・・・\work\wedding\pom.xml Created SRC_MAIN_JAVA Created SRC_MAIN_RESOURCES Created SRC_TEST_JAVA Created SRC_TEST_RESOURCES Created SRC_MAIN_WEBAPP Created SRC_MAIN_RESOURCES\META-INF\spring Created SRC_MAIN_RESOURCES\META-INF\spring\applicationContext.xml
このコマンドにより、RooはMaven2のプロジェクトのひな形が作成され、pom.xmlなどもできています。
さて、再びhintを見てみましょう。
roo> hint Roo requires the installation of a JPA provider and associated database. Type 'install jpa' and then hit TAB three times. We suggest you type 'H' then TAB to complete "HIBERNATE". After the -provider, press TAB twice for database choices. For testing purposes, type (or TAB) HYPERSONIC_IN_MEMORY. If you press TAB again, you'll see there are no more options. As such, you're ready to press ENTER to execute the command. Once JPA is installed, type 'hint' and ENTER for the next suggestion.
jpaプロバイダをインストールするよう指示があるので従います。
roo> install jpa -provider HIBERNATE -database H2_IN_MEMORY Created SRC_MAIN_RESOURCES\META-INF\persistence.xml Created SRC_MAIN_RESOURCES\META-INF\spring\database.properties Managed SRC_MAIN_RESOURCES\META-INF\spring\applicationContext.xml Managed ROOT\pom.xml
これによりpom.xmlに指定した内容が反映されます。以下のコマンドでデータベースの設定を確認できます。
roo> database properties database.driverClassName = org.h2.Driver database.password = database.url = jdbc:h2:mem:wedding;DB_CLOSE_DELAY=-1 database.username = sa
さて、hint。
roo> hint You can create entities either via Roo or your IDE. Using the Roo shell is fast and easy, especially thanks to the TAB completion. Start by typing 'new p' and then hitting TAB twice. Enter the -name in the form '~.domain.MyEntityClassName' In Roo, '~' means the -topLevelPackage you specified via 'create project'. Afer specify a -name argument, press SPACE then TAB. Note nothing appears. Because nothing appears, it means you've entered all mandatory arguments. However, optional arguments do exist for this command (and most others in Roo). To see the optional arguments, type '-' and then hit TAB. Mostly you won't need any optional arguments, but let's select the -testAutomatically option and hit ENTER. You can always use this approach to view optional arguments. After creating an entity, use 'hint' for the next suggestion.
エンティティを作成するためにnew pと入力してTABキー押せと言われているので従います。チルダでルートパッケージを指定できます。以下のようにエンティティを作成します。
roo> new persistent class jpa -name ~.domain.Rsvp Created SRC_MAIN_JAVA\com\wedding\domain Created SRC_MAIN_JAVA\com\wedding\domain\Rsvp.java Created SRC_MAIN_JAVA\com\wedding\domain\Rsvp_Roo_Entity.aj Created SRC_MAIN_JAVA\com\wedding\domain\Rsvp_Roo_ToString.aj Created SRC_MAIN_JAVA\com\wedding\domain\Rsvp_Roo_Configurable.aj
wedding\src\main\java\com\wedding\domain に以下のファイルが作成されます。
- Rsvp.java
- Rsvp_Roo_Configurable.aj
- Rsvp_Roo_Entity.aj
- Rsvp_Roo_ToString.aj
Rsvp.java はエンティティのクラスで、その他が AspectJ のファイルとなります。
Rsvp.java の中身は以下のようになっています。
package com.wedding.domain; import javax.persistence.Entity; import org.springframework.roo.addon.entity.RooEntity; import org.springframework.roo.addon.javabean.RooJavaBean; import org.springframework.roo.addon.tostring.RooToString; @Entity @RooEntity @RooJavaBean @RooToString public class Rsvp { }
さてhint
roo> hint You can add fields to your entities using either Roo or your IDE. To add a new field, type 'add field' and then hit TAB. Be sure to select your entity and provide a legal Java field name. Use TAB to find an entity name, and '~' to refer to the top level package. Also remember to use TAB to access each mandatory argument for the command. Afer completing the mandatory arguments, press SPACE, type '-' and then TAB. The optional arguments shown reflect official JSR 303 Validation constraints. Feel free to use an optional argument, or delete '-' and hit ENTER. If creating multiple fields, use the UP arrow to access command history. After adding your fields, type 'hint' for the next suggestion. To learn about setting up many-to-one fields, type 'hint relationships'.
エンティティにフィールドを追加しろと言っています。以下のようにフィールドを指定します。
roo> add field string -fieldName code -notNull -sizeMin 1 -sizeMax 30 roo> add field string -fieldName email -sizeMax 30 roo> add field number -fieldName attending -type java.lang.Integer roo> add field string -fieldName specialRequests -sizeMax 100 roo> add field date jpa -fieldName confirmed -type java.util.Date
これにより、Rsvpのコードは以下のようになります。
package com.wedding.domain; import javax.persistence.Entity; import org.springframework.roo.addon.entity.RooEntity; import org.springframework.roo.addon.javabean.RooJavaBean; import org.springframework.roo.addon.tostring.RooToString; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import java.util.Date; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity @RooEntity @RooJavaBean @RooToString public class Rsvp { @NotNull @Size(min = 1, max = 30) private String code; @Size(max = 30) private String email; private Integer attending; @Size(max = 100) private String specialRequests; @Temporal(TemporalType.TIMESTAMP) private Date confirmed; }
hintを見てみます。
roo> hint At this stage of the project, you have a few options: * List all hint topics via 'hint topics' * Create more fields with 'hint fields' * Create more entities with 'hint entities' * Create a web controller with 'hint controllers' * Create dynamic finders with 'hint finders' * Setup your logging levels via 'hint logging' * Run tests via Maven (type 'exit' and then 'mvn test') * Build a deployment artifact (type 'exit' then 'mvn package') * Learn about Eclipse integration by typing 'hint eclipse' * Discover all Roo commands by typing 'help'
ここからはアプリケーション毎に色々ですね。
動作確認
では今まで作成したものを動かしてみます。テストケースの作成とコントローラの自動生成を行います。
roo> new integration test roo> new controller automatic ~.web.RsvpController
では最後にMavenで実行してみましょう。
roo> quit $ mvn test
あれっ、エラーでる。なんでっ
declare @type is only supported at Java 5 compliance level or above
Java7のベータ版を入れていたからの模様。Java6にして実行したら、
Running com.wedding.domain.RsvpIntegrationTest Tests run: 9, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.857 sec Results : Tests run: 9, Failures: 0, Errors: 0, Skipped: 0
と、テストが成功していることが分かります。
に続く。