JForum启动过程分析

       互联网上有着众多优秀的开源软件,但是却很少有系统化的,优秀的文档来说明这些软件的使用、开发与研究。而这些软件的中文文档和设计文档就更加少之又少了。我们试图编写一些这方面的中文文章,讲解这些优秀开源软件的使用、开发与研究问题,最终形成手册。由于水平有限,希望大家多多支持,有写得不当的地方也恳请大家指正。

  研究JForum论坛应该从JForum的启动加载过程开始,这样才能够更清楚程序运行的来龙去脉。

  JForum架构是遵循MVC设计模式实现的,其中net.jforum.JForum类是其实现MVC设计模式的控制器,也就是说它是MVC中的“C”。查看net.jforum.JForum.java文件我们不难发现其实JForum.java文件是一个继承JForumBaseServlet.java的类,而JForumBaseServlet.java是继承HttpServlet的类。也就是说我们可以把JForum.java当作一个Servlet来看待。

  那么,初始化过程当中首先被调用的就是JForum.java中的init()函数,在init()函数中调用了super.init()以及super.startFrontController(),所以JForum启动的初始化过程还包括了他的基类JForumBaseServlet.java的启动过程。下面我们就来看看JForumBaseServlet.java在初始化的时候都做了那些事情。

  net.jforum.JForumBaseServlet.java的初始化:

  1、判断JForum论坛是否以调试模式启动运行,通过读取web.xml中net.jforum.JForum的初始化参数“development”来确定。该值默认值为“true”,所以JForum论坛默认是以调试模式运行的。

  2、载入系统运行日志log4j的配置文件。

  3、调用ConfigLoader.startSystemglobals(appPath)读取\WEB-INF\config\SystemGlobals.properties的配置信息。SystemGlobals.properties的配置信息还是比较多的,基本上包括了JForum论坛系统所有的全局变量配置了,以后我们有机会再一一论述。

  4、调用ConfigLoader.startCacheEngine()启动系统缓存引擎。

  5、设置页面模版引擎,JForum使用的FreeMarker来实现论坛展现模版定制的功能,使普通的美术设计人员也能够通过修改默认模版来定制论坛的展现方式。

  6、调用ModulesRepository.init(SystemGlobals.getValue(ConfigKeys.CONFIG_DIR)),载入程序模块映射。具体的配置文件是\WEB-INF\config\modulesMapping.properties,该文件描述了模块名与实现该模块功能的java类的对应关系。

  7、调用loadConfigStuff(),载入页面URL与参数的配置;国际化配置文件;URL与模版具体文件的具体文件路径与名字的对应配置,详见\WEB-INF\config\templatesMapping.properties文件;载入BB Code配置。

  我们再来看看net.jforum.JForumBaseServlet.java的startFrontController()函数做了些什么。

  1、调用SystemGlobals.loadQueries(SystemGlobals.getValue(ConfigKeys.SQL_QUERIES_GENERIC))和SystemGlobals.loadQueries(SystemGlobals.getValue(ConfigKeys.SQL_QUERIES_DRIVER))载入SQL语句。在JForum中为了支持多数据库,其所有的SQL语句都是放在配置文件当中的。

  2、载入quartz工作任务配置。关于quartz你可以参考这个连接:http://www.opensymphony.com/quartz/

  3、调用ConfigLoader.loadDaoImplementation()载入DAO实现类,这是实现多数据库支持的一种方式。关于实现多数据库支持还有更多更好的方法,例如:ibatis、Hibernate等。

  4、调用ConfigLoader.listenForChanges()加载需要监控其更新变化的文件,对文件的更新进行监控。

  5、调用ConfigLoader.startSearchIndexer()初始化论坛搜索引擎。

  6、调用ConfigLoader.startSummaryJob()启动论坛发帖汇总信息电子邮件发送任务。

  从上面的说明中可以看到net.jforum.JForumBaseServlet.java的初始化基本上包括了JForum的大部分初始化工作。

  下面我们回到net.jforum.JForum.java文件看看还有什么初始化工作。

  1、调用ForumStartup.startForumRepository()载入论坛相关信息到缓存中,包括论坛目录信息、用户信息、在线用户信息等。

  2、调用RankingRepository.loadRanks()载入论坛用户等级信息。

  3、调用SmiliesRepository.loadSmilies()载入表情符号信息。

  4、调用BanlistRepository.loadBanlist()载入阻止列表。

  到此为止JForum论坛系统的初始化过程结束。

猜你喜欢

转载自dinus.iteye.com/blog/1505854