2011-09-01 13 views
9

私はモジュール式Webアプリケーションを作成するソリューションを探していました。モジュール型Webアプリケーションは、ユーザーが独自のプラグインを単純なjar形式で提供できるという意味でモジュラー型ですウェブアプリケーションと私のwebappはそれを表示する責任があります。OSGIはモジュール式Webアプリケーションを作成します

今、キャッチは、私のWebアプリケーションをできるだけジェネリックにして、何かをサポートするためにj2ee Webコンテナに依存することなくしたいです。つまり、私はosgiサポートを提供し、osgiバンドルとしてWebアプリケーションを配備するために自分のWebコンテナに依存しています(これは本当にグラスフィッシュやWASなどのために非常に簡単です)。

私は現在、公式サイトで提供しているサーブレットブリッジを参照していますが、唯一の解決策はありませんが、私にはすべてをリクエストに解釈してサーブレットに委譲するのは本当に苦労です適切なバンドルクラスを作成してから、何らかの形でデータのみをWebアプリケーションに再度送り返します。

私のウェブアプリケーションもバンドルであれば素晴らしいと思います。 私が試すことができるこの理想的なソリューションに近いものはありますか?または、osgiとweb applictionの2つのリリーム(コンテナ)間の他の通信方法?

答えて

5

OSGi specは、WAB(Web Archive Bundle)形式の詳細です。あなたが例えば、のServletContextを経由してBundleContextを取得PAXウェブを使用し

そしてPax Web WAB/WARのWebアプリケーションのための素晴らしいサポートを提供しています(PAXウェブなど春分、フェリックス、上で正常に動作)

BundleContext bundleContext = (BundleContext) getServletContext().getAttribute("osgi-bundlecontext"); 

あなたが言及したユーザー主導のプラグイン可能性については、実装するプラグインバンドルのためのいくつかのサービスインターフェイスを提供することを提案しました.WebappではServiceTrackerを使用して登録を待ちます(宣言的サービスを使用している場合を除く)。また、アップロードサーブレットからinstall bundlesに簡単にアクセスできます。

プラグインをアップロードするユーザーがログインして承認する必要があると思うので、セキュリティの問題はこの時点で満たされています。


編集:私はあなたが疑問誤解だと思い、コメント欄では十分ではありませんスペース

謝罪として、ここでコメントに返信する - あなたは、既存のWebアプリケーションコンテナ(複数可)を持っていて、WARをデプロイしたいですOSGiの機能は?そうであれば、ServletBridgeを使用するか、他の人がOSGiフレームワークをあなたのWARに埋め込むようにしてください(これは比較的簡単です、例えばthisを参照してください)。

ServletContextからBundleContextを取得しようとすると、これをオプションにすることもできます。これがnullを返した場合は、独自の組み込みフレームワークを起動します。そうすれば、ネイティブのOSGiコンテナ(Glassfishな​​ど)やJava EEアプリケーションサーバーで実行されます。

それ以外の場合、PaxWebはHttpServiceとWebApp OSGi仕様を実装していますが、多くの拡張機能を搭載しています。これをOSGiコンテナに展開します。

+0

あなたの返信は興味深いです。私はWABについて知っています。私の質問で「私はosgiサポートを提供し、Webアプリケーションをosgiバンドルとして展開するために自分のWebコンテナに依存しません。しかし、私はパックスのウェブを知らなかった、あなたが与えた公式のリンクは、桟橋が戦争をワイブとして展開するための延長を示唆しているのだろうか?もっと説明できますか? – FUD

+0

ありがとう、私はリンクで提案した方法を評価します。 – FUD

1

ServletBridgeは、Webコンテナ内にOSGI contianerを埋め込むためのものです。もう1つのオプションは、Webコンテナ(バンドルとして)をOSGIコンテナに埋め込むことです。次の記事では、これを達成する方法の詳細について説明します。

http://java.dzone.com/articles/osgi-and-embedded-jetty

+0

ありがとう、私はそれを認識していますが、私は特定のWebコンテナに限定されたくないので、ほとんどのサーバーを埋め込むことはオプションではありません。 – FUD

2

あなたはApache Slingに見たいと思うかもしれません。これは、OSGiコンテナが組み込まれたWebフレームワークです。 OSGiコンテナはApache Felixと呼ばれ、かなり良いです。

+0

これはうまく見えますが、フレームワークがサポートしているものによって制限されることは望ましくありません。たとえば、WebアプリケーションでJSFを使用したいとします。多分私は私の質問でそれを言及していたはずです。 – FUD

1

あなたはChonCMS試してみたいことがあります - そのアーキテクチャは、あなたが求めているものに正確に基づいており、それがベースのCMS機能を有効にするために、いくつかのプラグインが付属して、それが使用してマイナーなWebアプリケーションコンテナとモジュラープラットフォームですhttp://www.choncms.com

をフェリックスとプラグインは、実行時に追加/削除することもできます。

ドキュメンテーションが不足していることがあるかもしれないが、オープンソースであることを尋ねるかもしれませんが、質問に答えることができて嬉しいです。