转:http://blog.csdn.net/huwenfeng_2011/article/details/43418433

Plugin管理

Openfire把插件模块加入到容器分为以下步骤:

l 通过classloader加载lib目录下载的所有jar

l 通过classloader加载dir目录下的所有文件

l 定位和加载module.xml到context

l 遍历jive模块实体,负荷给定的类作为一个模块,然后启动它

Openfire插件加载流程图:

Openfire的插件管理类PluginManager。加载插件的方法是loadPlugin(File pluginDir)这里的参数pluginDir是插件的目录。openfire会读取插件目录里面的pugin.xml文件关于这个文件的详细内容在Plugin接口介绍了。根据该插件的在minServerVersion标识字段与本openfire系统版本是否符合。如果符合则进行下一步,反之return了。Openfire会继续往下侦查插件,查看该插件是否是是另个插件的孩子插件。如果是则PluginLoader会加载该插件的父插件。最后一步一步的加载完整个插件。在上面流程图中有个PluginDevEnvironment类,该类是OpenFire的插件框架的数据模型代码,也就是Jive象征着J2EE的规范一样。

Openfire提供了加载插件,对应了也提供了卸载插件的方法unloadPlugin()。unloadPlugin方法会根据目录的名称找对应的插件将器删除,但不是把插件的jar文件删掉。留着jar文件的目的就是为了该插件可重新启动。

在PluginManager类中还有个内部类PluginMonitor。这个类实现了Runnable接口,无疑它是个线程类。它是个监控插件目录的服务类,它会定期检查新插件的jar文件和提取他们然后加载新的插件目录。

Plugin加载器

Openfier的插件加载器——PluginClassLoader它会搜索插件目录类和jar文件,然后构建类加载器来加载里面的资源。加载资源如下:

l 任何在lib下的jar文件会被添加到classpath中

l 任何在类目录下的的文件也被添加在classpath中

PluginClassLoader继承了URLClassLoader,此加载器是通过url搜索jar文件和目录加载类和资源。

addDirectory方法

该方法会装载插件目录,他会依次加载以下几个目录

Classes->database->i18n->web->lib

addURLFile方法

添加给定的URL为这个类装入器的类路径,缓存JAR文件连接,因此它可以卸载后

缓存配置

一、缓存配置

缓存配置信息PluginCacheConfigurator

......

二、登记缓存

插件的缓存配置信息在PluginCacheRegistry类中:

  1. public void registerCache(String pluginName, CacheInfo info) {
  2. extraCacheMappings.put(info.getCacheName(), info);
  3. List<CacheInfo> caches = pluginCaches.get(pluginName);
  4. if (caches == null) {
  5. caches = new ArrayList<CacheInfo>();
  6. pluginCaches.put(pluginName, caches);
  7. }
  8. caches.add(info);
  9. // Set system properties for this cache
  10. CacheFactory.setCacheTypeProperty(info.getCacheName(), info.getType().getName());
  11. CacheFactory.setMaxSizeProperty(info.getCacheName(), getMaxSizeFromProperty(info));
  12. CacheFactory.setMaxLifetimeProperty(info.getCacheName(), getMaxLifetimeFromProperty(info));
  13. CacheFactory.setMinCacheSize(info.getCacheName(), getMinSizeFromProperty(info));
  14. }

(转)OpenFire源码学习之十四:插件管理的更多相关文章

  1. (转)OpenFire源码学习之十:连接管理(上)

    转:http://blog.csdn.net/huwenfeng_2011/article/details/43415827 关于连接管理分为上下两部分 连接管理 在大并发环境下,连接资源 需要随着用 ...

  2. (转)OpenFire源码学习之十八:IOS离线推送

    转:http://blog.csdn.net/huwenfeng_2011/article/details/43458213 IOS离线推送 场景: 如果您有iOS端的APP,在会话聊天的时候,用户登 ...

  3. (转)OpenFire源码学习之十五:插件开发

    转:http://blog.csdn.net/huwenfeng_2011/article/details/43418493 Plugin接口规范 插件是openfire功能的增强表现,它的主要任务: ...

  4. (转)OpenFire源码学习之十二:HttpBind&Script Syntax

    转:http://blog.csdn.net/huwenfeng_2011/article/details/43417343 HttpSessionManager 该类管理所有通过httpbing连接 ...

  5. yii2源码学习笔记(十四)

    Module类是模块和应用类的基类. yiisoft\yii2\base\Module.php <?php /** * @link http://www.yiiframework.com/ * ...

  6. (转)OpenFire源码学习之十一:连接管理(下)

    转:http://blog.csdn.net/huwenfeng_2011/article/details/43416523 下面是下部分 C2S 1.当有客户端进行连接时根据Mina框架的模式首先调 ...

  7. Spring源码学习-容器BeanFactory(四) BeanDefinition的创建-自定义标签的解析.md

    写在前面 上文Spring源码学习-容器BeanFactory(三) BeanDefinition的创建-解析Spring的默认标签对Spring默认标签的解析做了详解,在xml元素的解析中,Spri ...

  8. async-validator 源码学习笔记(四):validator

    系列文章: 1.async-validator 源码学习(一):文档翻译 2.async-validator 源码学习笔记(二):目录结构 3.async-validator 源码学习笔记(三):ru ...

  9. (转)OpenFire源码学习之七:组(用户群)与花名册(用户好友)

    转:http://blog.csdn.net/huwenfeng_2011/article/details/43413651 Group 在openfire中的gorop——组,也可以理解为共享组.什 ...

随机推荐

  1. delphi遍历指定目录下指定类型文件的函数

    遍历指定目录下指定类型文件的函数// ================================================================// 遍历某个文件夹下某种文件,/ ...

  2. AcWing 224. 计算器 (BSGS算法)打卡

    题目:https://www.acwing.com/problem/content/226/ 题意:有一个计算器能完成三种功能 1.给定Y,Z,P,计算YZModPYZModP 的值: 2.给定Y,Z ...

  3. AcWing 217. 绿豆蛙的归宿 (概率期望+拓扑排序)打卡

    给出一个有向无环的连通图,起点为1,终点为N,每条边都有一个长度. 数据保证从起点出发能够到达图中所有的点,图中所有的点也都能够到达终点. 绿豆蛙从起点出发,走向终点. 到达每一个顶点时,如果有K条离 ...

  4. ldap yum安装-centos6

    yum安装openldap 系统环境信息 操作系统:CentOS release 6.7 基础的环境准备 iptables -F && /etc/init.d/iptables sav ...

  5. python基础三(深浅拷贝)

    1.赋值操作 list_1 = [1,2,3,['barry','Jerry']] list_2 = list_1 list_1[0] = 111 print(list_1) # [111, 2, 3 ...

  6. CTO 技能图谱skill-map

    # CTO 技能图谱 ### 岗位职责* 建立技术团队文化* 规划技术发展路线* 落地产品研发成果* 宣传公司技术品牌* 吸引优秀技术人才 ### 基本素质* 正直诚实的道德修养* 谦虚谨慎的工作态度 ...

  7. 使用密码登陆Amazon EC2

    用的是亚马逊推荐的系统:Amazon Linux AMI 2015.09.1 (HVM) 创建instance后,会有一个pem的key使用该密钥登陆到服务器上后,默认用户名为 ec2-user 直接 ...

  8. 洛谷 P1742 最小圆覆盖 (随机增量)

    题目链接:P1742 最小圆覆盖 题意 给出 N 个点,求最小的包含所有点的圆. 思路 随机增量 最小圆覆盖一般有两种做法:随机增量和模拟退火.随机增量的精确度更高,这里介绍随机增量的做法. 先将所有 ...

  9. QT5.2 Assistant-设置应用程序图标

       在Qt助手(assistant.exe)搜索关键字"Setting the Application Icon"就可以看到在各种平台设置Qt程序图标的方法,包括QT支持的Win ...

  10. SpringBoot扫描不到类,注入失败A component required a bean of type 'XXService' that could...

    SpringBoot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描! “Application类”是指SpringBoot项目入口类.这个类的位置很关键: 如果App ...