1、首先,我们看ofbiz装载哪些组件,framework/base/config/component-load.xml决定装载哪些组件
<component-loader xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/component-loader.xsd"> <load-components parent-directory="framework"/> <load-components parent-directory="themes"/> <load-components parent-directory="applications"/> <load-components parent-directory="specialpurpose"/> <load-components parent-directory="hot-deploy"/> </component-loader>
意味着ofbiz初始的时候装载framework、themes、applications、specialpurpose和hot-deploy这几个“一级”组件
2、很多日常的应用都在applications下,我们看看这些组件是如何装载的。进入applications这个目录,一眼就看到了component-load.xml这个文件,打开看看:
<component-loader xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/component-loader.xsd"> <load-component component-location="commonext"/><!-- common component used by most other components --> <load-component component-location="party"/> <load-component component-location="securityext"/> <load-component component-location="content"/> <load-component component-location="workeffort"/> <load-component component-location="product"/> <load-component component-location="manufacturing"/> <load-component component-location="accounting"/> <load-component component-location="humanres"/> <load-component component-location="order"/> <load-component component-location="marketing"/> </component-loader>
原来这里决定applications下这么些应用都装载哪些了,缺省是都装进来的。如果想瘦身的话,在这里可以去掉一些你不用的组件。
3、通过上面两个部分的配置,我们可以很清楚的看到ofbiz的组件层次管理。ofbiz最下层的组件基本都是以web项目的形式存在的,我们到最下层的组件去看看。以party组件为例。
进入party目录,根目录下有一个ofbiz-component.xml的配置文件,其中有这么一段:
<webapp name="party" title="Party" server="default-server" location="webapp/partymgr" base-permission="OFBTOOLS,PARTYMGR" mount-point="/partymgr"/>
描述了该组件做为一个web项目的目录是webapp/partymgr。web项目的话,都会有一个WEB-INFO的目录喽,在WEB-INFO下,我们会看到controller.xml和web.xml这两个配置文件。web.xml自然不在话下。我们以启动页面为例,找找ofbiz是如何启动一个页面的。
打开web.xml,找到:
<welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list>
再打开index.jsp
<%response.sendRedirect("control/main");%>
呵呵,一进来就重定向到control/main里面去了。
再在web.xml下找如何处理control/吧:
<servlet> <servlet-name>ControlServlet</servlet-name> <display-name>ControlServlet</display-name> <description>Main Control Servlet</description> <servlet-class>org.ofbiz.webapp.control.ControlServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>ControlServlet</servlet-name> <url-pattern>/control/*</url-pattern> </servlet-mapping>
原来control这个uri的访问,都将由org.ofbiz.webapp.control.ControlServlet接管,这个servlet的配置文件正是controller.xml了。
我们在controller.xml中,用main为条件找,找到:
<request-map uri="main"><security https="true" auth="true"/><response name="success" type="view" value="main"/></request-map>
望文生义,做为control下面的“main”的url,需要使用https访问,需要登录。响应的东西的类型是“view”,名字叫做“main”
接着在controller.xml中,用main为条件找,找到:
<view-map name="main" type="screen" page="component://party/widget/partymgr/PartyScreens.xml#findparty"/>
这里就定义了,启动的页面是PartyScreens.xml这个widget中定义的findparty这个screen了。