質問

OSGiに変換しようとしているプロジェクトがあります。ただし、このプロジェクトは、Guiceを依存関係注入マネージャーとして構築されています。全体にGuiceが織り込まれた大規模なプロジェクトです。 Guiceは、変換プロセスに多くの適合性を与えてくれました。具体的には、com.google.inject.internal.cglib.reflect.FastClassのNoClassDefFoundErrorが与えられました。何もパッケージプライベートではないことを確認し、guice-2.0-customloader.jarもダウンロードして使用しました。それでも、役に立たない。

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

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

役に立ちましたか?

解決

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

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

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

他のヒント

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

package-privateに関するコメントは、ガイドとブリッジングクラスローダー

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

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

Issue 343の最新のパッチを試すことができます。 -最新のGuiceトランクにこのパッチを1つ加えた、パッチを当てたばかりのビルドを添付したので、ユーザーはそれを試してフィードバックを提供できます。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top