- 浏览: 457053 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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:如何图示化显示当前的流程执行到了哪一步骤
Roller4.0.1中,使用了2个监听器:
<!-- Context Listeners --> <!-- 控制session的启动和关闭 --> <listener> <listener-class>org.apache.roller.weblogger.ui.core.RollerSession</listener-class> </listener> <!-- 初始化Roller web application/context --> <listener> <listener-class>org.apache.roller.weblogger.ui.core.RollerContext</listener-class> </listener> <!-- Tile的一个监听器 --> <listener> <listener-class>org.apache.tiles.web.startup.TilesListener</listener-class> </listener>
先说明一下RollerContext:
RollerContext 继承了 org.springframework.web.context.ContextLoaderListener
实现了 javax.servlet.ServletContextListerner
javax.servlet.ServletContextListerner是Listener接口之一,在container启动和关闭的时候,会调用ServletContextListerner,
Roller就是在ServletContextListerner中完成初始化的。
先把最后的总结提前,在RollerContext中的contextInitialized中完成
总结一下: 1. 首先设置一些最基本的参数, 2. 做启动的一些准备工作 : WebloggerStartup.prepare():完成对数据库和mail provider的确认 3. 随后进行最主要的工作: WebloggerFactory.bootstrap() : 将处理流程串联起来(trigger bootstrapping process):通过WebloggerFactory,得到WebloggerProvider,再通过WebloggerProvider,得到 Weblogger WebloggerFactory.getWeblogger().initialize():进行一系列的初始化(trigger initialization process),这个初始化也就是Weblogger在初始化 4. 如果有必要,初始化planet(参数 planet.aggregator.enable) 5. 初始化Acegi权限 6. 设置velocity模板引擎
首先完成spring的初始化过程,
然后设定资源上传的目录,保存在WebloggerConfig中(基本上所有的配置都从这个文件中获取)
开始最核心的操作了:
WebloggerStartup.prepare
在prepare中, 首先对DB和Mail Provider进行准备
DatabaseProvider、MailProvider
1. 对配置中的信息进行读取,进行测试
2. 随后对数据库的表进行校验,必须要有的表是否存在
isCreationRequired:对表rolleruser、userrole进行检查,只要表存在就可以了。
通过com.getMetaData().getTables进行
isUpgradeRequired:检测是否需要升级
这个是读取数据库中表roller_properties的名为roller.database.version的行
以及通过配置文件roller-version.properties中的ro.version
进行比较
在DB和邮件 Provider检查好以后,进行:
WebloggerFactory.bootstrap()
WebloggerFactory.getWeblogger().initialize()
WebloggerFactory.bootstrap()的过程,bootstrap(引导) Weblogger business tier
通过配置文件(类WebloggerConfig获取weblogger.provider.class配置 )获取WebloggerProvider实例
再调用WebloggerFactory中bootstrap(webloggerProvider)
bootstrap(webloggerProvider)其实就是把WebloggerProvider保存下来,同时调用WeblogProvider的bootstrap(),
WebloggerConfig同时读取3个配置文件:
缺省的配置文件:org.apache.roller.weblogger.config.roller.properties
客户化的配置: roller-customer.properties
JVM参数: roller.customer.config---程序中的注释是: external config file
前2个用getResourceAsStream方式进行加载
最后一个用:System.getProperty方式加载
然后对配置进行处理:读取config.expandedProperties的话,对这些属性进行expand,在重新设置回去,如果这些属性进行了配置的话 (用其他值进行替换,程序中用System.getProperties中的值进行替换)
同时也对log系统的配置进行初始化,读取以"log4j."开头的属性
在源码中,static {} 中有这么一段:
// we'll need this to get at our properties files in the classpath :是需要先加载到这个包吗?
Class config_class = Class.forName("org.apache.roller.weblogger.config.WebloggerConfig");
// first, lets load our default properties
InputStream is = config_class.getResourceAsStream(default_config);
config.load(is);
........
在配置文件中,
weblogger.provider.class配置成:org.apache.roller.weblogger.business.GuiceWebloggerProvider
GuiceWebloggerProvider构造函数也从配置文件中读取:guice.backend.module ,用于生成Weblogger
缺省配置是:org.apache.roller.weblogger.business.jpa.JPAWebloggerModule ,这是guice中的一个Module
下面的做法应该是guice中的要求了(不熟悉,看了以后再说)
在Provider.bootstrap获的Weblogger以后,Provider的初始化过程结束。
然后进入到weblogger的initialize过程中。
要弄清楚Weblogger的initialize,要了解WebloggerProvider获取到的Weblogger是怎么来的,这个要看一下guice了。
简单了解了一下guice,还是比较好了解的,-----先能看懂再说,使用guice开发以后再说,等要修改功能的时候必定要学会的。
看了一下,其实还是很简单的。通过@Inject来标记(看http://tech.it168.com/zt/guice/index.html有说明)
guice.backend.module中的代码如下:
public class JPAWebloggerModule implements Module { public void configure(Binder binder) { binder.bind(Weblogger.class).to(JPAWebloggerImpl.class); binder.bind(JPAPersistenceStrategy.class); binder.bind(org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy.class); binder.bind(AutoPingManager.class).to( JPAAutoPingManagerImpl.class); binder.bind(BookmarkManager.class).to( JPABookmarkManagerImpl.class); binder.bind(PingQueueManager.class).to( JPAPingQueueManagerImpl.class); binder.bind(PingTargetManager.class).to( JPAPingTargetManagerImpl.class); binder.bind(PropertiesManager.class).to( JPAPropertiesManagerImpl.class); binder.bind(RefererManager.class).to( JPARefererManagerImpl.class); binder.bind(ThreadManager.class).to( JPAThreadManagerImpl.class); binder.bind(UserManager.class).to( JPAUserManagerImpl.class); binder.bind(WeblogManager.class).to( JPAWeblogManagerImpl.class); binder.bind(ReferrerQueueManager.class).to(ReferrerQueueManagerImpl.class); binder.bind(FileManager.class).to( FileManagerImpl.class); binder.bind(IndexManager.class).to( IndexManagerImpl.class); binder.bind(PluginManager.class).to( PluginManagerImpl.class); binder.bind(ThemeManager.class).to( ThemeManagerImpl.class); binder.bind(URLStrategy.class).to( MultiWeblogURLStrategy.class); } }
实现Weblogger接口的是: JPAWebloggerImpl.class ---- 完整的路径是: org.apache.roller.weblogger.business.jpa.JPAWebloggerImpl.class--这个是主要的实现者
JPAWebloggerImpl 继承: org.apache.roller.weblogger.business.WebloggerImpl,
WebloggerImpl 实现接口: org.apache.roller.weblogger.business.Weblogger
下面主要对initialize所作的工作进行分析:
首先是4个Manager的初始化:
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(); // Interface to Roller's Lucene-based search facility.
实现都在: org.apache.roller.weblogger.business.jpa中。
中间有一步是ping服务器,没有仔细看。
最后是进行一次db的flush。采用的就是JPA中最基本的方式:
在JPAWebloggerImpl中,使用的是:
public void flush() throws WebloggerException { this.strategy.flush(); }
strategy是:JPAPersistenceStrategy类型,它的flush为:
/** * Flush changes to the datastore, commit transaction, release em. * @throws org.apache.roller.weblogger.WebloggerException on any error */ public void flush() throws WebloggerException { try { EntityManager em = getEntityManager(true); em.getTransaction().commit(); } catch (PersistenceException pe) { throw new WebloggerException(pe); } }
就只有一个获取EntityManager,进行一次commit;
幸好前2天周末,才看了JPA的一些技术(非常可惜的是雨果丢了: http://www.360doc.com/content/091130/09/41237_10047630.html )
JPA获取到EntityManager,就会对数据库进行一次检查,如果没有表,会往数据库中建表。
注意到: 注释中写的“release em”,但是实际上没有释放em,这是怎么回事?(虽然有一个释放em的filter,但是这里所有的过程是在listener中进行的)
自此,Weblogger的所有动作完成了。
总结一下:
1. 首先设置一些最基本的参数,
2. 做启动的一些准备工作 : WebloggerStartup.prepare():完成对数据库和mail provider的确认
3. 随后进行最主要的工作:
WebloggerFactory.bootstrap() : 将处理流程串联起来(trigger bootstrapping process):通过WebloggerFactory,得到WebloggerProvider,再通过WebloggerProvider,得到Weblogger
WebloggerFactory.getWeblogger().initialize():进行一系列的初始化(trigger initialization process),这个初始化也就是Weblogger在初始化
4. 如果有必要,初始化planet(参数 planet.aggregator.enable)
5. 初始化Acegi权限
6. 设置velocity模板引擎
发表评论
-
Roller:访问用户的博客 --RequestMappingFilter 负责转向
2010-01-05 17:55 1528在Roller中,访问博客,通过 http://roller ... -
Roller:roller中的Cache
2010-01-04 17:12 1295Roller中的文章,通过 org.apache.ro ... -
Roller:写日志
2010-01-04 14:00 1215在Roller中,写日志,由/roller-ui/author ... -
Roller:创建网志
2010-01-04 13:50 1166用户可以填写自己的网志,首先要创建一个网志。 通过/r ... -
Roller:EntryAdd
2009-12-18 15:15 1239Roller的EntryAdd Action,继承自 : ... -
Roller:用户登陆成功后的2个转向
2009-12-17 10:12 940用户登陆 : /roller-ui/login-red ... -
Roller中的User对象 --- 以后再写
2009-12-14 14:26 1094这次看Roller,用户管理体系不是重点,用户User对象以后 ... -
Roller 用户登陆 --- acegi验证
2009-12-14 14:25 2742创建好用户,用户就可以登陆了。 在Roller的系统 ... -
学习Roller中需要了解的技术
2009-12-14 13:35 01. SSO:单点登陆 2. 再次熟悉一下Tomca ... -
Roller:创建用户
2009-12-08 14:17 1474创建用户:调用的是:r ... -
第一次进入roller,创建用户、创建blog、创建首页
2009-12-08 13:26 1999Roller安装完毕,数据库也创建好了,进入Roller,访问 ... -
第一次访问Roller --- 创建数据库所需环境
2009-12-04 14:07 1308环境: 在tomcat中, 第一次访问Roller,要 ... -
Roller4.0.1用户访问时的系统动作 -- rollerSession Listen
2009-12-04 13:33 1329系统的初始化过程已经完成,下一步用户该访问系统了。 R ... -
Roller4.0.1初始化时候的4大组件
2009-11-30 18:04 1864Roller在初始化时候,主要做: ... -
Roller4.0.1的Filter
2009-11-27 11:13 1458Roller使用了一些自己的Filter ... -
Roller4.0.1源码编译安装
2009-11-27 09:54 1687源码编译Roller4.0.1 所用的eclipse3.4, ... -
编译Roller4.0.1 所需组件
2009-11-27 09:53 1416Roller4.0.1 ,基于Java SE5 <! ... -
安装Roller
2009-11-27 09:51 1567在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的使用、配置或源码分析。在实际的IT实践中,阅读和理解开源项目的源码是提升技术能力的重要途径,特别是对于工具类...
同时,Roller-0.1.0.jpg可能是插件的截图或者使用教程,用户可以通过查看该图片了解插件的界面和功能。 总的来说,3DMAX卷曲修改器Roller是提高3DMAX用户工作效率和创造力的重要工具,尤其对于那些需要频繁制作卷曲...
- Roller4.0.1: Roller博客系统的版本号,也是搭建的目标版本。 - Apache Roller: 为Apache软件基金会下的一个开源项目,通过上述提供的下载链接可以获取Roller的源码和压缩文件。 3. **配置步骤**: - 数据库...
roller是一款基于Java的Web应用程序,它使用Maven进行构建,并依赖于Servlet容器如Tomcat来运行。其核心特性包括多用户支持、RSS/Atom聚合、自定义模板以及插件机制,这使得它在功能上具有相当的灵活性和可扩展性。 ...
5. **使用体验**:博主可能分享了使用Roller创建博客、发布文章、管理用户和评论的实际操作体验,这有助于读者了解Roller的用户体验和功能实用性。 6. **源码调试与开发**:对于开发者而言,可能会对博主如何使用...
《Roller 5 for Tomcat:一款便捷的博客平台整合指南》 在互联网技术日新月异的今天...通过深入学习和掌握Roller 5的使用,你将能够构建出一个功能完善、自定义程度高的在线社区,让思想和信息的交流更加自由和便捷。
#### 开始使用 Roller 1. **导航至 Roller 并完成安装**: - 在浏览器中访问 Roller 的地址,按照提示完成剩余的安装步骤。 2. **注册用户并创建博客**: - 注册一个新用户账号。 - 创建个人的第一个博客。 #### ...
Apache Roller是一个全功能,多用户和组博客服务器,适合大型和小型博客网站。它运行一个Java Web应用程序应该能够运行在任何Java EE服务器和关系数据库。目前,Apache Roller能很好的支持Tomcat和MySQL。 本人用...
4. 模板语言:解释roller使用的模板引擎,可能是FreeMarker或其他类似技术,以及它的语法。 5. 变量和标签:列出可用的模板变量和标签,它们用于动态显示内容,如文章标题、作者信息等。 6. 测试和调试:如何在本地...
Roller 是一个全功能的多用户博客平台,于2002年首发,采用Java语言开发,设计精巧,源代码是很好的学习资料。它支持weblogging应有的特性如:评论功能,所见即所得HTML编辑,TrackBack,提供页面模板,RSS ...
最近在使用roller4.0和cas的单点登录集成.中间碰到了很多很多的问题.也许我碰到的问题都是属于自己的技术不成熟,能力不够引起的.但是我想应该还是有很多人和我是差不多的吧.我把自己碰到的问题和解决方案写出来和...
apache-roller-srapaapache-roller-srcche-roller-srccapache-rolaapache-roller-srcpache-roller-srcler-srcapapache-roller-srcache-roller-srcapache-roller-src