2011-08-10 37 views
0

私は現在、(マルチテナントサポートのために)クラスの異なるバージョンを同時に使用できるJavaアプリケーションを開発中です。私はこれを管理するための良いアプローチがあるのだろうかと疑問に思っていましたか?私の基本的なアプローチは、Carを言うことができ、CarV1、CarV2などの異なるバージョンを実装することです。すべてのバージョンが独自のクラスを取得します。同じアプリケーションで異なるバージョンのクラスを使用するにはどうすればよいですか?

私のアプローチは一種のものだと思います。しかし、私はこの話題に関する文学は見つけられませんでしたが、私は実際に何を検索すべきか分かりません。

答えて

2

インターフェイスの考え方は賢明です。外部入力に応じて、必要な実装インスタンスを生成できるファクトリ、たとえば、 g。テナントID。アプリケーションの実行中のインスタンスで複数のテナントをサポートする必要がない場合は、JDKのServiceLocatorのようなものを使用して、ファイルベースの設定方法を使用することもできます。

アプリケーションサーバーで実行している場合は、複数のインスタンスを起動し、それぞれ別のクライアント用に構成することを検討してください。サーバーは次にインスタンスの分離を処理します。

それ以外の場合は、Java EE以外のアプリケーションで複数の実装が同時に(実行時に)必要になると考えると、これは難しい問題です。クラスの複数のバージョンを持つための機能を提供するOSGiコンテナを見てみたいと思うかもしれません。しかし、このようなアプローチでは、それに精通していなければ、かなり複雑になります。

+1

CDIコンテナの下で実行されている場合、リソースには修飾子を挿入できます。プロデューサのメソッドに加えて、これにより、単一のアプリケーションインスタンスが代替実装の実行時選択でマルチテナントの動作をサポートできるようになります。 –

+0

良い点!自分で工場を書くのではなく、これはおそらくもっと良いでしょう。 –

0

理論的には、JBossのような複数のクラスローダーを使用してこれを処理できます。

しかし、私はあなた自身でこれを実装することを強くお勧めします。これはかなり複雑な問題であり、簡単に間違っています。 Webアプリケーションについて話している場合は、代わりにテナントごとに1つのWebアプリケーションインスタンスを作成できます。スタンドアロンのアプリケーションで作業している場合は、テナントごとに1つのインスタンスを実行することが可能かどうかをチェックする必要があります。

関連する問題