JForum Cacheable接口

本文深入探讨了JForum缓存系统的实现原理,包括其核心组件、初始化过程以及如何扩展缓存功能。通过分析配置文件和关键代码段,揭示了JForum如何利用不同缓存引擎(如EhCache和JBossCache)提高应用性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JForum的cache是由net.jforum.cache包下的类来实现的

Cacheable.java 这个接口为Repository实现提供cache引擎 CacheEngine.java JForum的Cache引擎接口 DefaultCacheEngine.java JForum提供的默认cache引擎实现 EhCacheEngine.java EhCache的cache引擎实现 JBossCacheEngine.java JbossCache的cache引擎实现 JBossCacheListener.java Jboss的TreeCacheListener实现

net.jforum.repository包下的类都是Cacheable.java接口的实现类,每个repository类通过静态方法提供具体的业务cache方法。

net.jforum.JForumBaseServlet.java是JForum中servlet的一个基类,在它的init方法中调用了ConfigLoader.startCacheEngine();方法来初始化所有的Repository。在这个方法中,JForum从SystemGlobals.properties文件中取得Cache引擎的类型,实例化它,之后从这个配置文件中继续取出repository的列表,然后依次实例化每个repository并将Cache引擎注入。

Java代码
  1. public static void startCacheEngine()   
  2. {   
  3.     try {   
  4.          String cacheImplementation = SystemGlobals.getValue(ConfigKeys.CACHE_IMPLEMENTATION);   
  5.          logger.info("Using cache engine: " + cacheImplementation);   
  6.            
  7.          cache = (CacheEngine)Class.forName(cacheImplementation).newInstance();   
  8.          cache.init();   
  9.            
  10.          String s = SystemGlobals.getValue(ConfigKeys.CACHEABLE_OBJECTS);   
  11.         if (s == null || s.trim().equals("")) {   
  12.              logger.warn("Cannot find Cacheable objects to associate the cache engine instance.");   
  13.             return;   
  14.          }   
  15.            
  16.          String[] cacheableObjects = s.split(",");   
  17.         for (int i = 0; i < cacheableObjects.length; i++) {   
  18.              logger.info("Creating an instance of " + cacheableObjects[i]);   
  19.              Object o = Class.forName(cacheableObjects[i].trim()).newInstance();   
  20.                
  21.             if (o instanceof Cacheable) {   
  22.                  ((Cacheable)o).setCacheEngine(cache);   
  23.              }   
  24.             else {   
  25.                  logger.error(cacheableObjects[i] + " is not an instance of net.jforum.cache.Cacheable");   
  26.              }   
  27.          }   
  28.      }   
  29.     catch (Exception e) {   
  30.         throw new CacheEngineStartupException("Error while starting the cache engine", e);   
  31.      }   
  32. }  
net.jforum.ConfigLoader

如果要在JForum项目中扩展一个cache功能,只需要实现一个Cacheable.java接口的repository类,并在SystemGlobals.properties中的cacheable.objects参数中配置这个repository就可以了。

Java代码
  1. cacheable.objects = net.jforum.repository.BBCodeRepository, \   
  2.      net.jforum.repository.RankingRepository, \   
  3.      net.jforum.repository.SmiliesRepository, \   
  4.      net.jforum.repository.ForumRepository, \   
  5.      net.jforum.repository.TopicRepository, \   
  6.      net.jforum.SessionFacade, \   
  7.      net.jforum.repository.PostRepository, \   
  8.      net.jforum.repository.Tpl, \   
  9.      net.jforum.repository.RolesRepository, \   
  10.      net.jforum.repository.SecurityRepository, \   
  11.      net.jforum.repository.BanlistRepository  

SystemGlobals.properties

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值