ofbiz中的container-1

在ofbiz中,主要有三种container

  1. 系统启动时候的container

    这个在启动类中被调用,根据framework\base\config\ofbiz-containers.xml中的定义加载其他容器

  2. 用来加载组件的container

    在这里边定义的container会被顶层container启动,执行指定的class类

    这里定义的container执行的时候基本上是组件还没有加载

  3. 组件中component-load.xml定义的container

    这里边的容器基本上是在组件配置全部加载完毕后开始执行

  4. //获取全部组件中定义的container
            List<ContainerConfig.Container> containersDefinedInComponents = ComponentConfig.getAllContainers();
            for (ContainerConfig.Container containerCfg: containersDefinedInComponents) {
                boolean matchingLoaderFound = false;
                if (UtilValidate.isEmpty(containerCfg.loaders) && UtilValidate.isEmpty(loaders)) { //比较启动级别
                    matchingLoaderFound = true;
                } else {
                    for (String loader: loaders) {
                        if (UtilValidate.isEmpty(containerCfg.loaders) || containerCfg.loaders.contains(loader)) {
                            matchingLoaderFound = true;
                            break;
                        }
                    }
                }
                if (matchingLoaderFound) {
                    Debug.logInfo("Loading component‘s container: " + containerCfg.name, module);
                    Container tmpContainer = loadContainer(containerCfg, args); //加载Container,执行其中的init方法
                    this.loadedContainers.add(tmpContainer);//加入缓存
                    Debug.logInfo("Loaded component‘s container: " + containerCfg.name, module);
                }
            }

总结:

这三个地方的container并没有什么不同,主要是因为启动顺序和作用的问题把这些container写在不同的配置文件中

时间: 2024-10-12 19:51:33

ofbiz中的container-1的相关文章

ofbiz中的实体引擎Delegator

在ofbiz中备受推崇的实体引擎,具体有什么好处由我们向下研究(我也没了解过),先从第一步,实体引擎的创建 在ofbiz中实体引擎是由catalina-container(tomcat容器)中创建的 <container name="catalina-container" loaders="main" class="org.ofbiz.catalina.container.CatalinaContainer">         <

ofbiz中的数据模型

Delegator Delegator是整个ofbiz中数据库访问的入口,具体实现是GenericDelegator类,在这个类中通过     protected ModelReader modelReader = null;     protected ModelGroupReader modelGroupReader = null; 这两个属性变量去查找在xml文件中定义的数据模型 ModelReader 通过ModelReader读取模型实体ModelEntity  protected M

转 OFBiz中services调用机制

OFBiz业务方法里面,当执行一个service的时候,通常采用如下的方式: LocalDispatcher dispatcher = dctx.getDispatcher();     Map<String, Object> result = dispatcher.runSync(getServiceName(), getContext()); LocalDispatcher是本地调度器,实现服务的同步异步调度和定时任务的调度.与服务调度相关的类图如下: LocalDispatcher是一个

OFBiz中services调用机制

OFBiz业务方法里面,当执行一个service的时候,通常采用如下的方式: LocalDispatcher dispatcher = dctx.getDispatcher();     Map<String, Object> result = dispatcher.runSync(getServiceName(), getContext()); LocalDispatcher是本地调度器,实现服务的同步异步调度和定时任务的调度.与服务调度相关的类图如下: LocalDispatcher是一个

ofbiz中的factory模式运用

在ofbiz中大量使用了工厂模式,在使用工厂模式的同时使用了缓存模式,如如下生成数据操作工厂类 /*******************************************************************************  * Licensed to the Apache Software Foundation (ASF) under one  * or more contributor license agreements.  See the NOTICE 

ofbiz中的container-2

当ofbiz启动的时候,他回去查找配置中定义的container并且初始化他们,然后调用初始化方法 public void init(String[] args, String name, String configFile) throws ContainerException; 如果这个方法没有抛出异常的话就会把这个container存放在一个list中(在ContainerLoader类中) private final List<Container> loadedContainers = 

OFBiz中JOB的运行机制

OFBiz执行后台任务的类在org.ofbiz.service.job中.JobPoller和JobInvoker是主要的两个类,一个负责查询可以执行的Job,另一个执行Job任务.Job类图如下所示.1.Job轮询 创建JobManager时,会创建JobPoller的一个实例.JobPoller实现了Runnable接口,以此创建线程后 通过JobManager一直轮询是否有Job需要执行,如果有奖将其放入队列中. 1     public synchronized void run() {

bootstrap中的container与container-fluid的用法

使用过bootstrap的同学都知道,其container与container-fluid都是设置文本居中,但两者还是有很大的区别. 官方给出的解释是: .container 类用于固定宽度并支持响应式布局的容器. .container-fluid 类用于 100% 宽度,占据全部视口(viewport)的容器. 二者之间的共同点为,两者都可以将高度设置成auto,即自动模式.最大的不同就是宽度的设定上. container根据屏幕宽度利用媒体查询,已经设定了固定的宽度,作用为阶段性的改变宽度,

ofbiz,普通java程序,osgi中类加载

OSGI中类加载 在osgi中,存在多个类加载器,每一个类加载器加载一个独立的模块,当其他模块需要寻找这个类时,通过osgi框架依赖关系表去查找这个类所在的加载器,委托这个加载器去运行 ofbiz中类加载 ofbiz中集成了许多应用程序,像订单,安全,登陆,网店等,还有tomcat也被集成到ofbiz中,在ofbiz中是通过将这些应用程序的jar包和资源文件加载到同一个类加载器中(包括tomcat) 普通java程序 和ofbiz中类加载器一致