2012-06-14 6 views
13

私はOSGiのパーシスタンスサービス(hibernateを使用)と構成(xmlファイル)を含むフラグメントを持っています。OSGiフラグメントがいつホストに接続されていますか?

@Override 
public void start(BundleContext ctx) { 
    URL url = ctx.getBundle().getResource("hibernate.cfg.xml"); 
    SessionFactory sessionFactory = new AnnotationConfiguration().configure(url).buildSessionFactory(); 
} 

時には、URLがnull:バンドルのアクティベーターでは、私が使用して構成をロードしています。利用可能なすべてのURLfindEntriesメソッドを使用して)をリストしようとすると、バンドル自体のものが常に利用可能であるように見えますが、断片は時々だけです。私はFelix 4.0.2を使用していますが、バンドルとフラグメントは同じFelixで開始されます。 auto.startレベル。

答えて

22

ホストが解決された時点でフラグメントがホストにアタッチされます。通常、フラグメントは、ホストが解決する前にインストールされている限り、アタッチされます。

しかし、ホストがフラグメントなしで解決できる可能性は、ホストがフラグメントに依存しないためです。したがって、通常は、存在していないフラグメントに対処できるようにホストを書きます。つまり、NPEなどを投げてはいけません。

OSGi R4.3では、ホストからの依存性を、 Require-CapabilityおよびProvide-Capabilityヘッダー。依存関係のための独自の名前空間を作成することで、フラグメントにProvide-Capabilityを与えることができます。あなたのホストはRequire-Capabilityでそれを要求することができます....今すぐOSGiフレームワークは、フラグメントをホストが解決する前に利用可能にする必要があります。

+0

ありがとうございます。 – Kojotak

+0

それは便利です。私は実際にユースケースが失敗するのを実際に見たことはありませんでしたが(私たちはEquinoxを使用しています)、「時間内に」フラグメントを解決できないことはわかりませんでした。知っておいてよかった。 – Robin

+3

私はStackOverflowを使えば、ユーザーに登録するだけで、Neilのすべての記事を読むことができます。私は彼が答えるたびに新しい何かを学びます! –

0

フラグメントは、フラグメントバンドルの分解プロセス中に宿主に付着する。 ホストが解決され、フラグメントが存在しなくても正常に起動できます。フラグメントはホストに依存しています。ホストに接続された後にのみ解決され、その後に開始されます。

両方のバンドルの開始レベルが同じであるため、これら2つのバンドルの競合条件が作成されているようです。フレームワークは両方のバンドルを同時に解決して開始します。フラグメントの解決プロセスが完了する前にホストバンドルを起動することがあります。 - >次に、フラグメントが利用できないかのようにホストバンドルのstartメソッドが動作します。

あなたのできることは、フラグメントにホストバンドルの開始レベルより早い開始レベルを与えます。このフラグメントは、ホストバンドルがまだ開始されていなくても、正常に解決され、正常に開始されます。解決されるのはホストバンドルだけです。

他のOSGiフレームワークでもこの動作をテストすることができます。 on ProSyst's mBedded Server (mBS) - 私は、上記のフラグメント解決が指定されているOSGI仕様4.2に完全に準拠していることを知っています。

+0

ありがとうございます!残念ながら、それは動作していません。フラグメントのためのfelix.auto.startレベルをバンドル自体のレベルより低く設定しました。私はgogoコンソールでこれを二重にチェックしました - バンドルはフラグメントよりも高いレベルです。私は、開始レベルが、より低いレベルのバンドル/フラグメントがより高い開始レベルに行く前に解決を終了することを保証しないように感じます。 – Kojotak

+4

これは間違っています。まず、* host *が解決された時点でフラグメントが添付されます。第二に、フレームワークは解決されず、同時に開始されません。実際、始動は決断に何の影響も与えず、断片はとにかく始めることができません。 –

関連する問題