0

エンタープライズ金融 Web アプリケーション ソフトウェアを実装しています。春、休止状態、オラクル (DB)、JSF を使用しています。要件はソフトウェアのメンテナンス フェーズで変化しており、以前のバージョンのソフトウェアとの互換性のために、いくつかのエンティティ (マネージャー、フォームなどのクラスも含む) の複数のバージョンを同時に持つ必要があります。このクラスの変更には、フィールドの追加と削除、フィールドの変更、クラスの追加と削除などがあります。一般に、この問題は複数のバージョンのソフトウェアを同時に実行している場合に発生します。この問題の解決策を見つけるのを手伝ってください。

説明:

この問題は、ソフトウェア製品ラインの「時間の変動」と似ています (詳細については、 elsner_vamos2010を参照してください)。これは、1 つのクラスの複数のバージョンが同時に存在する可能性があり、(または日付) パラメータを持つクラスを取得する必要があることを意味します。その日のプログラムの状態との互換性のため、各日付で 1 つのバージョンのクラスを使用する必要があります。XMLファイルを使用してBeanクラスでこの問題を解決し、日付でクラスのバージョンを取得します。したがって、プログラムは、プログラムのこの状態 (他のエンティティの日付) に対してどの Bean を実行する必要があるかを認識しています。

しかし、エンティティ、jsp、フォームなど、Spring の他のオブジェクト タイプについては解決できませんか?

4

4 に答える 4

1

OSGiを調べましたか? これが提供する機能の 1 つは、異なるクライアント クラスが、依存するクラスの異なるバージョンに同時にアクセスできることです。私自身は使っていませんが、とにかくそれが私がそれを理解している方法です。

于 2011-09-21T13:29:55.110 に答える
1

プロジェクトのさまざまなバージョンをさまざまな WAR/EAR にデプロイできます。この場合、コンテナはそれらを自動的に処理します。各 war は独自のクラスローダーでロードされるため、同じクラス (パッケージとクラス名) の異なるバージョンが交差することはありません。このオプションで十分ですか?

于 2011-09-21T11:24:08.473 に答える
0

これがあなたのケースで実行可能かどうかを判断するのは難しいですが、私はクラスローダーをいじくり回さないように一生懸命努力します。それ自体が難しい領域であり、WebAppServerはクラスローダーでも独自のことを行う傾向があります。

同じサーバーでホストされ、データベースを介して通信する2つの別個のWebアプリケーションを作成しようとします(とにかくアプリ用に1つあると仮定します)

于 2011-09-21T11:25:18.450 に答える
0

Jens Schauderのアドバイスを受けて、面白いクラスローディングの改ざんを避けてください。

アプリケーションが複数のバージョンにわたってサポートする必要のあるWebサービス、EJB、または同様のインターフェースについて話している場合、おそらく、Vn-x要求と応答をVn要求と応答(nは最新バージョン)。これはマッピング、単純な関数、または集計(XSLTまたはXQuery処理を考えてください)のみを使用して1つのメッセージを別のメッセージに変換でき、要求間で状態を保持する必要がない場合です。どんなまともなサービスバスでもそれをするでしょう。

ステートレス変換が実行できない場合は、VnバージョンがVn、Vn-1、Vn-2...APIをサポートするようにコードを開発/適合させることができます。同じシグニチャを持つ操作/メソッドを明確にするために、バージョンファサードを使用する必要がある場合があります(v1putXはv2putXとは異なる動作をする場合があります)。これにより、それぞれのバージョンのファサードで維持しながら、Vnコードで実装名を変更できます。明らかに、外部システムはファサードのみを認識します。

これができない場合は、さまざまなアプリケーションを個別にデプロイしてください。

最後に、スキーマ。

最後のバージョンが以前のAPIをサポートするアプローチを採用する場合、データベースにアクセスするのはアプリケーションVnのみです。スキーマをニーズに適合させ、古いスキーマバージョンが存在する場合はデータを移行する必要があります。終わり。

そうでない場合は、アプリケーションのいくつかのバージョンが実行され、DBにアクセスしています。この場合、DBの「具象スキーマ」でさまざまな「論理スキーマ」をサポートする必要があります。データベースのリファクタリングについては、この本を参照してください。これには、スキーマがトリガー、ビュー、シノニムなどの巧妙な使用を通じてアプリケーションの複数のバージョンとの相互作用をサポートするいくつかの手法の使用が含まれます。これはトリッキーに見えますが、非常に実行可能です。

于 2011-09-21T18:56:31.797 に答える