1

OSGiアプリケーションがあります。各OSGiモジュールは、いくつかのビジネスロジックとデータモデルで構成されています。新しいモジュールを初めて起動するたびに、スキーマの進化を行うことを計画しています。前述したように、各モジュールには、アプリケーションのコアデータモデルを拡張するデータモデルが含まれています。したがって、新しいモジュールを開始する前に、いくつかの新しいテーブルを作成する必要があります。

私が考えることができる唯一の解決策は、エクステンダーパターンです。言い換えるとdb-schema-extender、の実装を待機するというモジュールがありますDbSchemaEvolutionService。このサービスの実装は、アプリケーションのコアデータモデルを拡張することをいとわない各モジュールによって提供されます。このような実装がOSGiサービスレジストリで要求されると、はメソッドをdb-schema-extender呼び出し DbSchemaEvolutionService.getEntities()てエンティティのリストを取得し、次にdb-schema-extenderを実行しschemaExport(List<Object> entities)て新しいモジュールに必要なテーブルを作成します。

同様の問題の経験はありますか?

あなたの解決策は何でしたか?

私が提案した解決策についてどう思いますか?

4

1 に答える 1

2

私はあなたと同じような問題を経験しています。あなたの解決策はうまくいくと思いますが、もっと良い解決策があるかどうかはわかりません。私の解決策は少し異なります。サービスDbSchemaEvolutionServiceを使用するのではなく、このバンドルに含まれるすべてのエンティティを一覧表示する新しいヘッダーをMANIFESTファイルに追加します。あなたのようなモジュールdb-schema-extenderは、バンドルの開始イベントと停止イベントをリッスンして、これらのエンティティを管理エンティティに追加したり、管理エンティティから削除したりします。

于 2012-05-18T11:19:55.890 に答える