0

アプリが起動するたびに Hibernate が新しい空のデータベースを作成するように、開発環境をセットアップしました。

<property name="hibernate.hbm2ddl.auto" value="create-drop"/>

これは、サーバーにデプロイされた単一のアプリに対して機能しますが、開発環境では、通常、同じデータベースに接続する複数のアプリケーションをデプロイします。どちらもアプリ サーバーから同じデータソースを使用します。

問題は、それらが JBoss AS7 で起動すると、並行してデプロイされるため、両方のアプリ サーバーが同時にテーブルを作成しようとすることです。次のようなものを取得します (匿名化されたテーブルと列名を使用):

16:07:25,307 エラー [org.hibernate.tool.hbm2ddl.SchemaExport] (MSC サービス スレッド 1-13) 失敗: テーブル PUBLIC.SOME_TABLE の作成 (SOME_COLUMN varchar(32) が null でない、SOME_OTHER_COLUMN char が null でない、主キー (SOME_COLUMN) )))
16:07:25,346 エラー [org.hibernate.tool.hbm2ddl.SchemaExport] (MSC サービス スレッド 1-13) テーブル "SOME_TABLE" は既に存在します。SQL ステートメント:
create table PUBLIC.SOME_TABLE (SOME_COLUMN varchar(32) not null, SOME_OTHER_COLUMN char not null, 主キー (SOME_COLUMN)) [42101-161]

これらのエラーは無視され、サーバーは最終的に起動しますが、この問題を回避する方法があれば教えてください。create-drop を実行し、他のアプリを強制的に待機させるためだけにデプロイするアプリを作成することについて話しましたが、JBoss のデプロイ スキャナーを変更してアプリを並列ではなく連続してデプロイすることがどれほど難しいかはわかりません。私たちは他のアイデアにもオープンです。

4

1 に答える 1

0

開発環境では、デプロイされた各アプリに独自のデータベース スキーマが必要です。これは問題を解決するだけでなく、次の問題も解決します。

  • 2 人の開発者がいくつかのテストを実行しており、そのうちの 1 人が最初の開発者が使用したデータを変更したために失敗しました。
  • 1 人の開発者がスキーマの変更を必要とする進化を開発しており、もう 1 人の開発者が現在のスキーマのバグを修正しています。

そして、問題を引き起こすシナリオは他にもたくさんあると確信しています。各開発者に独自のスキーマを持たせると、すべてがはるかに簡単になります。

于 2012-05-04T22:16:52.397 に答える