ofbiz中的ofbiz-component.xml和加载过程

在ofbiz中,有一个非常重要的配置文件ofbiz-component.xml,这个文件告诉ofbiz需要加载那些容器和类,在start.properties中有如下定义

//ofbiz容器加载类,用来加载其他容器,ofbiz
ofbiz.start.loader1=org.ofbiz.base.container.ContainerLoader
//ofbiz加载的组件级别
ofbiz.start.loader1.loaders=main,rmi

ContainerLoader根据framework\base\config\ofbiz-containers.xml中定义的容器按顺序启动容器

//此处的loaders="main,rmi,pos,install",包含start.properties中的加载级别,该容器是符合要求的启动容器,事实上生产模式上只启动这一个容器
<containername="component-container"loaders="main,install"class="org.ofbiz.base.container.ComponentContainer"/>

<containername="component-container-test"loaders="test"class="org.ofbiz.base.container.ComponentContainer">
<propertyname="ofbiz.instrumenterClassName"value="org.ofbiz.base.config.CoberturaInstrumenter"/>
<propertyname="ofbiz.instrumenterFile"value="runtime/logs/cobertura-components.dat"/>
</container>

<containername="component-container-limited"loaders="limited"class="org.ofbiz.base.container.ComponentContainer">
<propertyname="update-classpath"value="false"/>
</container>

<containername="component-container"loaders="testlist"class="org.ofbiz.base.container.JustLoadComponentsContainer"/>

component-container是组件加载容器,根据framework\base\config\component-load.xml中定义的组件目录查找component-load.xml文件然后加载这些文件

这些配置都存放在org.ofbiz.base.component.ComponentConfig中

//thisisnotaUtilCachebecausereloadingmaycauseproblems
//普通组件配置文件存放位置
protectedstaticMap<String,ComponentConfig>componentConfigs=FastMap.newInstance();
//web组件配置文件存放位置
protectedstaticMap<String,List<WebappInfo>>serverWebApps=FastMap.newInstance();

下边看一个最基本的component-load.xml文件结构

<ofbiz-componentname="base"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/ofbiz-component.xsd">
<resource-loadername="main"type="component"/>
<classpathtype="jar"location="build/lib/*"/>
<classpathtype="dir"location="config"/>
<classpathtype="jar"location="lib/*"/>

<test-suiteloader="main"location="testdef/basetests.xml"/>

<!--loadthecachedclassloadercontainer(alwayssecond)-->
<containername="classloader-container"loaders="main,install,test"class="org.ofbiz.base.container.ClassLoaderContainer"/>

<!--loadthenaming(JNDI)server-->
<containername="naming-container"loaders="rmi"class="org.ofbiz.base.container.NamingServiceContainer">
<propertyname="host"value="0.0.0.0"/>
<propertyname="port"value="1099"/>
</container>

<!--loadBeanShellremotetelnetserver-->
<!--Commentedoutbydefaultforsecurityreasons-->
<!--theportbelowandport-1willbeopenedbyBeanshell-->
<!--containername="beanshell-container"class="org.ofbiz.base.container.BeanShellContainer">
<propertyname="telnet-port"value="9990"/>
<propertyname="app-name"value="OFBiz"/>
</container-->

</ofbiz-component>

这些配置文件都会被加载到ComponentCofig类中,在这个类中有相应的字段用来存放这些配置

protectedStringglobalName=null;
protectedStringrootLocation=null;
protectedStringcomponentName=null;
protectedbooleanenabled=true;

protectedMap<String,ResourceLoaderInfo>resourceLoaderInfos=FastMap.newInstance();
protectedList<ClasspathInfo>classpathInfos=FastList.newInstance();
protectedList<EntityResourceInfo>entityResourceInfos=FastList.newInstance();
protectedList<ServiceResourceInfo>serviceResourceInfos=FastList.newInstance();
protectedList<TestSuiteInfo>testSuiteInfos=FastList.newInstance();
protectedList<KeystoreInfo>keystoreInfos=FastList.newInstance();
protectedList<WebappInfo>webappInfos=FastList.newInstance();
protectedList<ContainerConfig.Container>containers=FastList.newInstance();

最后通过Map将这些配置保存,提供给下一步使用

总结:

以上流程可以通过下图进行展示

wKiom1WCOU2TgiW0AAGtVDr4zaQ643.jpg

个人见解,如有错误,请不吝赐教

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇