28

OSGi には、多数の JAR 依存関係を lib ディレクトリにラップしないことで、デプロイ可能なアーティファクトを小さくするという優れた利点があるようです。ただし、依存関係をコンテナーにデプロイするための簡単で信頼できる方法を教えてくれるものは何も見つかりません。たとえば、CXF といくつかの Spring サブプロジェクトを使用するアプリケーションがあります。このアプリケーションを新しい Glassfish サーバーにデプロイする必要がある場合、すべての依存関係が確実にインストールされるようにする最善の方法は何でしょうか?

私はMavenを使用していますが、META-INF/mavenディレクトリを見て、pom.xmlから依存関係リストを取得し、必要なライブラリを取得して取得するフックを持つ方法があるようです(おそらくローカル リポジトリ)。それを行う方法はありますか?

Pax プラグインは、これを行っているように聞こえますが、Felix コンテナーのブーストラップに基づいているように見えますか? これは私が望んでいるものではありません。すでに実行中のリモートコンテナを扱っています。

GUIとは対照的に、コマンドラインツールとして存在するショットはありますか?

4

3 に答える 3

40

依存バンドルを OSGi コンテナーにデプロイする方法はいくつかあります。それらのいくつかを次に示します。

1 Felix OBR バンドルリポジトリ

まず、bindex などのツールを使用して、利用可能なバンドルの XML インデックス ファイルを作成する必要があります。maven-bundle-plugin を使用している場合、~/.m2/repository/repository.xml に OBR インデックスが自動的に維持されます。

OBR コマンドライン インターフェイスを使用してインデックスをロードします。

> obr:addUrl file:/Users/derek/.m2/repository/repository.xml

次に、OBR インデックスから決定された依存関係を使用して、OBR にターゲット バンドルをデプロイするように依頼します。

> obr:deploy com.paremus.posh.sshd
Target resource(s):
-------------------
   Paremus Posh Ssh Daemon (1.0.23.SNAPSHOT)

Required resource(s):
---------------------
   Paremus Command API (1.0.23.SNAPSHOT)

Optional resource(s):
---------------------
   Paremus Config Admin Commands (1.0.23.SNAPSHOT)
   Paremus OSGi & LDAP Types (1.0.23.SNAPSHOT)

2 アパッチカラフ

Karaf は「機能」をサポートします。これは基本的に、機能を提供するために必要なバンドルのリストです。

karaf@root> features:info obr
Description of obr 2.0.0 feature
----------------------------------------------------------------
Feature has no configuration
Feature has no dependencies.
Feature contains followed bundles:
  mvn:org.apache.felix/org.apache.felix.bundlerepository/1.6.4
  mvn:org.apache.karaf.shell/org.apache.karaf.shell.obr/2.0.0
  mvn:org.apache.karaf.features/org.apache.karaf.features.obr/2.0.0

karaf@root> features:install obr

3 エクリプス・ヴァーゴ

Virgo はプランを使用して、アプリケーションを構成するアーティファクトを定義し、バンドル、プラン、プラン アーカイブ (PAR)、構成などのアプリケーションの依存関係を、ローカルとリモートの両方のリポジトリから自動的に提供できます。

4 パレムス・ニンブル

Nimble は OBR (または独自の拡張) リポジトリ インデックスを使用して、ターゲット バンドルをアクティブ化するために必要なすべての依存バンドルを自動的に展開します (ターゲット バンドルが停止すると、それらをアンインストールします)。また、WAB バンドルが Web エクステンダーを必要とするなど、その他の依存関係を検出し、構成可能なポリシーに従って Web エクステンダーを自動的にインストールすることもできます。

Nimble は、Glassfish を起動するように構成することもできるため、Glassfish コンテナー内のバンドルでその機能を利用できます。

以下の例は、sshd がアクティブ化されると、ロギング サポートが自動的にインストールされることも示しています。

$ posh
________________________________________
Welcome to Paremus Nimble!
Type 'help' for help.
[denzil.0]% nim:add --dry-run com.paremus.posh.sshd@active
-- sorted parts to install --
4325   osgi.resolved.bundle/ch.qos.logback.core:0.9.22
-- start dependency loop --
5729   osgi.resolved.bundle/com.paremus.util.logman:1.0.23.SNAPSHOT
5727   osgi.active.bundle/com.paremus.util.logman:1.0.23.SNAPSHOT
3797   osgi.resolved.bundle/ch.qos.logback.classic:0.9.25.SNAPSHOT
3792   osgi.resolved.bundle/slf4j.api:1.6
-- end dependency loop --
436   osgi.resolved.bundle/org.apache.mina.core:2.0.0.RC1
6533   osgi.resolved.bundle/sshd-core:0.3
398   osgi.resolved.bundle/com.paremus.posh.sshd:1.0.23.SNAPSHOT
396   osgi.active.bundle/com.paremus.posh.sshd:1.0.23.SNAPSHOT

(免責事項: 私は Paremus の開発者です)

5 アパッチ・フェリックス・ゴーゴー

gogo は、新しい RFC147 標準のコマンドライン シェルです。すでに Felix、Karaf、Nimble で使用されており、Glassfish でもすぐに利用できるようになります。

Gogo では、対話的に入力できるコマンドをスクリプトとして実行できます。そのため、インストールするバンドルのリストを生成してスクリプトに変換したり、インストールされたバンドルを作業構成からキャプチャして、クリーン スタートから再作成できるようにすることもできます。

于 2010-10-13T23:43:16.797 に答える
2

同じことを行い、同じライブラリーを使用する OSGi アプリケーションと従来の Java アプリケーションを作成する場合、まったく同じ JAR のセットが必要になります。大きな違いは、依存関係を明示的に定義できることです (そして、アプリケーション用により詳細な JAR を生成できる可能性があります)。

私が知っている純粋な OSGi ベースのサーバーは 1 つだけです (Eclipse の Virgo、以前は Spring の DM サーバー)。Glassfish と Websphere は OSGi をサポートしていますが、私はそれらで遊んだことがないので、多くを語ることはできません。私が言えることは、それらはすべて OSGi コンテナーを必要とし、それは通常 Eclipse の Equinox または Apache の Felix であるということです。

あなたの質問は、実際にはアプリケーションのプロビジョニングに関するものであるようです (何をデプロイする必要があるかを調べます)。Maven 3.0 では、Eclipse の P2 プロビジョニング フレームワークを使用して多くの作業を行ったことを知っています。

アプリケーションに EAR または WAR をデプロイしますか? いずれの場合も、ビルド システムはすべての依存関係を含むアーカイブを生成する必要があります。そうしないと機能しません。ビルドの推移的な依存関係管理を行うため、人々が Maven を使用するため、問題が発生する理由については少し混乱しています。

于 2010-10-13T19:51:04.097 に答える