默认情况下,OFBiz 作为小型 Web 应用程序的集合,每个应用程序都有自己的前端控制器。OFBiz webapps 通常依赖于很多通用模块。通常,特殊用途或热部署下的模块最终将取决于框架和应用程序下的几乎所有模块......使用嵌入式容器,所有库都进入 catalina 共享库类加载器,但如果 ofbiz 需要部署在一个不同的容器,根本没有简单的方法。我认为唯一的选择是
- 将 ofbiz 打包为带有EAR/lib或EAR/APP-INF/lib的 EAR ,以便所有 webapps 都可以访问一组通用的 EAR 级类路径资源。通常是每个模块的config、lib和所有重要的ofbiz-$module。罐
- 每个 webapp 都将每个所需的 jar 打包到自己的WEB-INF/lib中 .. 过多的重复,并且在某种意义上也增加了文件系统的占用空间
- 使用应用程序系统类路径代替 catalina shared.lib 文件夹——这意味着 JVM 必须专用于 ofbiz,否则它的 jar 会干扰其他同级部署,甚至可能干扰容器本身,通常是 XML、XSL、 STAX api等。
鉴于 ofbiz 使用文件系统(ofbiz.home + component://)resulution加载大部分资源。webapp 真正需要在传统的 servlet 上下文中访问的是
- 控制器.xml
- 类路径资源 - 跨越 shared.lib 中的各种 ofbiz-$module.jar。通常,每个模块的config、lib和所有重要的biz-$module.jar
- 为各种模块导入(component://)webapp 资源,如其他 controller.xml。最重要的是framework/common/webcommon/WEB-INF/controller.xml提供样板安全实现,如 checkLogin 和 autoLogin....
我想知道我们是否可以使用前端控制器命名空间以某种方式将多个 web 应用程序打包到一个单一的整体 web 应用程序中,以便战争映射到单个根内容,例如说/(tomcat 上的ROOT )和/content、/webtools、/catalog、/ ecommerce等. 只是 URL 命名空间/子上下文,而不是单独的 webapps。 framework/common/webcommon/WEB-INF/controller.xml可以成为 /(tomcat 中的 ROOT)的根控制器,并为所有 webapps 提供 checkLogin、autoLogin 等,而无需每个控制器都必须导入该 controller.xml
当我们想要迁移到其他容器(例如 weblogic、jboss 等)时,这将允许我们简单地部署模型,在这些容器中,我们最好构建一个单一的 webapp,并将其所有依赖项整齐地打包到其WEB-INF/lib中,例如它可以与同一个容器中的其他部署共存,而不会干扰它们的依赖关系和它们的版本......
我相信 struts 有这种模块化命名空间,其中可能有根级别 struts.xml(我们的案例 controller.xml),每个模块都是一个文件夹,有自己的 module/struts.xml 或 module/struts-module.xml 等...
我个人觉得这会有所帮助.. 我对缺点的考虑还不够。可能有很多?我真的不知道。我也没有对主题给予足够的考虑..开发人员显然不希望看到代码布局或组织方式的任何变化..所以有一些小问题?:) 框架中核心 MVC 代码的更改,我们可能会使用一个简单的 ant 构建脚本来支持这种部署,该脚本将候选 webapps 分阶段为一个合并的整体 webapp...
我希望看到关于这个想法的优点的辩论......如果我得到一些方向和投入,我什至愿意投入一些时间来完成这项工作......