Tag: modularization

如何使用OSGi模块化JSF / Facelets / Spring应用程序?

我正在使用非常大的JSF / Facelets应用程序,它们使用Spring进行DI / bean管理。 我的应用程序具有模块化结构,我目前正在寻找标准化模块化的方法。 我的目标是从许多模块(可能相互依赖)组成Web应用程序。 每个模块可能包含以下内容: 类; 静态资源(图像,CSS,脚本); Facelet模板; 托管bean – Spring应用程序上下文,包含请求,会话和应用程序范围的bean(替代方法是JSF托管bean); Servlet API的东西 – servlet,filter,监听器(这是可选的)。 我想避免(几乎不惜一切代价)需要将模块资源(如Facelets模板)复制或提取到WAR或扩展web.xml以获取模块的servlet,filter等。它必须足够将模块(JAR,bundle,artifact,…)添加到Web应用程序( WEB-INF/lib , bundles , plugins ,…)以使用此模块扩展Web应用程序。 目前,我使用自定义模块化解决方案来解决此任务,该解决方案主要基于使用类路径资源: 特殊资源servlet从类路径资源(JAR)提供静态资源。 Special Facelets资源解析器允许从类路径资源加载Facelet模板。 Spring通过模式classpath*:com/acme/foo/module/applicationContext.xml加载应用程序上下文classpath*:com/acme/foo/module/applicationContext.xml – 这将加载模块JAR中定义的应用程序上下文。 最后,一对委托servlet和filter将请求处理委托给模块中Spring应用程序上下文中配置的servlet和filter。 最后几天我读了很多关于OSGi的内容,我正在考虑,如何(以及如果)我可以将OSGi用作标准化的模块化方法。 我在考虑如何使用OSGi解决单个任务: 静态资源 – 想要导出静态资源的OSGi包用bundle上下文注册ResourceLoader实例。 中央ResourceServlet使用这些资源加载器从bundle加载资源。 Facelet模板 – 与上面类似,中央ResourceResolver使用bundle注册的服务。 托管bean – 如果myBean在其中一个bundle中定义, 我不知道如何使用像#{myBean.property}这样的表达式。 Servlet API的东西 – 使用像WebExtender / Pax Web这样的东西来注册servlet,filter等等。 我的问题是: 我在这里发明了一辆自行车吗? […]