4

Guice を JBoss AS7 (7.2.0-Alpha) にデプロイしようとしています。これは、いくつかの瓶として提供されます。私が興味を持っているのは

  • ガイダンス
  • guice サーブレット
  • guice-persist

guice はホスト バンドルであり、guice-servlet および guice-persist はこのホストのフラグメントです。

コンテナーを起動すると、ホスト バンドルが常にインストールされ、解決され、アクティブになります。フラグメントは常にインストールされ、解決されてホスト バンドルに「含まれる」場合と含まれない場合があります。これはランダムのようです。

Eclipse Virgo も試してみましたが、動作は同じですが、インストール順序を定義することでこの問題を回避できるプランを定義する機能があります。(とにかくそれを機能させることができたようです)。

OSGi の仕様を見て、この質問に対する回答を読むと、これは予想される動作のようです。JBoss は OSGi 4.2 コンテナーであるため、ヘッダーRequire-CapabilityProvide-Capabilityヘッダーはオプションではありません。さらに、自分のものではない jar を変更したくありません。

ホスト/フラグメント バンドルを確実にインストールして解決するにはどうすればよいですか?

私が持っていた 1 つのアイデア (正しくないように思われるので、やりたがりません) は、maven-bundle-plugin/bndtools を使用し、guice バンドルを単一の super-guice-bundle にマージすることです。ビルド時に効果的に実行します。 runtme でコンテナが失敗していること。

4

1 に答える 1

7

リンク先の質問への回答で述べたように、ホストが解決する前にフラグメントがインストールされている場合、フラグメントはホストにアタッチされます。これを実現する最も簡単な方法は、最初にすべてのバンドル (フラグメントを含む) をインストールしてから、それらのいずれかを解決できるようにすることです。

多くの場合、解決はバンドルを開始しようとすることによってトリガーされます。OSGi でよくある間違いの 1 つは、各バンドルをインストールした直後に開始しようとすることです。これを行ってはなりません。つまり、実行する予定のすべてのバンドルをインストールするまで、バンドルを開始しないでください。

于 2012-11-14T17:17:37.390 に答える