2012-02-07 12 views
1

OSGiバンドルがEclipse RCPでRESOLVED状態になるのを聞いて聞いていません。 BundleListenerまたはBundleTrackerは、バンドルが解決済みの状態になっていることに気付いていないようです。Eclipse RCPのOSGi BundleListenerとBundleTracker

リスナーは、RESOLVED to ACTIVEイベントに気付きます。リスナーバンドルが自分自身を登録する機会を得る前に、起動コンフィギュレーションのバンドルが解決済みの状態に入る可能性はありますか?

他のバンドル(たとえば)がサービス/クラスにアクセスしようとするとすぐにバンドルが遅延/自動的に解決済みからアクティブになると思ったのですか?

乾杯!

答えて

1

バンドルがアクティブになる前に、すべてのバンドルが解決済みになる可能性があります。 BundleListenerを登録するか、BundleTrackerを開くことができるように、バンドルをアクティブ化してコントロールを取得する必要があります。

RESOLVEDバンドルは、ACTIVEでなくてもクラスをロードできます。バンドルが遅延アクティブ化のマークが付いている場合、バンドルからの第1クラスのロードによってアクティブ化がトリガーされます。

+0

ご回答ありがとうございます。特定のバンドルにACTIVE状態を強制して他のバンドルがRESOLVEDに入る前に強制的に状態を知る方法があるかどうか知っていますか? – deephacks

+0

これは一般的に可能ではありません。 ResolverHookを使うと、バンドルを解決しようとしているときに通知を受け取ることができます。そしてフックは他のバンドルを開始しようとする可能性があります。しかし、それはうまくいかないかもしれません。たとえば、両方のバンドルが同じ解決操作の一部である場合 脆弱な依存関係の悪いデザインのように思える理由を再考する必要があります。 –

関連する問題