OFBiz可以配置为单个整体webapp?

时间:2013-11-03 08:13:12

标签: deployment module package war ofbiz

OFBiz默认情况下作为小型webapp的集合,每个小型webapp都有自己的前端控制器。 OFBiz webapps通常依赖于许多常见模块。通常情况下,特殊用途或热部署下的模块最终将取决于框架应用程序下的几乎所有模块......使用嵌入式容器,所有库都会进入catalina共享库类加载器,但如果ofbiz需要部署在不同的容器中,那么根本就没有简单的方法。我认为唯一的选择是

  1. 包装ofbiz作为带有 EAR / lib EAR / APP-INF / lib 的EAR,以便所有Web应用程序都可以访问一组通用的EAR级别类路径资源..通常每个模块的配置 lib 以及所有重要的 ofbiz- $ module.jar
  2. 每个webapp将每个必需的jar包装到自己的 WEB-INF / lib 中..复制太多,从某种意义上也增加了文件系统的占用空间
  3. 使用应用程序系统类路径代替catalina shared.lib文件夹 - 这意味着JVM必须专用于ofbiz,因为它的jar会干扰其他兄弟部署,甚至可能干扰容器本身,通常是诸如XML之类的东西,XSL,STAX apis等..
  4. 鉴于ofbiz使用文件系统( ofbiz.home + component:// )加载大部分资源。

    是指在一个传统的servlet环境中,webapp真正需要访问的内容
    • controller.xml
    • classpath资源 - 跨shared.lib中的各种ofbiz- $ module.jar。通常,每个模块的配置 lib 以及所有重要的 ofbiz- $ module.jar
    • 导入(component://)webapp资源,如各种模块的其他controller.xml。最重要的是 framework / common / webcommon / WEB-INF / controller.xml ,它提供了像checkLogin和autoLogin这样的样板安全实现....

    我想知道我们是否可以使用前端控制器命名空间将多个webapps打包成一个单一的webapp,以便战争映射到单个根内容,如 / ROOT on tomcat)和 / content / webtools / catalog / ecommerce 等仅仅是URL命名空间/ subcontexts而不是单独的webapps。 framework / common / webcommon / WEB-INF / controller.xml 可以成为/(Tomcat中的ROOT)的根控制器,并为所有webapps提供checkLogin,autoLogin等,而不需要每个控制器都必须导入该控制器。 XML

    当我们想要转移到其他容器时,我们可以简单地使用部署模型,例如weblogic,jboss等,我们会更好地构建一个单独的webapp,并将其所有依赖项整齐地打包到其中WEB-INF / lib 这样它可以与同一容器中的其他部署共存,而不会干扰它们的依赖关系及其版本...

    我相信struts有这种模块化命名空间,可以有一个根级别struts.xml(我们的case controller.xml),每个模块都是一个带有自己的模块/ struts.xml或module / struts-module的文件夹.xml等...

    我个人认为这会有所帮助..我对这些缺点没有足够的考虑。可能会有很多?我老实说不知道。我没有充分考虑主题。开发人员显然不希望看到代码的布局或组织方式发生任何变化..所以有些未成年人? :)在框架中核心MVC代码的变化,我们可以使用一个简单的ant构建脚本来支持这种部署,该脚本将候选webapps分级为合并的单片webapp ...

    我希望看到关于这个想法的优点的辩论......如果我得到一些方向和投入,我甚至愿意投入一些时间来完成这项工作..

2 个答案:

答案 0 :(得分:3)

您是否考虑过使用厨师来部署Ofbiz?

我写了下面的食谱来演示它是如何起作用的:

答案 1 :(得分:3)

这是Apache OFBiz如何构建的一个难点部分。使用EAR文件可以正常工作,但EAR文件中的共享类路径资源是特定于应用程序服务器的,您必须部署在支持限制选择的EAR文件的容器中。

其中一个限制是controller.xml文件中的请求的平面命名空间,您描述的将是处理它的最佳方法(为每个OFBiz组件应用程序使用不同的ControlServlet挂载点)。这样做可能需要对URL编写进行一些代码更改(@ofbizUrl FTL标记和其他地方使用的底层代码)。编写ant目标或构建WAR文件的东西还需要一些工作,从各种组件(或者只是那些所需的组件)中提取所有webapps,编写组合的web.xml文件等等。 / p>

这是OFBiz公认的问题,对于大多数部署而言不是问题,但确实使其与其他应用程序一起缩小或托管变得更加困难。您可以通过OFBiz组件添加其他Web应用程序以在嵌入式servlet容器上托管它们,但我不认为这是您正在寻找的。

在OFBiz中进行此类和许多类似更改的问题之一是大型代码库,庞大的用户群以及对此类事情有不同意见的大型提交者组。由于这些原因和其他原因,很多改进OFBiz的想法在那里都不容易实现,这就是我在2010年开始实施Moqui框架项目的原因。

Moqui使用单个WAR文件进行部署,并且可以具有外部或嵌入式运行时目录,以便在WAR托管服务(如AWS ElasticBeanstalk)上轻松部署,以及插入到诸如Apache Tomcat之类的servlet容器中。 WAR文件也是一个可执行的JAR文件,使用嵌入式Winstone servlet容器,以便于开发和自动化测试。有关运行和部署Moqui的详细信息:

http://www.moqui.org/framework/docs/RunDeploy.html

顺便说一下,这是改进OFBiz的数百个想法之一,使其成为Moqui框架,以及与数据模型和服务(Mantle Business Artifacts)的独立项目。这里有一般信息:

http://www.moqui.org/