0

私のチームでは、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.something2 つの実装を持つ 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 を除外している) 場合、次は何が最善でしょうか?

4

0 に答える 0