`
zybing
  • 浏览: 456066 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Roller4.0.1初始化时候的4大组件

阅读更多

Roller在初始化时候,主要做:

 

 

        getPropertiesManager().initialize();  // Manages global properties for Roller.


        getThemeManager().initialize();       // Manager interface for accessing Theme related objects.


        getThreadManager().initialize();      //  Thread management for executing scheduled and asynchronous tasks.


        getIndexManager().initialize();        //  Lucene implementation fo IndexManager





PropertiesManager:

 

   这个类好像除了保存配置外,没有其他作用

 

PropertiesManager的初始化过程:

初始化过程:

    /**
     * @inheritDoc
     */
    public void initialize() throws InitializationException {
        
        Map props = null;
        try {
            props = this.getProperties();   // 从表:roller_properties: 通过 strategy.getNamedQuery("RuntimeConfigProperty.getAll")  JPA的命名查询,
                                                        // 在persistence.xml文件中加载的org/apache/roller/planet/pojos/RuntimeConfigProperty.orm.xml中定义

            // 以下2句一样的,为什么区分开?
            // 作用:将本地配置中和从数据库中读取的属性设置对比一下,如果数据库中没有配置,就加上
            // 本地的配置文件为: /org/apache/roller/weblogger/config/runtimeConfigDefs.xml
            if(props.size() < 1) {
                // empty props table ... load defaults
                props = initializeMissingProps(props);
            } else {
                // found existing props ... check for new props
                props = initializeMissingProps(props);
            }

             // 把这些Property配置,都持久化
            // save our changes
            this.saveProperties(props);
        } catch (Exception e) {
            log.fatal("Failed to initialize runtime configuration properties."+
                    "Please check that the database has been upgraded!", e);
            throw new RuntimeException(e);
        }
        
    }

 

ThemeManagerImpl

ThemeManagerImpl 使用的是: org.apache.roller.weblogger.business.themes 中的 ThemeManagerImpl

这个类的初始化,非常简单,就是加载磁盘上的Theme。

    public void initialize() throws InitializationException {
        
        log.debug("Initializing Theme Manager");
        
        if(themeDir != null) {
            // rather than be lazy we are going to load all themes from
            // the disk preemptively and cache them
            this.themes = loadAllThemesFromDisk();
            
            log.info("Loaded "+this.themes.size()+" themes from disk.");
        }
    }

 加载磁盘上的Theme,还有一个内部类:FilenameFilter

 加载的Theme,从WebloggerConfig.getProperty("themes.dir") 中加载(初始化时候,在servletContext.getRealPath("/")+File.separator+"themes" 目录)

 每个Theme文件,生成一个SharedThemeFromDir类。

 

 

JPAThreadManagerImpl

JPAThreadManagerImpl 在 org.apache.roller.weblogger.business.runnable.ThreadManagerImpl 基础上,增加了一个由数据库管理的锁定机制。ThreadManagerImpl 实现了 Interface  ThreadManager。

 

在ThreadManager中,主要有2类线程:

    // our own scheduler thread 定时线程
    private Thread schedulerThread = null;
    
    // a simple thread executor 一个线程池 serviceScheduler = Executors.newCachedThreadPool();
    private final ExecutorService serviceScheduler;
 

 

在initlialize中,主要完成:

 对线程的初始化,每种线程在数据库保留一个锁。

通过配置文件中的 tasks.enabled , 设置需要哪几类线程

系统的缺省配置为:

tasks.enabled=ScheduledEntriesTask,ResetHitCountsTask,TurnoverReferersTask,PingQueueTask

 

ScheduledEntriesTask:

  继承 RollerTaskwithLeasing --> 继承 RollerTask ---> 实现Runnable接口;

  如果publication时间到了,进行定时出示weblog entries进入到Published status

 

ResetHitCountsTask:

  继承 RollerTaskwithLeasing --> 继承 RollerTask ---> 实现Runnable接口;

  重置weblog hit counts (点击数量)

 

TurnoverReferersTask:

  继承 RollerTaskwithLeasing --> 继承 RollerTask ---> 实现Runnable接口;

  Reset referer counts : 重置引用数量

 

PingQueueTask:

  继承 RollerTaskwithLeasing --> 继承 RollerTask ---> 实现Runnable接口;

  定时处理ping queue,在context 初始化的时候进行设置(由org.apache.roller.weblogger.ui.core.RollerContext)

  目前队列间隔时间只在 org.apache.roller.weblooger.config.Pingconfig启动的时候进行设置

 

-----------------------------------------------

以上4个线程都放在一个List<RollerTask>中,然后被TaskScheduler包装后,放入到schedulerThread中,

 

    public void initialize() throws InitializationException {
                    
        // initialize tasks, making sure that each task has a tasklock record in the db
        List<RollerTask> webloggerTasks = new ArrayList<RollerTask>();

        String tasksStr = WebloggerConfig.getProperty("tasks.enabled");
         /* 现在实际的配置情况如下:
            # Tasks which are enabled.  Only tasks listed here will be run.
            tasks.enabled=ScheduledEntriesTask,ResetHitCountsTask,TurnoverReferersTask,PingQueueTask
         */
       
        // 按照逗号,进行分割
        String[] tasks = StringUtils.stripAll(StringUtils.split(tasksStr, ","));
        for ( String taskName : tasks ) {
            // 每个Task,具体有哪个类处理,也都是从配置文件中获取
            String taskClassName = WebloggerConfig.getProperty("tasks."+taskName+".class");
            if(taskClassName != null) {
                log.info("Initializing task: "+taskName);
                
                try {
                    // 得到类的实例
                    Class taskClass = Class.forName(taskClassName);
                    RollerTask task = (RollerTask) taskClass.newInstance();
                    task.init();
                    
                    // make sure there is a tasklock record in the db
                    // 每个线程,都在数据库中保存一个lock
                    TaskLock taskLock = getTaskLockByName(task.getName());
                    if (taskLock == null) {
                        log.debug("Task record does not exist, inserting empty record to start with");

                        // insert an empty record
                        taskLock = new TaskLock();
                        taskLock.setName(task.getName());
                        taskLock.setLastRun(new Date(0));
                        taskLock.setTimeAquired(new Date(0));
                        taskLock.setTimeLeased(0);

                        // save it
                        this.saveTaskLock(taskLock);
                    }
                    
                    // add it to the list of configured tasks
                    webloggerTasks.add(task);
                    
                } catch (ClassCastException ex) {
                    log.warn("Task does not extend RollerTask class", ex);
                } catch (WebloggerException ex) {
                    log.error("Error scheduling task", ex);
                } catch (Exception ex) {
                    log.error("Error instantiating task", ex);
                }
            }
        }
        
        // create scheduler
        TaskScheduler scheduler = new TaskScheduler(webloggerTasks);
        
        // start scheduler thread, but only if it's not already running
        if (schedulerThread == null && scheduler != null) {
            log.debug("Starting scheduler thread");
            schedulerThread = new Thread(scheduler, "Roller Weblogger Task Scheduler");
            // set thread priority between MAX and NORM so we get slightly preferential treatment
            schedulerThread.setPriority((Thread.MAX_PRIORITY + Thread.NORM_PRIORITY)/2);
            schedulerThread.start();
        }
    }
 

 

 

 

分享到:
评论

相关推荐

    apache-roller-4.0.1

    这个压缩包"apache-roller-4.0.1"包含了Apache Roller的第4.0.1版本,这是一个基于Java技术构建的Web应用程序。接下来,我们将深入探讨Apache Roller的核心功能、特性以及与Java相关的技术细节。 1. **Apache ...

    apache-roller-src-4.0.1 源代码

    源代码包"apache-roller-src-4.0.1"是Roller项目的4.0.1版本的源码,对开发者来说,这是一个深入了解Roller工作原理和学习Java Web开发的宝贵资源。 1. **Java技术栈**: Apache Roller的源代码基于Java语言编写,...

    apache-roller-src-4.0.1.part2.rar

    apache-roller-src-4.0.1.part2.rar

    roller

    标题中的"roller"很可能指的是Apache Roller,一个开源的博客服务器平台。这个平台允许用户创建、管理和发布多个博客,并且提供了丰富的API供开发者扩展其功能。接下来,我们将深入探讨与"roller"相关的技术知识点。...

    3DMAX卷曲修改器Roller下载

    在3DMAX中,卷曲修改器是实现复杂动态效果的重要工具,而Roller正是这样一款专为卷曲效果设计的插件。这款插件能够帮助用户轻松创建出卷曲形状的模型,不仅限于静态的造型,还能生成逼真的卷曲和展开的动画效果。 ...

    博客(Blog)-Roller Weblogger ,MeEclipse下搭建

    - Roller4.0.1: Roller博客系统的版本号,也是搭建的目标版本。 - Apache Roller: 为Apache软件基金会下的一个开源项目,通过上述提供的下载链接可以获取Roller的源码和压缩文件。 3. **配置步骤**: - 数据库...

    roller安装

    6. **初始化设置**:访问http://localhost:8080/roller,按照向导完成初始管理员账户的创建和系统设置。 7. **使用与调试**:现在你可以登录管理界面,开始创建博客、管理用户、安装插件等活动。如果遇到问题,可以...

    教育科研-学习工具-Roller卷轴式剃须组件.zip

    《教育科研-学习工具-Roller卷轴式剃须组件》 在当今科技日新月异的时代,教育科研领域不断涌现出各种创新技术,旨在提升学习体验和教学效果。本主题聚焦于一个独特的应用——Roller卷轴式剃须组件,这是一种结合了...

    Roller初体验

    【标题】:“Roller初体验” 在IT领域,Roller是一款开源的Java博客系统,它提供了丰富的功能,便于用户创建、管理和分享个人或团队的博客内容。本文将围绕Roller的初体验,深入探讨其核心特性,源码结构以及如何与...

    granite-fate-roller:命运骰子辊网组件

    使用安装组件: $ npm i @granite-elements/granite-fate-roller 2.在您要使用的元素中导入granate-fate-roller 安装后,将其导入您的应用程序。 通常,您只想导入granite-fate-roller.js (环绕spectre.css )或...

    Apacheroller

    ### Apache Roller 安装指南详解 #### 概览 本文档详细介绍了如何安装 Apache Roller Weblogger 软件。它涵盖了安装前需要准备的...随着进一步的实践和探索,你可以发掘出更多有关 Roller 的高级功能和定制化选项。

    Apache Roller

    Apache Roller是一个全功能,多用户和组博客服务器,适合大型和小型博客网站。它运行一个Java Web应用程序应该能够运行在任何Java EE服务器和关系数据库。目前,Apache Roller能很好的支持Tomcat和MySQL。 本人用...

    roller5 for tomcat

    同时,Roller 5提供了大量的可扩展点,允许用户根据需求开发自定义的插件,增强博客的功能性和个性化。 对于博客内容管理,Roller 5提供了完善的后台工具。管理员可以轻松管理用户、分类、标签,还能对评论进行审核...

    roller install、user、template guide

    4. 配置环境变量:将roller的可执行路径添加到系统的PATH环境变量中,以便于命令行调用。 5. 运行安装脚本:对于Linux或macOS,可能是bash安装脚本;对于Windows,可能是一个批处理文件。 6. 数据库配置:根据需求...

    开源Java博客Roller v5.0 for tomcat.zip

    Roller 是一个全功能的多用户博客平台,于2002年首发,采用Java语言开发,设计精巧,源代码是很好的学习资料。它支持weblogging应有的特性如:评论功能,所见即所得HTML编辑,TrackBack,提供页面模板,RSS ...

    apache优秀Java开源项目源代码—— apache-roller!

    6. **国际化与本地化**:Roller支持多语言,源码中包含了资源文件,如message.properties,展示了如何实现国际化和本地化功能。 7. **安全与认证**:Roller提供了用户登录、权限控制等功能,源码中有实现基于角色的...

    roller-user-guide.pdf

    - **初始化Ping目标**:介绍了如何初始化默认的Ping目标。 综上所述,《roller-user-guide.pdf》为用户提供了一套全面的使用指南,覆盖了从安装到日常管理等各个环节,旨在帮助用户充分利用Apache Roller的强大功能...

Global site tag (gtag.js) - Google Analytics