- 浏览: 447777 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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 1494在Roller中,访问博客,通过 http://roller ... -
Roller:roller中的Cache
2010-01-04 17:12 1249Roller中的文章,通过 org.apache.ro ... -
Roller:写日志
2010-01-04 14:00 1173在Roller中,写日志,由/roller-ui/author ... -
Roller:创建网志
2010-01-04 13:50 1135用户可以填写自己的网志,首先要创建一个网志。 通过/r ... -
Roller:EntryAdd
2009-12-18 15:15 1205Roller的EntryAdd Action,继承自 : ... -
Roller:用户登陆成功后的2个转向
2009-12-17 10:12 903用户登陆 : /roller-ui/login-red ... -
Roller中的User对象 --- 以后再写
2009-12-14 14:26 1040这次看Roller,用户管理体系不是重点,用户User对象以后 ... -
Roller 用户登陆 --- acegi验证
2009-12-14 14:25 2704创建好用户,用户就可以登陆了。 在Roller的系统 ... -
学习Roller中需要了解的技术
2009-12-14 13:35 01. SSO:单点登陆 2. 再次熟悉一下Tomca ... -
Roller:创建用户
2009-12-08 14:17 1445创建用户:调用的是:r ... -
第一次进入roller,创建用户、创建blog、创建首页
2009-12-08 13:26 1947Roller安装完毕,数据库也创建好了,进入Roller,访问 ... -
第一次访问Roller --- 创建数据库所需环境
2009-12-04 14:07 1273环境: 在tomcat中, 第一次访问Roller,要 ... -
Roller4.0.1用户访问时的系统动作 -- rollerSession Listen
2009-12-04 13:33 1296系统的初始化过程已经完成,下一步用户该访问系统了。 R ... -
Roller4.0.1使用的监听器
2009-11-27 11:46 1442Roller4.0.1中,使用了2个监听器: ... -
Roller4.0.1的Filter
2009-11-27 11:13 1412Roller使用了一些自己的Filter ... -
Roller4.0.1源码编译安装
2009-11-27 09:54 1659源码编译Roller4.0.1 所用的eclipse3.4, ... -
编译Roller4.0.1 所需组件
2009-11-27 09:53 1384Roller4.0.1 ,基于Java SE5 <! ... -
安装Roller
2009-11-27 09:51 1532在Roller提供的install-guide ...
相关推荐
apache- roller-4.0.1
apache-roller-src-4.0.1 源代码
apache-roller-src-4.0.1.part2.rar
教育科研-学习工具-Roller卷轴式剃须组件.zip
使用安装组件: $ npm i @granite-elements/granite-fate-roller 2.在您要使用的元素中导入granate-fate-roller 安装后,将其导入您的应用程序。 通常,您只想导入granite-fate-roller.js (环绕spectre.css )或...
Apache Roller是一个全功能,多用户和组博客服务器,适合大型和小型博客网站。它运行一个Java Web应用程序应该能够运行在任何Java EE服务器和关系数据库。目前,Apache Roller能很好的支持Tomcat和MySQL。 本人用...
NULL 博文链接:https://moving200x.iteye.com/blog/1749902
Safety evaluation of table liner for vertical roller mill by modified fatigue limit
Roller 是一个全功能的多用户博客平台,于2002年首发,采用Java语言开发,设计精巧,源代码是很好的学习资料。它支持weblogging应有的特性如:评论功能,所见即所得HTML编辑,TrackBack,提供页面模板,RSS ...
该软件是一个开源的BLOG系统,是目前的最新版。 其中用到的技术有:SPRING HIBERNATE STRUTS等。 一共4部分
apache-roller-srapaapache-roller-srcche-roller-srccapache-rolaapache-roller-srcpache-roller-srcler-srcapapache-roller-srcache-roller-srcapache-roller-src
毕竟网上关于roller4的资料少之又少.对于cas的单点集成就更是少的可怜.我试验了一下roller自带的security.xml配置的cas方案.简直报错的夸张.根本没发用.roller使用的是acegi的用户验证框架.我自己下了一套acegi配置...
apache-rollapachapache-roller-srce-roller-srcer-srcapache-rolleapacapache-roller-srche-roller-srcr-srcapache-roapache-roller-srcller-srcapache-roller-src
离线安装包,亲测可用
apache-roller-src apache-roller-src apache-roller-src apache-roller-src apache-roller-src apache-roller-src apache-roller-src apache-roller-src apache-roller-src apache-roller-src