私は、Spring を DI/Bean 管理に使用する非常に大規模な JSF/Facelets アプリケーションを使用しています。私のアプリケーションにはモジュール構造があり、現在、モジュール化を標準化する方法を探しています。
私の目標は、多数のモジュール (相互に依存している可能性があります) から Web アプリケーションを作成することです。各モジュールには、次のものが含まれる場合があります。
- クラス;
- 静的リソース (画像、CSS、スクリプト);
- Facelet テンプレート;
- マネージド Bean - リクエスト、セッション、およびアプリケーション スコープの Bean を使用した Spring アプリケーション コンテキスト (代替は JSF マネージド Bean)。
- サーブレット API のもの - サーブレット、フィルター、リスナー (これはオプションです)。
私が (ほとんどすべての犠牲を払って) 回避したいのは、モジュール リソース (Facelets テンプレートなど) を WAR にコピーまたは抽出する必要があること、またはweb.xml
モジュールのサーブレット、フィルターなどを拡張する必要があることです。モジュールを追加するだけで十分なはずです。 (JAR、バンドル、アーティファクト、...) を Web アプリケーション ( WEB-INF/lib
、bundles
、plugins
、...) に接続して、このモジュールで Web アプリケーションを拡張します。
現在、クラスパスリソースの使用に大きく基づいたカスタムモジュール化ソリューションでこのタスクを解決しています。
- 特別なリソース サーブレットは、クラスパス リソース (JAR) から静的リソースを提供します。
- 特別な Facelets リソース リゾルバーにより、Facelet テンプレートをクラスパス リソースからロードできます。
- Spring はパターンを介してアプリケーション コンテキストを
classpath*:com/acme/foo/module/applicationContext.xml
ロードします。これにより、モジュール JAR で定義されたアプリケーション コンテキストがロードされます。 - 最後に、委任サーブレットとフィルターのペアは、モジュールから Spring アプリケーション コンテキストで構成されたサーブレットとフィルターに要求処理を委任します。
最近、私は OSGi について多くのことを読み、標準化されたモジュール化アプローチとして OSGi を使用する方法 (および使用する場合) を検討していました。OSGi で個々のタスクをどのように解決できるかを考えていました。
- 静的リソース - 静的リソースをエクスポートする OSGi バンドルは、
ResourceLoader
インスタンスをバンドル コンテキストに登録します。セントラルResourceServlet
は、これらのリソース ローダーを使用して、バンドルからリソースをロードします。 - Facelet テンプレート - 上記と同様に、セントラル
ResourceResolver
はバンドルによって登録されたサービスを使用します。 - マネージド Bean -バンドルの 1 つで定義されている場合のような式の使用方法がわかりません。
#{myBean.property}
myBean
- サーブレット API のもの - WebExtender/Pax Web などを使用して、サーブレット、フィルターなどを登録します。
私の質問は次のとおりです。
- 私はここで自転車を発明していますか?そのための標準的なソリューションはありますか?Spring Slices についての言及を見つけましたが、それに関するドキュメントはあまり見つかりませんでした。
- OSGi は、説明されているタスクに適したテクノロジーだと思いますか?
- OSGI アプリケーションの私のスケッチは多かれ少なかれ正しいですか?
- マネージド Bean (特にリクエスト/セッション スコープ) をどのように処理する必要がありますか?
私は一般的にあなたのコメントに感謝します.