2012-03-12 5 views
0

2つの異なるバージョンのAPIと互換性のある方法で、サードパーティのJARでJavaメソッドを呼び出す必要があります。JAVAのライブラリバージョン間の変更に対して安全な方法でAPIメソッドを呼び出す

新しいバージョンでは1つの追加パラメータがあるため、違いはありませんが、私のアプリが両方のバージョンのライブラリで動作しコンパイルされていることを確認する必要があります。

私が来た最善の選択肢は、リフレクションを使ってさまざまなメソッドのバージョンを確認し、実行時に正しいものを呼び出すことですが、よりエレガントな方法があればさまよっていました。サードパーティライブラリ。

おかげ

答えて

1

あなたのコードは、事前にリンクされる第三者のライブラリのどのバージョンを知って場合は、両方のAPIのバージョンに共通のインターフェースを提供するために、個別に小さなラッパーライブラリを持つことができます。

もしあなたがその能力を持っていなければ、おそらくリフレクションが必要です。プロジェクトとそのビルドシステムがどのようにセットアップされているかによって、サードパーティライブラリのAPIバージョンが検出された後に実行時にロードされるアダプタクラスをいくつか使用することさえできるかもしれません。この方法では、リフレクション・メソッド呼び出しに伴うパフォーマンスへの影響はありません。

つまり、適切なデプロイメントフレームワーク(OSGiなど)を使用して、そのような依存関係の問題を扱うことができます。

+0

@RaffaeleCastagno:はい、ただし、アプリケーションの各コピーにはどのバージョンが付属しているのですか? – thkala

+0

私は現在、正確に2つのバージョンのライブラリを持っています。 mavenなどで依存関係管理を導入することはオプションではないので、時間がかかりすぎる(アプリケーション全体がかなり大きい)。 私の問題は、ライブラリプロバイダが最新のパッチでいくつかの変更を導入したことです。現在、顧客システムには2つの異なるバージョンがインストールされています。 リフレクションの方法に進む前に、ラッパーを試してみます。とにかくありがとう。 –

+0

申し訳ありません@thkala私はあなたの前に私のコメントを書き直しました。 答えははいです:関連するライブラリはカスタマイズされたアプリケーションコンテナの一部ですので、使用するバージョンを正確に知っています。最後の手段として、ビルド時にいくつかのパラメトリックな処理ができるはずです。時間。とにかく、私が書いたように、私はちょうど私がどのように変化するライブラリのためのラッパーを実装できるかについていくつかの考えを持っていました。明日テストします。 –

関連する問題