tanamonの稀に良く書く日記

KEEP CALM AND DRINK BEER

Spring Rooの動作(2) - persistence setupコマンド

Spring Roo 1.1.0.M1 [rev 3a0b8a3]で試した結果です

persistence setupコマンド

  • JPA persistence providerの設定を追加する
  • 2回以上実行することができる
  • providerやdatabaseを変更した場合、pom.xml上で不要の設定を削除後に新しい設定を追加してくれる
  • たとえば、とりあえずHYPERSONIC_IN_MEMORYで作って、ある程度できてきたらMYSQLに変えるということをしてもソースは直さなくて済む

オプション

--provider [providerName]
  • [providerName]にはDATANUCLEUS, ECLIPSELINK, HIBERNATE, OPENJPAのいずれかを指定する
--database [database]
  • [database]にはDB2, DERBY, GOOGLE_APP_ENGINE, H2_IN_MEMORY, HYPERSONIC_IN_MEMORY, HYPERSONIC_PERSISTENT, MSSQL, MYSQL, ORACLE, POSTGRES, SYBASEのいずれかを指定する
  • [database]がGOOGLE_APP_ENGINEの場合、[providerName]がDATANUCLEUSである必要がある
--applicationId [applicationId]
  • Google App Engine用のアプリケーションIDを設定する
  • 未指定だと[projectName]の値を使用する
--jndiDataSource [jndiName]
  • このオプションを指定しない場合
    • SRC_MAIN_RESOURCES\META-INF\spring\applicationContext.xmlファイルに以下の設定が定義される
<bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource">
	<property name="driverClassName" value="${database.driverClassName}"/>
	<property name="url" value="${database.url}"/>
	<property name="username" value="${database.username}"/>
	<property name="password" value="${database.password}"/>
</bean>
    • SRC_MAIN_RESOURCES\META-INF\spring\database.propertiesが追加される。
  • このオプションを指定した場合
    • SRC_MAIN_RESOURCES\META-INF\spring\applicationContext.xmlファイルに以下の設定が定義される
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/hoge"/>
    • 後からjndiDataSourceを指定した場合、元からあるdatabase.propertiesファイルは削除されないので、手動で削除する
--databaseName [databaseName]
--userName [userName]
--password [password]
  • データベース接続先の指定をする
  • jndiDataSourceオプションを指定していない場合のみ有効
  • src/main/resources/META-INF/spring/database.propertiesファイルに記述される
database.password = [password]
database.url = jdbc:mysql://localhost:3306/[databaseName]
database.username = [userName]
  • 接続サーバ名やポートを指定するパラメータが無いので、コマンドとして不完全
  • database properties setコマンドで行ったほうがわかりやすい
roo> database properties set --key database.username --value root
roo> database properties set --key database.password --value root
roo> database properties set --key database.url --value jdbc:mysql://192.168.1.1:3306/sandbox

使い方

roo> persistence setup --provider HIBERNATE --database HYPERSONIC_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 [Added dependency org.hsqldb:hsqldb:1.8.0.10]
Managed ROOT\pom.xml [Added dependency org.hibernate:hibernate-core:3.5.0-Final]
Managed ROOT\pom.xml [Added dependency org.hibernate:hibernate-entitymanager:3.5.0-Final]
Managed ROOT\pom.xml [Added dependency org.hibernate.javax.persistence:hibernate-jpa-2.0-api:1.0.0.Final]
Managed ROOT\pom.xml [Added dependency org.hibernate:hibernate-validator:4.0.2.GA]
Managed ROOT\pom.xml [Added dependency javax.validation:validation-api:1.0.0.GA]
Managed ROOT\pom.xml [Added dependency cglib:cglib-nodep:2.2]
Managed ROOT\pom.xml [Added dependency javax.transaction:jta:1.1]
Managed ROOT\pom.xml [Added dependency org.springframework:spring-jdbc:${spring.version}]
Managed ROOT\pom.xml [Added dependency org.springframework:spring-orm:${spring.version}]
Managed ROOT\pom.xml [Added dependency commons-pool:commons-pool:1.5.4]
Managed ROOT\pom.xml [Added dependency commons-dbcp:commons-dbcp:1.3]
Managed ROOT\pom.xml
roo> persistence setup --provider HIBERNATE --database MYSQL --jndiDataSource jdbc/hoge
Managed SRC_MAIN_RESOURCES\META-INF\persistence.xml
Managed SRC_MAIN_RESOURCES\META-INF\spring\applicationContext.xml
Managed ROOT\pom.xml [Added dependency mysql:mysql-connector-java:5.1.12]
Managed ROOT\pom.xml

再度実行した場合は、差分のみ変更される。

その他

  • デフォルトでは、インスタンス起動時にDBのデータが消えるようになっている
  • 消えないようにするには、SRC_MAIN_RESOURCES\META-INF\persistence.xmlの設定を変更する
	<!--
	value='create' to build a new database on each run; 
	value='update' to modify an existing database; 
	value='create-drop' means the same as 'create' but also drops tables when Hibernate closes; 
	value='validate' makes no changes to the database
	-->
	<property name="hibernate.hbm2ddl.auto" value="create"/>