2

OSGi に変換しようとしているプロジェクトがあります。ただし、このプロジェクトは依存性注入マネージャーとして Guice を使用してビルドされています。全体に Guice が織り込まれた大規模なプロジェクトです。Guice は、変換プロセスに多くの適合性を与えてくれました。具体的には、com.google.inject.internal.cglib.reflect.FastClass に対して NoClassDefFoundError が返されました。package-private がないことを確認し、guice-2.0-customloader.jar もダウンロードして使用しました。それでも、無駄に。

この道を進んだ人からのアドバイスはありますか? 私は peaberry を使用して OSGi 環境 (プラグイン タイプのアーキテクチャ用) から動的サービスを取得し、後でプログラムで使用することに言及する価値があります。

どうもありがとう、スティーブ

4

4 に答える 4

4

Peaberryを使用するだけです。OSGi で Guice を使用するために必要なすべてのサポートが含まれています。すべてをゼロから作り直す必要はありません。

于 2009-11-12T11:23:20.020 に答える
4

問題が何であるかを正確に言うのは難しいですが、クラスローダーの問題は OSGi の状況に非常に特有であり、デバッグが難しい場合があります。

Guice が本当にアプリケーションのコアである場合は、それをシステム バンドルのフラグメント バンドルにするのが理にかなっているかもしれません。システム バンドルは、すべてのバンドルのクラスローダー ツリーのルート ノードです。クラスがこのバンドルに存在する場合、どこからでもアクセスできます。これは、Swing LAF (Substance、Alloy、Jide) を OSGi バンドルとしてラップするために私が成功裏に使用した手法です。私のバンドルはすべて Swing (特に Swing クラスローダ) を使用しているため、それらはルート レベルにある必要があります。

フラグメント バンドルを作成し、そのフラグメント バンドルをフレームワーク拡張フラグメントにするための OSGi 仕様を確認する必要があります。これは、Eclipse の Equinox ランタイムを使用してのみ行うことができました。サポートするクラスのほとんどを作成した時点では、Apache Felix はフレームワーク拡張フラグメントをまだサポートしていませんでした。今は変わっているかもしれません。フレームワーク(knopplefish、spring-dm)についてはわかりません

于 2009-11-01T16:03:16.447 に答える
1

package-privateに関するあなたのコメントは、Guiceとブリッジングクラスローダーのこのページに関連していると思いますか?

問題に関連している可能性のあるバグレポート/パッチがあります:http ://code.google.com/p/google-guice/issues/detail?id = 343

Guiceとcglibを標準のクラスパスに追加して、それらのブート委任を実行してみましたか?それはあなたの問題が上記のバグレポートで言及されたものと同じであることを証明/反証します。

于 2009-11-01T15:51:18.903 に答える
0

Issue 343に対する私の最新のパッチを試すことができます- 最新の Guice トランクとこの 1 つのパッチであるパッチを適用したばかりのビルドを添付するだけなので、人々はそれを試してフィードバックを与えることができます。

最新のパッチは、クラスを公開することを強制することなく、これらの CGLIB 例外の多くを回避し、これがまだ必要ないくつかの残りの場所 (基本的にメソッド インターセプトを明示的に使用する場合) でより良いエラー メッセージを提供します。

于 2009-11-16T18:16:01.100 に答える