Jforum学习----启动过程(1)

当前位置:

Jforum学习----启动过程(1)

作者:邓华锋于2010-12-23发布在 分类:jforum / 阅读34869 次 / 共有2条评论  
 public class JForum extends JForumBaseServlet {    
     public void init(ServletConfig config) throws ServletException{    
         //调用父类JForumBaseServlet的init方法初始化    
         super.init(config);    
         super.startApplication();    
         //根据配置文件实例化DBConnection的具体类,并初始化数据源    
         // Start database    
          isDatabaseUp = ForumStartup.startDatabase();    
             
         try {    
              Connection conn = DBConnection.getImplementation().getConnection();    
              conn.setAutoCommit(!SystemGlobals.getBoolValue(ConfigKeys.DATABASE_USE_TRANSACTIONS));    
             //解决MYSQL的问题,确定MYSQL版本,根据版本调整具体使用的JFORUM的MYSQL数据库驱动    
             // Try to fix some MySQL problems    
              MySQLVersionWorkarounder dw = new MySQLVersionWorkarounder();    
              dw.handleWorkarounds(conn);    
                 
             //每个线程一个JForumExecutionContext    
             // Continues loading the forum    
              JForumExecutionContext ex = JForumExecutionContext.get();    
              ex.setConnection(conn);    
              JForumExecutionContext.set(ex);    
                 
             //初始化缓存    
             //将论坛目录,论坛,最多在线用户数,用户数量,最近注册用户等信息放到缓存中    
             // Init general forum stuff    
              ForumStartup.startForumRepository();    
              RankingRepository.loadRanks();    
              SmiliesRepository.loadSmilies();    
              BanlistRepository.loadBanlist();    
          }    
         catch (Throwable e) {    
              e.printStackTrace();    
             throw new ForumStartupException("Error while starting jforum", e);    
          }    
         finally {    
             //启动完毕释放资源    
              JForumExecutionContext.finish();    
          }    
      }    
 } 

 

 public class JForumBaseServlet extends HttpServlet    
 {    
     private static Logger logger = Logger.getLogger(JForumBaseServlet.class);    
    
     protected boolean debug;    
    
     protected void startApplication()    
      {    
         try {    
             //加载通用的SQL语句    
              SystemGlobals.loadQueries(SystemGlobals.getValue(ConfigKeys.SQL_QUERIES_GENERIC));    
             //加载对于某一种数据库的驱动(专属某一库的SQL)相同的key将覆盖通用SQL中的值(properties.put)    
              SystemGlobals.loadQueries(SystemGlobals.getValue(ConfigKeys.SQL_QUERIES_DRIVER));    
             //获取quartz配置文件名    
              String filename = SystemGlobals.getValue(ConfigKeys.QUARTZ_CONFIG);    
             //根据quartz配置文件路径加载quartz配置    
              SystemGlobals.loadAdditionalDefaults(filename);    
             //生成用户认证类(net.jforum.sso.LoginAuthenticator)放到全局map(SystemGlobals.objectProperties)中默认的实现类是:net.jforum.sso.DefaultLoginAuthenticator,不是SSO    
              ConfigLoader.createLoginAuthenticator();    
             // 加载net.jforum.dao.DataAccessDriver并初始化,具体的实现类在系统安装时生成的jforum-custom.conf文件中    
              ConfigLoader.loadDaoImplementation();    
             //监听文件修改(见下面对FileMonitor.java的分析)    
              ConfigLoader.listenForChanges();    
             //初始化SearchFacade,被代理给SearchManager具体实现类在SystemGlobals.properties中配置,默认实现是net.jforum.search.LuceneManager    
              ConfigLoader.startSearchIndexer();    
             //调度发送邮件    
              ConfigLoader.startSummaryJob();    
          }    
         catch (Exception e) {    
             throw new ForumStartupException("Error while starting JForum", e);    
          }    
      }    
    
     public void init(ServletConfig config) throws ServletException    
      {    
         super.init(config);    
    
         try {    
              String appPath = config.getServletContext().getRealPath("");    
              debug = "true".equals(config.getInitParameter("development"));    
             //初始化LOG4J    
              DOMConfigurator.configure(appPath + "/WEB-INF/log4j.xml");    
    
              logger.info("Starting JForum. Debug mode is " + debug);    
             //加载配置文件,在从配置文件中取值时遇到${}格式的会被当作变量进行扩展,与许多脚本语言类似    
              ConfigLoader.startSystemglobals(appPath);    
             //启动缓存引擎    
              ConfigLoader.startCacheEngine();    
             //配置freemarker引擎    
             // Configure the template engine    
              Configuration templateCfg = new Configuration();    
              templateCfg.setTemplateUpdateDelay(2);    
              templateCfg.setSetting("number_format", "#");    
              templateCfg.setSharedVariable("startupTime", new Long(new Date().getTime()));    
    
             //配置freemarker模板的加载目录    
             // Create the default template loader    
              String defaultPath = SystemGlobals.getApplicationPath() + "/templates";    
              FileTemplateLoader defaultLoader = new FileTemplateLoader(new File(defaultPath));    
    
              String extraTemplatePath = SystemGlobals.getValue(ConfigKeys.FREEMARKER_EXTRA_TEMPLATE_PATH);    
                 
             if (StringUtils.isNotBlank(extraTemplatePath)) {    
                 // An extra template path is configured, we need a MultiTemplateLoader    
                  FileTemplateLoader extraLoader = new FileTemplateLoader(new File(extraTemplatePath));    
                  TemplateLoader[] loaders = new TemplateLoader[] { extraLoader, defaultLoader };    
                  MultiTemplateLoader multiLoader = new MultiTemplateLoader(loaders);    
                  templateCfg.setTemplateLoader(multiLoader);    
              }    
             else {    
                 // An extra template path is not configured, we only need the default loader    
                  templateCfg.setTemplateLoader(defaultLoader);    
              }    
    
              ModulesRepository.init(SystemGlobals.getValue(ConfigKeys.CONFIG_DIR));    
    
             this.loadConfigStuff();    
    
             if (!this.debug) {    
                  templateCfg.setTemplateUpdateDelay(3600);    
              }    
             //将模板的配置放到net.jforum.JForumExecutionContext    
              JForumExecutionContext.setTemplateConfig(templateCfg);    
          }    
         catch (Exception e) {    
             throw new ForumStartupException("Error while starting JForum", e);    
          }    
      }    
    
     protected void loadConfigStuff()    
      {    
         //加载urlPattern.properties文件    
          ConfigLoader.loadUrlPatterns();    
         //加载i18n文件    
          I18n.load();    
         //加载templatesMapping.properties文件,供freemarker使用    
          Tpl.load(SystemGlobals.getValue(ConfigKeys.TEMPLATES_MAPPING));    
    
         // BB Code    
          BBCodeRepository.setBBCollection(new BBCodeHandler().parse());    
      }    
 }   
 
  • 标签: jforum 启动过程 学习
  • 该日志于 2010-12-23 14:18 由 邓华锋 发表在 邓华锋 上,你除了可以发表评论外,还可以转载"Jforum学习----启动过程(1)"日志到你的网站或博客,但是请保留源地址及作者信息,谢谢!!
  • 版权所有:《邓华锋》 => 《Jforum学习----启动过程(1)
    本文地址:http://dhf.me/post-67.html
    除非注明,文章均为 《邓华锋》 原创,欢迎转载!转载请注明本文地址,谢谢。

评论:

  1. 123于2016-03-17 16:08说: 回复

    如果要从其他项目跳到jforum,进行一个登录整合怎么做

    • 邓华锋于2016-03-17 22:06说: 回复

      @123:参考这个http://www.denghuafeng.com/post-23.html