ofbiz实体引擎(七) 检查数据源

/**
     * Check the datasource to make sure the entity definitions are correct, optionally adding missing entities or fields on the server
     *@param modelEntities Map of entityName names and ModelEntity values
     *@param messages List to put any result messages in
     *@param addMissing Flag indicating whether or not to add missing entities and fields on the server
     *
     * 检查数据源确保实体正确定义,选择性添加没有的实体和字段
     */
    public void checkDataSource(Map<String, ModelEntity> modelEntities, List<String> messages, boolean addMissing) throws GenericEntityException {
        genericDAO.checkDb(modelEntities, messages, addMissing);
    }
}

值得一提helper的实例化的是GenericHelperDAO 所以checkDb调用的是GenericHeleper中的方法

 /**
     * @author  郑小康
     *
     * 1.从缓存中获取helperFullName的GenericHelper
     *
     * 2.如果为空根据helperBaseName(localmysql)获取Datasource标签实例
     *
     * 3.根据Datasource标签的helperClass,创造构造器,构建对应实例
     *
     * 4.以HelperFullName为k 实例为v存入到缓存
     *
     * 5.返回当前实例化的GenericHelper
     *
     * */
    public static GenericHelper getHelper(GenericHelperInfo helperInfo) {
        GenericHelper helper = helperCache.get(helperInfo.getHelperFullName());

        if (helper == null) { // don't want to block here
            synchronized (GenericHelperFactory.class) {
                // must check if null again as one of the blocked threads can still enter
                helper = helperCache.get(helperInfo.getHelperFullName());
                if (helper == null) {
                    try {
                        Datasource datasourceInfo = EntityConfig.getDatasource(helperInfo.getHelperBaseName());

                        if (datasourceInfo == null) {
                            throw new IllegalStateException("Could not find datasource definition with name " + helperInfo.getHelperBaseName());
                        }
                        String helperClassName = datasourceInfo.getHelperClass();
                        Class<?> helperClass = null;

                        if (UtilValidate.isNotEmpty(helperClassName)) {
                            try {
                                ClassLoader loader = Thread.currentThread().getContextClassLoader();
                                helperClass = loader.loadClass(helperClassName);
                            } catch (ClassNotFoundException e) {
                                Debug.logWarning(e, module);
                                throw new IllegalStateException("Error loading GenericHelper class \"" + helperClassName + "\": " + e.getMessage());
                            }
                        }

                        Class<?>[] paramTypes = new Class<?>[] {GenericHelperInfo.class};
                        Object[] params = new Object[] {helperInfo};

                        java.lang.reflect.Constructor<?> helperConstructor = null;

                        if (helperClass != null) {
                            try {
                                helperConstructor = helperClass.getConstructor(paramTypes);
                            } catch (NoSuchMethodException e) {
                                Debug.logWarning(e, module);
                                throw new IllegalStateException("Error loading GenericHelper class \"" + helperClassName + "\": " + e.getMessage());
                            }
                        }
                        try {
                            helper = (GenericHelper) helperConstructor.newInstance(params);
                        } catch (IllegalAccessException e) {
                            Debug.logWarning(e, module);
                            throw new IllegalStateException("Error loading GenericHelper class \"" + helperClassName + "\": " + e.getMessage());
                        } catch (InstantiationException e) {
                            Debug.logWarning(e, module);
                            throw new IllegalStateException("Error loading GenericHelper class \"" + helperClassName + "\": " + e.getMessage());
                        } catch (java.lang.reflect.InvocationTargetException e) {
                            Debug.logWarning(e, module);
                            throw new IllegalStateException("Error loading GenericHelper class \"" + helperClassName + "\": " + e.getMessage());
                        }

                        if (helper != null)
                            helperCache.put(helperInfo.getHelperFullName(), helper);
                    } catch (SecurityException e) {
                        Debug.logError(e, module);
                        throw new IllegalStateException("Error loading GenericHelper class: " + e.toString());
                    }
                }
            }
        }
        return helper;
    }
/**
     * Check the datasource to make sure the entity definitions are correct, optionally adding missing entities or fields on the server
     *@param modelEntities Map of entityName names and ModelEntity values
     *@param messages List to put any result messages in
     *@param addMissing Flag indicating whether or not to add missing entities and fields on the server
     *
     * 检查数据源确保实体正确定义,选择性添加没有的实体和字段
     */
    public void checkDataSource(Map<String, ModelEntity> modelEntities, List<String> messages, boolean addMissing) throws GenericEntityException {
        genericDAO.checkDb(modelEntities, messages, addMissing);
    }
/**
     * @author 郑小康
     * 根据GenericHelperInfo实例创建DatabaseUtil实例
     *
     * */

    public void checkDb(Map<String, ModelEntity> modelEntities, List<String> messages, boolean addMissing) {
        DatabaseUtil dbUtil = new DatabaseUtil(this.helperInfo);
        dbUtil.checkDb(modelEntities, messages, addMissing);
    }
/**
     * @author jack
     * 1.创建一个线程池,获取dataSource中的max-worker-pool-size,作为最大线程限制
     *
     * 2.tableNames fkTableNames indexTableNames 三个TreeSet<String>在开始都是一样的
     *
     * 3.如果表信息为空,那么就是没有对应数据库
     *
     * 4.获取modelEntities的Modelentity集合
     *
     * 5.获取数据库schemaName
     *
     * 6.将没有添加的表给加到CreateTableCallable这个线程的对象,通过Future模式创建表
     *
     * 7.创建新增加的外键关系
     *
     * 8.创建新增加的索引关系
     *
     * */
    public void checkDb(Map<String, ModelEntity> modelEntities, List<String> colWrongSize, List<String> messages, boolean checkPks, boolean checkFks, boolean checkFkIdx, boolean addMissing) {
       *******代码太长
    }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏后端沉思录

自定义参数解析器

开发中,app端给服务端会传基础参数、其他参数,一般基础参数app端都会传给服务端,其他参数则是根据不同接口传不同参数。若以表单的形式提交的数据:

1093
来自专栏高爽的专栏

Java序列化(一)

 Java序列化,一个日常开发中比较少用到的技术。正常情况下,JVM启动后,我们可以创建对象生存其内,JVM关闭后,我们创建过的对象都随之销毁,资源释...

1960
来自专栏专注 Java 基础分享

Spring框架学习之依赖注入

     Spring框架从2004年发布的第一个版本以来,如今已经迭代到5.x,逐渐成为JavaEE开发中必不可少的框架之一,也有人称它为Java下的第一开源...

19211
来自专栏你不就像风一样

Jsoup+FastJson制作新闻数据接口-Demo

经常用到 编写出来直接拿来用 这个适合在服务端结合servlet来做接口:需要下载jsoup+fastjson两个包 Jsoup使用手册:http:/...

602
来自专栏Java 技术分享

两篇 Spring 总结(一)

1003
来自专栏10km的专栏

fastjson:对于Exception中复杂类型(enum,...以及自定义类型)成员的处理

如果一个Exception类中有枚举类型或其他复杂类型(比如java.util.Date,或自定义类型)的成员,fastjson反序列化会抛出异常。 /...

2166
来自专栏码匠的流水账

聊聊spring.cloud.gateway.default-filters

本文主要研究下spring.cloud.gateway.default-filters

581
来自专栏用户画像

Maven配置本地环境和线上环境

有时候,我们在开发和部署的时候,有很多配置文件的数据是不一样的,比如数据库的properties文件等等每次部署或者开发都要改配置文件太麻烦了,这个时候,就需要...

734
来自专栏一个会写诗的程序员的博客

《一切皆是映射:代码的本质》Java 动态读取源代码,并编译 & 加载执行

动态的执行一段简单代码,采用生成java文件,调用javac编译,反射执行的方式。

873
来自专栏SpringBoot

modal类(JavaBean)什么时候用到序列化(Serializable)

版权声明:本文为博主原创文章,未经博主允许不得转载。

602

扫码关注云+社区