S2JDBC-GENでmigrateするとき各環境用のデータをロードさせたいんだけど・・。(解決済)
めちゃはまった。ソースまで追いかけちゃった。
S2JDBC-GENで各環境用のデータをダンプしておいてマイグレートしたいと思った。そうすると、スキーマの内容が変わってマイグレートしなおしたとき、ローカルで使ってたテストデータなんかを(だいたい)元に戻せるだろうから。
そして、Antのmigrateタスクは以下のように設定されている。最新のバージョンを元に(version="latest")マイグレートを行い、各環境(env="ut")用のダンプを優先する(applyenvtoversion="true")ようになっている。
<target name="migrate" depends="init"> <migrate classpathdir="${classpathdir}" rootpackagename="${rootpackagename}" entitypackagename="${entitypackagename}" applyenvtoversion="true" version="latest" env="ut" jdbcmanagername="${jdbcmanagername}" classpathref="maven.runtime.classpath" /> </target>
で、以下のようなディレクトリ構成でmigrateをおこなったとき、0001#utというディレクトリ以下のファイルが優先されるはずなので、ローカルで使ってたusersテーブルのデータが元に戻るはず。(ちなみにダンプはdump-dataタスクで実行して作成)
db +---0000 +---0001 | `---create | +---010-table | | +-----users.sql | `---040-dump | +-----users.csv +---0001#ut ・・・これが各環境独自のSQLとかダンプ(CSV)とかになり、こっちが優先される。 `---create `---040-dump +-----users.csv
(※ id:taediumさんよりご指摘いただき、図を修正しました。)
しかし、上の構成では0001#ut以下のダンプがロードされなかった(テーブルはCREATEされてたけど)。かといって、0001ディレクトリ以下のダンプがロードされるわけでもなかった。色々試してみると以下のような構成にしないといけないらしい。
db +---0000 +---0001 | `---create | +---010-table | | +-----users.sql | `---040-dump | +-----users.csv +---0001#ut `---create +---010-table | +-----users.sql・・・これ! `---040-dump +-----users.csv
どうやら、0001#ut以下のダンプをロードさせたいときは、対象テーブルのCREATEスクリプトも0001#ut以下においておかないとダメっぽい。なんでかなー。最初のディレクトリ構成でもテーブルは出来てるから、ロードしてくれてもよさそうなのに。ま、ひとまずこれで行くことにする。
追記
上記と同じような状況でmigrateを行ったときのログ
Buildfile: /home/hironemu/apps/eclipse/workspace/sample/s2jdbc-gen-build.xml migrate: [migrate] 2009-06-27 17:46:42,578 [main] DEBUG org.seasar.extension.jdbc.gen.internal.command.MigrateCommand - コマンド(org.seasar.extension.jdbc.gen.internal.command.MigrateCommand)を実行します。 [migrate] 2009-06-27 17:46:42,580 [main] DEBUG org.seasar.extension.jdbc.gen.internal.command.MigrateCommand - コマンドのプロパティ(statementDelimiter)には値(;)が設定されています。 [migrate] 2009-06-27 17:46:42,580 [main] DEBUG org.seasar.extension.jdbc.gen.internal.command.MigrateCommand - コマンドのプロパティ(blockDelimiter)には値(null)が設定されています。 [migrate] 2009-06-27 17:46:42,581 [main] DEBUG org.seasar.extension.jdbc.gen.internal.command.MigrateCommand - コマンドのプロパティ(haltOnError)には値(true)が設定されています。 [migrate] 2009-06-27 17:46:42,581 [main] DEBUG org.seasar.extension.jdbc.gen.internal.command.MigrateCommand - コマンドのプロパティ(schemaInfoFullTableName)には値(SCHEMA_INFO)が設定されています。 [migrate] 2009-06-27 17:46:42,583 [main] DEBUG org.seasar.extension.jdbc.gen.internal.command.MigrateCommand - コマンドのプロパティ(schemaInfoColumnName)には値(VERSION)が設定されています。 [migrate] 2009-06-27 17:46:42,583 [main] DEBUG org.seasar.extension.jdbc.gen.internal.command.MigrateCommand - コマンドのプロパティ(ddlFileEncoding)には値(UTF-8)が設定されています。 [migrate] 2009-06-27 17:46:42,583 [main] DEBUG org.seasar.extension.jdbc.gen.internal.command.MigrateCommand - コマンドのプロパティ(migrateDir)には値(/home/hironemu/apps/eclipse/workspace/sample/db/migrate)が設定されています。 [migrate] 2009-06-27 17:46:42,585 [main] DEBUG org.seasar.extension.jdbc.gen.internal.command.MigrateCommand - コマンドのプロパティ(versionNoPattern)には値(0000)が設定されています。 [migrate] 2009-06-27 17:46:42,585 [main] DEBUG org.seasar.extension.jdbc.gen.internal.command.MigrateCommand - コマンドのプロパティ(ddlInfoFile)には値(/home/hironemu/apps/eclipse/workspace/sample/db/ddl-info.txt)が設定されています。 [migrate] 2009-06-27 17:46:42,585 [main] DEBUG org.seasar.extension.jdbc.gen.internal.command.MigrateCommand - コマンドのプロパティ(version)には値(latest)が設定されています。 [migrate] 2009-06-27 17:46:42,586 [main] DEBUG org.seasar.extension.jdbc.gen.internal.command.MigrateCommand - コマンドのプロパティ(classpathDir)には値(/home/hironemu/apps/eclipse/workspace/sample/target/classes)が設定されています。 [migrate] 2009-06-27 17:46:42,586 [main] DEBUG org.seasar.extension.jdbc.gen.internal.command.MigrateCommand - コマンドのプロパティ(rootPackageName)には値(jp.co.example)が設定されています。 [migrate] 2009-06-27 17:46:42,586 [main] DEBUG org.seasar.extension.jdbc.gen.internal.command.MigrateCommand - コマンドのプロパティ(entityPackageName)には値(entity)が設定されています。 [migrate] 2009-06-27 17:46:42,586 [main] DEBUG org.seasar.extension.jdbc.gen.internal.command.MigrateCommand - コマンドのプロパティ(entityClassNamePattern)には値(.*)が設定されています。 [migrate] 2009-06-27 17:46:42,587 [main] DEBUG org.seasar.extension.jdbc.gen.internal.command.MigrateCommand - コマンドのプロパティ(ignoreEntityClassNamePattern)には値()が設定されています。 [migrate] 2009-06-27 17:46:42,587 [main] DEBUG org.seasar.extension.jdbc.gen.internal.command.MigrateCommand - コマンドのプロパティ(dumpFileEncoding)には値(UTF-8)が設定されています。 [migrate] 2009-06-27 17:46:42,589 [main] DEBUG org.seasar.extension.jdbc.gen.internal.command.MigrateCommand - コマンドのプロパティ(loadBatchSize)には値(10)が設定されています。 [migrate] 2009-06-27 17:46:42,590 [main] DEBUG org.seasar.extension.jdbc.gen.internal.command.MigrateCommand - コマンドのプロパティ(transactional)には値(false)が設定されています。 [migrate] 2009-06-27 17:46:42,590 [main] DEBUG org.seasar.extension.jdbc.gen.internal.command.MigrateCommand - コマンドのプロパティ(genDialectClassName)には値(null)が設定されています。 [migrate] 2009-06-27 17:46:42,590 [main] DEBUG org.seasar.extension.jdbc.gen.internal.command.MigrateCommand - コマンドのプロパティ(applyEnvToVersion)には値(true)が設定されています。 [migrate] 2009-06-27 17:46:42,590 [main] DEBUG org.seasar.extension.jdbc.gen.internal.command.MigrateCommand - コマンドのプロパティ(configPath)には値(s2jdbc.dicon)が設定されています。 [migrate] 2009-06-27 17:46:42,591 [main] DEBUG org.seasar.extension.jdbc.gen.internal.command.MigrateCommand - コマンドのプロパティ(env)には値(ut)が設定されています。 [migrate] 2009-06-27 17:46:42,591 [main] DEBUG org.seasar.extension.jdbc.gen.internal.command.MigrateCommand - コマンドのプロパティ(jdbcManagerName)には値(jdbcManager)が設定されています。 [migrate] 2009-06-27 17:46:42,591 [main] DEBUG org.seasar.extension.jdbc.gen.internal.command.MigrateCommand - コマンドのプロパティ(factoryClassName)には値(org.seasar.extension.jdbc.gen.internal.factory.FactoryImpl)が設定されています。 [migrate] 2009-06-27 17:46:42,617 [main] DEBUG org.seasar.framework.env.Env - 環境変数#Envにファイル(env.txt)から値(ct)が設定されました [migrate] 2009-06-27 17:46:42,865 [main] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=warmdeploy.dicon [migrate] 2009-06-27 17:46:42,875 [main] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=convention.dicon [migrate] 2009-06-27 17:46:43,029 [main] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=convention.dicon [migrate] 2009-06-27 17:46:43,031 [main] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=customizer.dicon [migrate] 2009-06-27 17:46:43,037 [main] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=default-customizer.dicon [migrate] 2009-06-27 17:46:43,050 [main] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=std-customizer.dicon [migrate] 2009-06-27 17:46:43,192 [main] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=std-customizer.dicon [migrate] 2009-06-27 17:46:43,203 [main] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=default-customizer.dicon [migrate] 2009-06-27 17:46:43,205 [main] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=customizer.dicon [migrate] 2009-06-27 17:46:43,211 [main] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=creator.dicon [migrate] 2009-06-27 17:46:43,277 [main] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=creator.dicon [migrate] 2009-06-27 17:46:43,319 [main] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=warmdeploy.dicon [migrate] 2009-06-27 17:46:43,376 [main] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=s2jdbc.dicon [migrate] 2009-06-27 17:46:43,408 [main] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=jdbc.dicon [migrate] 2009-06-27 17:46:43,437 [main] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=jta.dicon [migrate] 2009-06-27 17:46:43,476 [main] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=jta.dicon [migrate] 2009-06-27 17:46:43,570 [main] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=jdbc.dicon [migrate] 2009-06-27 17:46:43,576 [main] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=s2jdbc-internal.dicon [migrate] 2009-06-27 17:46:43,588 [main] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=convention.dicon [migrate] 2009-06-27 17:46:43,596 [main] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=convention.dicon [migrate] 2009-06-27 17:46:43,607 [main] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=s2jdbc-internal.dicon [migrate] 2009-06-27 17:46:43,697 [main] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=s2jdbc.dicon [migrate] 2009-06-27 17:46:43,930 [main] INFO org.seasar.framework.container.factory.SingletonS2ContainerFactory - Running on [ENV]ut, [DEPLOY MODE]Warm Deploy [migrate] 2009-06-27 17:46:44,129 [main] DEBUG org.seasar.extension.dbcp.impl.ConnectionPoolImpl - 物理的なコネクションを取得しました [migrate] 2009-06-27 17:46:44,130 [main] DEBUG org.seasar.extension.dbcp.impl.ConnectionPoolImpl - 論理的なコネクションを取得しました。tx=null [migrate] 2009-06-27 17:46:44,151 [main] DEBUG org.seasar.extension.dbcp.impl.ConnectionWrapperImpl - 論理的なコネクションを閉じました。tx=null [migrate] 2009-06-27 17:46:44,153 [main] DEBUG org.seasar.extension.jdbc.gen.internal.command.MigrateCommand - RDBMS(PostgreSQL)に対しS2JDBC-Gen用のデータベースの方言(org.seasar.extension.jdbc.gen.internal.dialect.PostgreGenDialect)を使用します。 [migrate] 2009-06-27 17:46:44,216 [main] DEBUG org.seasar.extension.dbcp.impl.ConnectionPoolImpl - 論理的なコネクションを取得しました。tx=null [migrate] 2009-06-27 17:46:44,217 [main] DEBUG org.seasar.extension.jdbc.gen.internal.version.SchemaInfoTableImpl - select VERSION from SCHEMA_INFO [migrate] 2009-06-27 17:46:44,290 [main] DEBUG org.seasar.extension.dbcp.impl.ConnectionWrapperImpl - 論理的なコネクションを閉じました。tx=null [migrate] 2009-06-27 17:46:44,291 [main] DEBUG org.seasar.extension.dbcp.impl.ConnectionPoolImpl - 論理的なコネクションを取得しました。tx=null [migrate] 2009-06-27 17:46:44,291 [main] DEBUG org.seasar.extension.jdbc.gen.internal.version.SchemaInfoTableImpl - select VERSION from SCHEMA_INFO [migrate] 2009-06-27 17:46:44,293 [main] DEBUG org.seasar.extension.dbcp.impl.ConnectionWrapperImpl - 論理的なコネクションを閉じました。tx=null [migrate] 2009-06-27 17:46:44,301 [main] INFO org.seasar.extension.jdbc.gen.internal.version.MigraterImpl - バージョン番号 1 から 1 へのマイグレーションを行います。 [migrate] 2009-06-27 17:46:44,313 [main] DEBUG org.seasar.extension.dbcp.impl.ConnectionPoolImpl - 論理的なコネクションを取得しました。tx=null [migrate] 2009-06-27 17:46:44,313 [main] DEBUG org.seasar.extension.jdbc.gen.internal.sql.SqlFileExecutorImpl - SQLファイル(/home/hironemu/apps/eclipse/workspace/sample/db/migrate/0001/drop/040-table/users.sql)を実行します。 [migrate] 2009-06-27 17:46:44,338 [main] DEBUG org.seasar.extension.jdbc.gen.internal.sql.SqlFileExecutorImpl - drop table USERS [migrate] 2009-06-27 17:46:44,353 [main] DEBUG org.seasar.extension.jdbc.gen.internal.sql.SqlFileExecutorImpl - SQLファイル(/home/hironemu/apps/eclipse/workspace/sample/db/migrate/0001/drop/040-table/users.sql)を実行しました。 [migrate] 2009-06-27 17:46:44,360 [main] DEBUG org.seasar.extension.dbcp.impl.ConnectionPoolImpl - 物理的なコネクションを取得しました [migrate] 2009-06-27 17:46:44,360 [main] DEBUG org.seasar.extension.dbcp.impl.ConnectionPoolImpl - 論理的なコネクションを取得しました。tx=null [migrate] 2009-06-27 17:46:44,360 [main] DEBUG org.seasar.extension.jdbc.gen.internal.version.SchemaInfoTableImpl - select VERSION from SCHEMA_INFO [migrate] 2009-06-27 17:46:44,362 [main] DEBUG org.seasar.extension.dbcp.impl.ConnectionWrapperImpl - 論理的なコネクションを閉じました。tx=null [migrate] 2009-06-27 17:46:44,362 [main] DEBUG org.seasar.extension.dbcp.impl.ConnectionPoolImpl - 論理的なコネクションを取得しました。tx=null [migrate] 2009-06-27 17:46:44,363 [main] DEBUG org.seasar.extension.jdbc.gen.internal.version.SchemaInfoTableImpl - delete from SCHEMA_INFO [migrate] 2009-06-27 17:46:44,364 [main] DEBUG org.seasar.extension.jdbc.gen.internal.version.SchemaInfoTableImpl - insert into SCHEMA_INFO (VERSION) values (1) [migrate] 2009-06-27 17:46:44,370 [main] DEBUG org.seasar.extension.dbcp.impl.ConnectionWrapperImpl - 論理的なコネクションを閉じました。tx=null [migrate] 2009-06-27 17:46:44,371 [main] DEBUG org.seasar.extension.jdbc.gen.internal.data.LoaderImpl - ダンプファイル(/home/hironemu/apps/eclipse/workspace/sample/db/migrate/0001#ut/create/040-dump/users.csv)をテーブル(USERS)にロードします。 [migrate] 2009-06-27 17:46:44,386 [main] DEBUG org.seasar.extension.jdbc.gen.internal.data.LoaderImpl - テーブル(USERS)が見つかりませんでした。 [migrate] 2009-06-27 17:46:44,387 [main] DEBUG org.seasar.extension.dbcp.impl.ConnectionWrapperImpl - 論理的なコネクションを閉じました。tx=null [migrate] 2009-06-27 17:46:44,387 [main] DEBUG org.seasar.extension.dbcp.impl.ConnectionPoolImpl - 論理的なコネクションを取得しました。tx=null [migrate] 2009-06-27 17:46:44,388 [main] DEBUG org.seasar.extension.jdbc.gen.internal.data.LoaderImpl - ダンプファイル(/home/hironemu/apps/eclipse/workspace/sample/db/migrate/0001#ut/create/040-dump/users.csv)をテーブル(USERS)にロードしました。[3 件] [migrate] 2009-06-27 17:46:44,388 [main] DEBUG org.seasar.extension.jdbc.gen.internal.sql.SqlFileExecutorImpl - SQLファイル(/home/hironemu/apps/eclipse/workspace/sample/db/migrate/0001/create/010-table/users.sql)を実行します。 [migrate] 2009-06-27 17:46:44,389 [main] DEBUG org.seasar.extension.jdbc.gen.internal.sql.SqlFileExecutorImpl - create table USERS ( ID integer not null, NAME varchar(20) not null, KANA varchar(30), EMAIL varchar(255), UNIT_ID integer, constraint USERS_PK primary key(ID) ) [migrate] 2009-06-27 17:46:44,430 [main] DEBUG org.seasar.extension.jdbc.gen.internal.sql.SqlFileExecutorImpl - SQLファイル(/home/hironemu/apps/eclipse/workspace/sample/db/migrate/0001/create/010-table/users.sql)を実行しました。 [migrate] 2009-06-27 17:46:44,431 [main] DEBUG org.seasar.extension.dbcp.impl.ConnectionWrapperImpl - 論理的なコネクションを閉じました。tx=null [migrate] 2009-06-27 17:46:44,432 [main] INFO org.seasar.extension.jdbc.gen.internal.version.MigraterImpl - バージョン番号 1 から 1 へのマイグレーションを行いました。 [migrate] 2009-06-27 17:46:44,434 [main] DEBUG org.seasar.extension.dbcp.impl.ConnectionWrapperImpl - 物理的なコネクションを閉じました [migrate] 2009-06-27 17:46:44,435 [main] DEBUG org.seasar.extension.dbcp.impl.ConnectionWrapperImpl - 物理的なコネクションを閉じました [migrate] 2009-06-27 17:46:44,439 [main] DEBUG org.seasar.extension.jdbc.gen.internal.command.MigrateCommand - コマンド(org.seasar.extension.jdbc.gen.internal.command.MigrateCommand)を実行しました。 BUILD SUCCESSFUL Total time: 3 seconds
追記
id:taediumさんにご対応いただき上記問題は解決しました。現在のところ以下のURLにあるJarが対応しているみたいです。このバージョンを使うと上記の問題は発生しなくなったのを確認。
http://maven.seasar.org/maven2-snapshot/org/seasar/container/s2jdbc-gen/2.4.39-SNAPSHOT/s2jdbc-gen-2.4.39-20090628.125916-1.jar