- 浏览: 456066 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (233)
- 技术日志 (87)
- portal (7)
- jBPM/Activiti (34)
- Roller学习 (18)
- Java基础、网站开发 (19)
- 收藏URL (4)
- UML (3)
- linux操作 (7)
- 工作环境准备 (8)
- Mina (15)
- tomcat (8)
- Mylyn (3)
- sina网站 (2)
- 规则引擎 (3)
- 工作记录 (11)
- html(5) (9)
- 手机开发 (3)
- oracle (26)
- 常用的 (2)
- maven (8)
- hadoop (0)
- xml (7)
- 错误解决 (5)
- linux (1)
- c# (2)
- c++ (1)
- node.js (1)
- 银行业务知识 (1)
- Java调试 (0)
最新评论
-
tomcatmeng:
请问候选用户是怎样task自己的任务,看网上说先根据任务id先 ...
jBPM4.4:ForEach的使用--动态设置参与人数 -
maoweiwer:
友情提醒:如果是在MYSQL下创建数据库,则还需要更改\jbp ...
jBPM4.4: 创建数据库表 -
zybing:
ganjiang 写道有点疑惑,请lz指点,1.那个“depl ...
jBPM4.4:如何图示化显示当前的流程执行到了哪一步骤 -
zybing:
ganjiang 写道有点疑惑,请lz指点,1.那个“depl ...
jBPM4.4:如何图示化显示当前的流程执行到了哪一步骤 -
ganjiang:
有点疑惑,请lz指点,1.那个“deployId”不知是那个i ...
jBPM4.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(); } }
发表评论
-
Roller:访问用户的博客 --RequestMappingFilter 负责转向
2010-01-05 17:55 1523在Roller中,访问博客,通过 http://roller ... -
Roller:roller中的Cache
2010-01-04 17:12 1293Roller中的文章,通过 org.apache.ro ... -
Roller:写日志
2010-01-04 14:00 1210在Roller中,写日志,由/roller-ui/author ... -
Roller:创建网志
2010-01-04 13:50 1160用户可以填写自己的网志,首先要创建一个网志。 通过/r ... -
Roller:EntryAdd
2009-12-18 15:15 1238Roller的EntryAdd Action,继承自 : ... -
Roller:用户登陆成功后的2个转向
2009-12-17 10:12 937用户登陆 : /roller-ui/login-red ... -
Roller中的User对象 --- 以后再写
2009-12-14 14:26 1082这次看Roller,用户管理体系不是重点,用户User对象以后 ... -
Roller 用户登陆 --- acegi验证
2009-12-14 14:25 2741创建好用户,用户就可以登陆了。 在Roller的系统 ... -
学习Roller中需要了解的技术
2009-12-14 13:35 01. SSO:单点登陆 2. 再次熟悉一下Tomca ... -
Roller:创建用户
2009-12-08 14:17 1472创建用户:调用的是:r ... -
第一次进入roller,创建用户、创建blog、创建首页
2009-12-08 13:26 1992Roller安装完毕,数据库也创建好了,进入Roller,访问 ... -
第一次访问Roller --- 创建数据库所需环境
2009-12-04 14:07 1302环境: 在tomcat中, 第一次访问Roller,要 ... -
Roller4.0.1用户访问时的系统动作 -- rollerSession Listen
2009-12-04 13:33 1327系统的初始化过程已经完成,下一步用户该访问系统了。 R ... -
Roller4.0.1使用的监听器
2009-11-27 11:46 1467Roller4.0.1中,使用了2个监听器: ... -
Roller4.0.1的Filter
2009-11-27 11:13 1453Roller使用了一些自己的Filter ... -
Roller4.0.1源码编译安装
2009-11-27 09:54 1685源码编译Roller4.0.1 所用的eclipse3.4, ... -
编译Roller4.0.1 所需组件
2009-11-27 09:53 1412Roller4.0.1 ,基于Java SE5 <! ... -
安装Roller
2009-11-27 09:51 1564在Roller提供的install-guide ...
相关推荐
这个压缩包"apache-roller-4.0.1"包含了Apache Roller的第4.0.1版本,这是一个基于Java技术构建的Web应用程序。接下来,我们将深入探讨Apache Roller的核心功能、特性以及与Java相关的技术细节。 1. **Apache ...
源代码包"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
标题中的"roller"很可能指的是Apache Roller,一个开源的博客服务器平台。这个平台允许用户创建、管理和发布多个博客,并且提供了丰富的API供开发者扩展其功能。接下来,我们将深入探讨与"roller"相关的技术知识点。...
在3DMAX中,卷曲修改器是实现复杂动态效果的重要工具,而Roller正是这样一款专为卷曲效果设计的插件。这款插件能够帮助用户轻松创建出卷曲形状的模型,不仅限于静态的造型,还能生成逼真的卷曲和展开的动画效果。 ...
- Roller4.0.1: Roller博客系统的版本号,也是搭建的目标版本。 - Apache Roller: 为Apache软件基金会下的一个开源项目,通过上述提供的下载链接可以获取Roller的源码和压缩文件。 3. **配置步骤**: - 数据库...
6. **初始化设置**:访问http://localhost:8080/roller,按照向导完成初始管理员账户的创建和系统设置。 7. **使用与调试**:现在你可以登录管理界面,开始创建博客、管理用户、安装插件等活动。如果遇到问题,可以...
《教育科研-学习工具-Roller卷轴式剃须组件》 在当今科技日新月异的时代,教育科研领域不断涌现出各种创新技术,旨在提升学习体验和教学效果。本主题聚焦于一个独特的应用——Roller卷轴式剃须组件,这是一种结合了...
【标题】:“Roller初体验” 在IT领域,Roller是一款开源的Java博客系统,它提供了丰富的功能,便于用户创建、管理和分享个人或团队的博客内容。本文将围绕Roller的初体验,深入探讨其核心特性,源码结构以及如何与...
使用安装组件: $ npm i @granite-elements/granite-fate-roller 2.在您要使用的元素中导入granate-fate-roller 安装后,将其导入您的应用程序。 通常,您只想导入granite-fate-roller.js (环绕spectre.css )或...
### Apache Roller 安装指南详解 #### 概览 本文档详细介绍了如何安装 Apache Roller Weblogger 软件。它涵盖了安装前需要准备的...随着进一步的实践和探索,你可以发掘出更多有关 Roller 的高级功能和定制化选项。
Apache Roller是一个全功能,多用户和组博客服务器,适合大型和小型博客网站。它运行一个Java Web应用程序应该能够运行在任何Java EE服务器和关系数据库。目前,Apache Roller能很好的支持Tomcat和MySQL。 本人用...
同时,Roller 5提供了大量的可扩展点,允许用户根据需求开发自定义的插件,增强博客的功能性和个性化。 对于博客内容管理,Roller 5提供了完善的后台工具。管理员可以轻松管理用户、分类、标签,还能对评论进行审核...
4. 配置环境变量:将roller的可执行路径添加到系统的PATH环境变量中,以便于命令行调用。 5. 运行安装脚本:对于Linux或macOS,可能是bash安装脚本;对于Windows,可能是一个批处理文件。 6. 数据库配置:根据需求...
Roller 是一个全功能的多用户博客平台,于2002年首发,采用Java语言开发,设计精巧,源代码是很好的学习资料。它支持weblogging应有的特性如:评论功能,所见即所得HTML编辑,TrackBack,提供页面模板,RSS ...
6. **国际化与本地化**:Roller支持多语言,源码中包含了资源文件,如message.properties,展示了如何实现国际化和本地化功能。 7. **安全与认证**:Roller提供了用户登录、权限控制等功能,源码中有实现基于角色的...
- **初始化Ping目标**:介绍了如何初始化默认的Ping目标。 综上所述,《roller-user-guide.pdf》为用户提供了一套全面的使用指南,覆盖了从安装到日常管理等各个环节,旨在帮助用户充分利用Apache Roller的强大功能...