2012-02-08 3 views
0

私が現在使っているアプリケーションは、MySQLデータベースを使用しています。アプリケーションのアーキテクチャを変更して、XML形式のデータを処理する予定です。したがって、アプリケーションのオブジェクトモデルはXMLスキーマによって駆動されます。これで、JAXBなどのツールを使用してXML解析を行い、メモリ内にオブジェクト構造を作成できます。 私が見ている主な問題は次のとおりです。 -XMLベースのモデリングを使用してアプリケーションでデータベーススキーマを管理するための戦略

  1. オブジェクト構造をリレーショナルデータベースにマップする方法。ここではHibernateを使用することができます。
  2. もう1つの問題は、XMLスキーマが定期的に変更され、以前のバージョンのスキーマをサポートする必要があることです。

スキーマのバージョン数が増えるにつれて、データベーススキーマが非常に簡単に多くのテーブルで肥大化する可能性があるため、アイテム2を処理する最善の方法はわかりません。

私の主な質問は、オブジェクトモデリングの観点とデータベーススキーマの観点の両方から、そのようなバージョンの変更を管理するための最善の戦略は何ですか?

+0

あなたはmySQLに縛られていますか? – DaveH

+0

はい。アーキテクチャの変更は進化的なものなので、既存のプロセスをサポートする必要があります。 XMLやオブジェクトベースのデータベースを使用する必要があると思いますか? –

+0

おそらく、dbスキーマ定義で継承をサポートするPostgresのようなものかもしれません。スキーマへの変更が比較的少なく、主に自然に追加されたものであれば、何らかの助けとなるかもしれません。私はこのようにPostgresを使用する経験は全くないと言わざるを得ない。 – DaveH

答えて

0

ソリューションは、次のようになります。

スキーマを豊かに保つが、JAXBは、あなたのオブジェクトに最も古く、最新のスキーマに基づくXMLを解析してマッピングすることができるようにしてください、それは以前のスキーマとの下位互換性があることを確認してください。これは、マップする古いエンティティと互換性のあるスキーマを持つために、再度同じターゲットを使用してデータベーススキーマを変更することを意味します。また、スキーマの名前空間などは、JAXBが動作するすべてのバージョンで同じである必要があります。 null可能な列などがたくさんあると思いますが、それは将来的には危険ですが、正しく実行されるとうまくいく可能性があります。スキーマの変更は、常に私はJAXBを飛ばし示唆しているので

ああ、今私はあなたのコメントを編集し、私はので、より多くの情報を与えていることがわかります。 JAXBは、この種の絶え間ない変更のために作られていません。 Smooks(あなたのEclipseにJBoss Toolsプラグインをインストールする)はです。これにより、Hibernateエンティティークラスに対するスキーマベースのXMLの異なるバージョンごとに異なるマッピング定義を定義することができます。このようにして、Smooksマッピング、Hibernateエンティティクラス、およびデータベーススキーマを維持します。そこには構造変化と、それは進化のようにする方法があるが、あなたが参照整合性を犠牲にしなければならないデータベーススキーマについては...私は多くのソリューションは、あなたの問題

+0

申し訳ありませんが、私の言葉はやや誤解を招いていました。 XMLスキーマには多くのバージョンが存在します。したがって、問題は実際には多くのバージョンのスキーマとデータベースへの影響に対処することです。 Smooksへのリンクをありがとうございました。以前は使用されていませんでした。 –

+0

スキーマに対してXMLを検証するコンポーネントがあるので、特定のスキーマのXMLをHibernateオブジェクトにマップするために使用するSmooksマッピング定義を区別できることを意味します。データベースはすべてのスキーマを満足させるために構造的に更新する必要があります。これは、Hibernateクラスも構造的に影響を受けることを意味します。これはもちろんダウンタイムを意味します。これにより、スキーマごとに新しいクラスセットを用意することになるため、JAXBを避けることがより明確になります。これは、VM用に読み込むクラス定義が増えることを意味します。 – DaTroop

0

の発展性にあるとし

をwouldntのXMLスキーマとは、JAXBを使用すると、スキーマが変更されるたびに新しいバッチのクラスを静的に生成することを意味するため、JAXBの使用はスケーラブルではありません。すべての以前のバージョンのスキーマは、システムによってサポートされている必要があります。

XSOMを使用してXMLスキーマを解析することにしました。これは、正しいスキーマバージョンを実行時に動的に選択して処理できることを意味します。そこで、スキーマを解析し、適切なクラスをインスタンス化する一般的な方法を構築することができます。