31

私は最近OSGiを調べていて、モジュール式の Java アプリにとっては本当に良いアイデアだと思います。

しかし、心配するコードだけでなく、HTML、画像、CSS などの Web アプリケーションで OSGi がどのように機能するのか疑問に思っていました。

仕事では、複数の「タブ」を持つアプリケーションを構築しています。各タブはアプリの一部です。これは OSGi アプローチを採用することで本当にメリットがあると思いますが、通常のすべての Web アプリケーション リソースを処理する最善の方法が何であるかはよくわかりません。

それが違いを生むかどうかはわかりませんが、JSF とIceFacesを使用しています(ナビゲーション ルールがあり、web.xml ですべての面の構成ファイルを指定する必要があるため、別のレイヤーの問題が追加されます... ああ! )

編集:このスレッドによると、faces-config.xml ファイルは JAR ファイルからロードできます。そのため、JAR ファイルに分割すれば、実際には web.xml を変更せずに複数の faces-config.xml ファイルを含めることができます。

どんな提案でも大歓迎です:-)

4

8 に答える 8

36

ここに相乗効果があると考えるのは非常に正しいです。アプリ自体が独立したコンポーネント(OSGiバンドル)から自動的に組み立てられ、各バンドルが独自のページ、リソース、css、およびオプションでjavascriptを提供するモジュラーWebアプリがあります。

JSF(ここではSpring MVC)を使用していないため、OSGiコンテキストでのそのフレームワークの追加された複雑さについてコメントすることはできません。

そこにあるほとんどのフレームワークまたはアプローチは、依然として「古い」考え方に準拠しています。つまり、Webアプリケーションを表す1つのWARファイル、次に多くのOSGiバンドルとサービスですが、GUI自体のモジュール化にはほとんど関係ありません。

デザインの前提条件

OSGiで解決する最初の質問は、次のとおりです。デプロイメントシナリオは何であり、プライマリコンテナーは誰ですか。つまり、アプリケーションをOSGiランタイムにデプロイし、そのインフラストラクチャをすべてに使用できるということです。または、OSGiランタイムを従来のアプリサーバーに埋め込んでから、一部のインフラストラクチャを再利用する必要があります。具体的には、AppServerのサーブレットエンジンを使用する必要があります。

現在、私たちの設計はコンテナーとしてOSGiに基づいており、サーブレットコンテナーとしてOSGiが提供するHTTPServiceを使用しています。外部サーブレットコンテナとOSGiHTTPServiceの間にある種の透過的なブリッジを提供することを検討していますが、その作業は進行中です。

Spring MVC+OSGiモジュラーWebアプリのアーキテクチャスケッチ

したがって、目標は、OSGiを介してWebアプリケーションを提供するだけでなく、OSGiのコンポーネントモデルをWeb UI自体に適用して、構成可能、再利用可能、動的にすることです。

システムのコンポーネントは次のとおりです。

  • Spring MVCとOSGiのブリッジングを処理する1つの中央バンドル。具体的には、Bernd Kolbによるコードを使用して、SpringDispatcherServletをOSGiにサーブレットとして登録できるようにします。
  • DispatcherServletに挿入され、着信HTTPリクエストの正しいコントローラーへのマッピングを提供する1つのカスタムURLマッパー。
  • サイトのグローバルレイアウトを定義する1つの中央SitemeshベースのデコレータJSPと、デフォルトとして提供する中央CSSおよびJavascriptライブラリ。
  • Web UIにページを提供する各バンドルは、1つ以上のコントローラーをOSGiサービスとして公開し、独自のサーブレットと独自のリソース(CSS、JSP、画像など)をOSGiHTTPServiceに登録する必要があります。登録はHTTPServiceを使用して行われ、主要なメソッドは次のとおりです。

    httpService.registerResources()およびhttpService.registerServlet()

Web UIコントリビューションバンドルがアクティブ化してそのコントローラーを公開すると、それらは中央のWeb UIバンドルによって自動的に取得され、前述のカスタムURLマッパーがこれらのコントローラーサービスを収集し、コントローラーインスタンスへのURLの最新のマップを保持します。

次に、HTTPリクエストが特定のURLに着信すると、関連付けられたコントローラーを見つけて、そこにリクエストをディスパッチします。

コントローラはその業務を実行してから、レンダリングする必要のあるデータとビューの名前(この場合はJSP)を返します。このJSPはコントローラーのバンドルにあり、リソースの場所をHTTPServiceに登録したため、中央のWebUIバンドルからアクセスしてレンダリングできます。次に、中央ビューリゾルバーは、このJSPを中央のSitemeshデコレーターとマージし、結果のHTMLをクライアントに吐き出します。

これはかなり高レベルですが、完全な実装を提供しないと、完全に説明するのは困難です。

このための重要な学習ポイントは、 Bernd KolbがJPetstoreをOSGiに変換した例で何をしたかを調べ、その情報を使用して独自のアーキテクチャを設計することでした。

IMHOは現在、OSGiを従来のJava EEベースのアプリに組み込むことにあまりにも多くの誇大宣伝と焦点を当てており、OSGiイディオムとその優れたコンポーネントモデルを実際に利用してコンポーネント化されたWebアプリケーションの設計を実際に可能にすることについてはほとんど考えられていません。

于 2008-09-24T09:47:43.137 に答える
2

SpringSource dm Serverを確認してください。これは、OSGi に関して完全に構築され、モジュラー Web アプリケーションをサポートするアプリケーション サーバーです。無料、オープンソース、および商用バージョンで利用できます。

標準の WAR ファイルをデプロイすることから始めて、アプリケーションを徐々に OSGi モジュール (OSGi 用語で言えば「バンドル」) に分割することができます。SpringSource に期待されるように、このサーバーは、Spring フレームワークおよび関連する Spring ポートフォリオ製品に対して優れたサポートを提供します。

免責事項:私はこの製品に取り組んでいます。

于 2009-01-19T20:51:50.060 に答える
1

私たちはOSGiでRestletを使用して、組み込みのHttpサービスで効果を上げています(カバーの下では実際にはJettyですが、tomcatも利用できます)。

Restletにはゼロから最小限のXML構成のニーズがあり、私たちが行う構成はすべてBundleActivator(新しいサービスの登録)にあります。

ページを作成するときは、関連するサービス実装を処理して、出力のデコレータスタイルを生成します。新しいバンドルがプラグインされると、次にレンダリングされるときに新しいページ装飾/ウィジェットが追加されます。

RESTは、クリーンで意味のあるURL、同じデータの複数の表現を提供し、拡張可能なメタファー(動詞が少なく、名詞が多い)のように見えます。

私たちにとってのボーナス機能は、キャッシング、特にETagの広範なサポートでした。

于 2008-09-24T11:56:39.113 に答える
1

SpringSource は、 SpringSource Slicesと呼ばれる OSGi の上に構築された興味深いモジュラー Web フレームワークに取り組んでいるようです。詳細については、次のブログ投稿を参照してください。

于 2009-12-05T12:22:58.393 に答える
0

興味深い投稿のセット。顧客ごとにカスタマイズされたWebアプリケーションがあります。各顧客は、サインアップした内容に応じて、コンポーネントのコアセットと追加のコンポーネントを入手します。リリースごとに、正しいサービスセットを「アセンブル」し、顧客に基づいて正しいメニュー構成(strutsメニューを使用)を適用する必要があります。これは控えめに言っても退屈です。基本的には同じコードベースですが、特定のページを表示または非表示にするためにナビゲーションをカスタマイズするだけです。これは明らかに理想的ではなく、OSGiを活用してサービスをコンポーネント化したいと考えています。これがサービスAPIに対してどのように行われるかを確認し、CSSやJavaスクリプトやコントローラー(Spring MVCを使用)などのリソースをバンドルする方法を理解できますが、「クロスカッティング」にどのように対処しますか 特に新しいサービスを動的にデプロイし、そのサービスにナビゲーションを追加する必要があるシナリオでは、ページナビゲーションや一般的なワークフローなどの懸念事項があります。他のサービスにまたがるサービスのような他の「横断的」関心事もあるかもしれません。ありがとう、デクラン。

于 2009-02-05T11:01:37.887 に答える
0

シンプルで習得しやすいhttp://www.ztemplates.orgをご覧ください。これにより、関連するすべてのテンプレート、javascript、および css を 1 つの jar に入れ、透過的に使用できます。つまり、提供されたコンポーネントを使用するときにページで必要な JavaScript を宣言することを気にする必要さえありません。これは、フレームワークが行うためです。

于 2009-01-12T10:06:39.673 に答える
0

RAPを見てください!http://www.eclipse.org/rap/

于 2008-11-11T22:31:51.180 に答える