私のチームでは、Web アプリケーションの Java バックエンドを開発しています。OSGiを使用しています。
これまでのところ、開発の初期段階で物事を簡素化するために、Jetty をサーブレット コンテナーとして使用していました。テスト サーバーへの展開のために、Eclipse 製品 (すべてがバンドルされています) をエクスポートし、対応する .exe ファイルを実行しました。
モジュール化とデカップリングのために OSGi を使用しています。この特定のシナリオでは、バンドルを動的にインストール/アンインストールすることに関心がないため、すべてをまとめて 1 回でデプロイできる Eclipse 製品は非常に便利でした。
ここで、Jetty から GlassFish に移行したいと考えています。これは、バンドルを別の方法でパッケージ化する必要があることを意味します。私が集めたものからすると、WAB は私たちにとって正しいものになるでしょう。たとえば、これを参照してください。
基本的に、[WAB は] OSGi バンドル マニフェストを持つ Web アプリケーションです。したがって、Web アプリケーション全体を単一の OSGi バンドルとして、WAB をサポートする任意のフレームワークにデプロイできます。技術的には、バンドルは Web アプリケーションとしてサーブレット コンテナにデプロイできます。ただし、BundleContext にアクセスできます。これにより、Web アプリケーションは、同じフレームワークで実行されている他のバンドルまたは Web アプリケーションと相互運用できます。
https://stackoverflow.com/a/11345694/285091
理想的には、.product ファイル (または起動構成) に移動し、そこから WAB をエクスポートします。これは、必要なすべてのバンドルと適切なセットアップ (自動開始設定と開始レベル) が既にあるためです。しかし、これは不可能のようです。
「ルート」バンドルを取得して、それとその依存関係をパッケージ化するだけでは、その手順に従ってパッケージ化されない追加のバンドルがあるため、うまくいかないことに注意してください。たとえば、私のワークスペースには次のものがあります。
- com.example.root
- com.example.something
- com.example.something.impl.a
- com.example.something.impl.b
どこ:
com.example.something
2 つの実装を持つ API バンドルです。com.example.something.impl.a
com.example.something.impl.b
com.example.root
依存しますcom.example.something
が、その実装には依存しません- 私たちは実際に実行しますが
com.example.something.impl.b
、決して実行しませんcom.example.something.impl.a
パッケージとその依存関係だけをパッケージ化しようとするroot
と、見逃してしまいますimpl.b
つまり、基本的に、サーバー側アプリケーションに必要な正確なバンドル設定を含む起動構成/Eclipse 製品が既にある場合、対応する WAB を生成する方法はありますか? 直接的な方法がなく、maven を使用していない ( maven-bundle-plugin を除外している) 場合、次は何が最善でしょうか?