2009-09-01 12 views
2

私はbndを使ってOSGIバンドルに変換したサードパーティのJARを持っています。 - 静的メソッド呼び出しに私の問題を引き起こしているように見える何OSGI - バンドル間の静的メソッド呼び出し

ThirdParty.setRegKey(myRegKey); 
ThirdParty thirdParty = new ThirdParty(); 
thirdParty.callMethod(); 

が最初の行である:私は私自身のバンドルからそれを使用するために呼び出す必要があるコードは次のようになります。標準JARを使用しているOSGIコンテナの外では、これは正常に動作します。しかし、OSGIの中では、3行目に登録キーが設定されていないというエラーが表示されます。

このようなバンドルで静的メソッド呼び出しに問題がありますか?静的コンテキストがバンドル全体で共有されていない場合とほぼ同じです。

答えて

2

コードをデバッグしましたか?あなたが作業しているサードパーティのライブラリを教えてくれるわけではないので、私たちはあなたの環境を知らないので、setRegKey()またはcallMethod()がOSGiの内部で動作しない何か「スマート」をしようとしている可能性があります。

JDBCドライバマネージャでは、バンドルがJDBCドライバクラスをインポートするが、バンドルの呼び出しスレッドがJDBCドライバクラスを参照しないようにドライバマネージャが決定するため、OSGiの内部で実行されるとこの問題が発生します。

2

ThirdPartyクラスを含むパッケージをエクスポート/インポートする必要があります。さもなければ、それは異なるバンドルの異なるクラスローダーで終わるので、実際には共有されません。

真のOSGiの方法は、いくつかのサービスを通じてこれを行うことです。

+0

ご清聴ありがとうございます。サードパーティのバンドルマニフェストでは、私はExport-Package:com.thirdparty.packageを持っています。そして、私のバンドルのマニフェストで、Import-Package:com.thirdparty.packageです。これはあなたが意味することですか? – William

+1

サンプルコードでは、MANIFESTのインポートとエクスポートが正しく行われているか、コンパイルできないことが示されており、3行目の実行時に問題が発生しています。 – SteveD

+0

@ウィリアムはい。ただし、コードがすべて1つのバンドル内にある場合、これは問題ではありません。 – starblue

関連する問題