複数のデータベース ベンダーのサポートを利用した Java/Maven/JPA/Hibernate ビルドの最適なアプローチは?
質問
単一のデータベースを使用するエンタープライズ アプリケーションがありますが、アプリケーションは以下をサポートする必要があります。 mysql, オラクル, 、 そして SQLサーバー インストールオプションとして。
をしようとすること ポータブルなまま 私たちは使っています JPA アノテーション と 休止状態 実装として。また、開発のために実行されている各データベースのテストベッド インスタンスもあります。
アプリは順調に構築されています メイビン で遊んでみました hibernate3-maven-プラグイン また、特定のデータベース言語の DDL を自動生成できます。
個々の開発者が 3 つのデータベースすべてに対して簡単にテストでき、Hudson ベースの CI サーバーが適切に構築できるようにするには、これに取り組む最善の方法は何でしょうか。
すなわち:
私は思った hbm2ddl でのゴール hibernate3-maven-プラグイン スキーマファイルを生成するだけですが、 しかし、どうやらライブデータベースに接続してスキーマを作成しようとしているようです. 。これを得る方法はありますか スキーマファイルを作成するだけです データベース方言ごとに それなし データベースに接続していますか?
もし hibernate3-maven-プラグイン 実際にデータベース スキーマを作成するよう要求されていますが、スキーマを作成する前にデータベースを削除して再作成する方法はありますか?
私は、各開発者 (および Hudson ビルド マシン) が各データベース サーバー上に独自の個別のデータベースを持つべきだと考えています。これは典型的なことでしょうか?
開発者は Maven を 3 回実行する必要があるでしょうか...各データベースベンダーごとに 1 回ずつ?その場合、ビルド マシン上で結果をマージするにはどうすればよいですか?
があります hbm2doc hibernate3-maven-plugin 内の目標。これを 3 回実行するのはやりすぎのように思えます...各データベースでほぼ同一であると信じなければなりません。
解決
1)これはただのデータベースに接続することなく、各データベースの方言のためのスキーマファイルを作成してもらう方法はありますか?
export
に設定false
。このような何かます:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>hibernate3-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<components>
<component>
<name>hbm2ddl</name>
<implementation>annotationconfiguration</implementation>
</component>
</components>
<componentProperties>
<export>false</export><!-- do not export to the database -->
<drop>true</drop>
<configurationfile>src/main/resources/hibernate.cfg.xml</configurationfile>
<outputfilename>my_schema.ddl</outputfilename>
</componentProperties>
</configuration>
</plugin>
2)のHibernate3-Mavenのプラグは、実際にデータベーススキーマを作成する上で主張した場合、それはデータベースを削除し、スキーマを作成する前にそれを再作成持っている方法はありますか?
上記を参照してください。しかし、念のため、update
にこのセットtrue
ためます:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>hibernate3-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<components>
<component>
<name>hbm2ddl</name>
<implementation>annotationconfiguration</implementation>
</component>
</components>
<componentProperties>
<export>true</export>
<update>true</update><!-- update the schema -->
<drop>true</drop>
<configurationfile>src/main/resources/hibernate.cfg.xml</configurationfile>
<outputfilename>my_schema.ddl</outputfilename>
</componentProperties>
</configuration>
<dependencies>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derbyclient</artifactId>
<version>10.5.3.0_1</version>
</dependency>
</dependencies>
</plugin>
3)私は、各開発者(およびハドソンのビルドマシンが)それぞれのデータベース・サーバ上の自分の別のデータベースを持っているべきであると考えています。これは典型的ですか?
はい、私は、開発者ごとのデータベース・インスタンス使用を参照してください(ベストプラクティスとしてこれを考えます>)。
4)開発者は、一度、各データベースベンダーのために... Mavenの3回実行する必要がありますか?もしそうなら、どのように私は、ビルドマシン上で結果をマージしますか?
はい、非常に可能性が高いと私は、各データベースのプロファイルを使用します。ビルドマシン上で、私は 。
5)Hibernate3の-のMavenプラグイン内-hbm2docの目標があります。私がそれは、データベースごとにほぼ同じだろうと信じなきゃ...この3回を実行するためにやり過ぎと思われる。
私は、このツールに慣れていないが、私は(例えば、主キーの生成と)出力のいくつかの小さな変動があるかもしれませんね。私は、各データベースのスキーマドキュメントを生成するだろうが、リリース時にのみ(各ビルドであることを実行する必要は確かにありません)。