(转)OpenFire源码学习之十四:插件管理
转: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类中:
- public void registerCache(String pluginName, CacheInfo info) {
 - extraCacheMappings.put(info.getCacheName(), info);
 - List<CacheInfo> caches = pluginCaches.get(pluginName);
 - if (caches == null) {
 - caches = new ArrayList<CacheInfo>();
 - pluginCaches.put(pluginName, caches);
 - }
 - caches.add(info);
 - // Set system properties for this cache
 - CacheFactory.setCacheTypeProperty(info.getCacheName(), info.getType().getName());
 - CacheFactory.setMaxSizeProperty(info.getCacheName(), getMaxSizeFromProperty(info));
 - CacheFactory.setMaxLifetimeProperty(info.getCacheName(), getMaxLifetimeFromProperty(info));
 - CacheFactory.setMinCacheSize(info.getCacheName(), getMinSizeFromProperty(info));
 - }
 
(转)OpenFire源码学习之十四:插件管理的更多相关文章
- (转)OpenFire源码学习之十:连接管理(上)
		
转:http://blog.csdn.net/huwenfeng_2011/article/details/43415827 关于连接管理分为上下两部分 连接管理 在大并发环境下,连接资源 需要随着用 ...
 - (转)OpenFire源码学习之十八:IOS离线推送
		
转:http://blog.csdn.net/huwenfeng_2011/article/details/43458213 IOS离线推送 场景: 如果您有iOS端的APP,在会话聊天的时候,用户登 ...
 - (转)OpenFire源码学习之十五:插件开发
		
转:http://blog.csdn.net/huwenfeng_2011/article/details/43418493 Plugin接口规范 插件是openfire功能的增强表现,它的主要任务: ...
 - (转)OpenFire源码学习之十二:HttpBind&Script Syntax
		
转:http://blog.csdn.net/huwenfeng_2011/article/details/43417343 HttpSessionManager 该类管理所有通过httpbing连接 ...
 - yii2源码学习笔记(十四)
		
Module类是模块和应用类的基类. yiisoft\yii2\base\Module.php <?php /** * @link http://www.yiiframework.com/ * ...
 - (转)OpenFire源码学习之十一:连接管理(下)
		
转:http://blog.csdn.net/huwenfeng_2011/article/details/43416523 下面是下部分 C2S 1.当有客户端进行连接时根据Mina框架的模式首先调 ...
 - Spring源码学习-容器BeanFactory(四) BeanDefinition的创建-自定义标签的解析.md
		
写在前面 上文Spring源码学习-容器BeanFactory(三) BeanDefinition的创建-解析Spring的默认标签对Spring默认标签的解析做了详解,在xml元素的解析中,Spri ...
 - async-validator 源码学习笔记(四):validator
		
系列文章: 1.async-validator 源码学习(一):文档翻译 2.async-validator 源码学习笔记(二):目录结构 3.async-validator 源码学习笔记(三):ru ...
 - (转)OpenFire源码学习之七:组(用户群)与花名册(用户好友)
		
转:http://blog.csdn.net/huwenfeng_2011/article/details/43413651 Group 在openfire中的gorop——组,也可以理解为共享组.什 ...
 
随机推荐
- CF gym 101933 K. King's Colors(二项式反演)
			
传送门 解题思路 首先给出的树形态没用,因为除根结点外每个点只有一个父亲,它只需要保证和父亲颜色不同即可.设\(f(k)\)表示至多染了\(k\)种颜色的方案,那么\(f(k)=(k-1)^{(n-1 ...
 - Python之-异常处理
			
1.python中处理异常的方式 #coding:utf8 filename=raw_input("请输入你要操作的文件") try: f=open(filename) print ...
 - [CSP-S模拟测试]:简单的填数(贪心+模拟)
			
题目描述 对于一个长度为$n$,且下标从$1$开始编号的序列$a$,我们定义它是「合法的」,当且仅当它满足以下条件:·$a_1=1$·对于$i\in [1,n),a_i\leqslant a_{i+1 ...
 - 「2020 新手必备 」极速入门 Retrofit + OkHttp 网络框架到实战,这一篇就够了!
			
老生常谈 什么是 Retrofit ? Retrofit 早已不是什么新技术了,想必看到这篇博客的大家都早已熟知,这里就不啰嗦了,简单介绍下: Retrofit 是一个针对 Java 和 Androi ...
 - Tomcat负载均衡、调优核心应用进阶学习笔记(三):LNMT nginx+tomcat、LAMT apache+tomcat、session会话保持、不错的站点
			
文章目录 LNMT nginx+tomcat LAMT apache+tomcat 基于mod_proxy 单节点 配置基于mod_proxy的负载均衡 基于mod_jk(需要编译安装) 单节点 配置 ...
 - nginx-413
			
修改nginx配置文件:client_max_body_size 300M 修改php.ini upload_max_filesize | post_max_size
 - Django框架(十四)—— Django分页组件
			
目录 Django分页组件 一.分页器 二.分页器的使用 三.案例 1.模板层 2.视图层 Django分页组件 一.分页器 数据量大的话,可以分页获取,查看 例如:图书管理中,如果有成千上万本书,要 ...
 - Windows7下移植Qt4.8.4项目到QT5.2上时遇到的一些问题
			
最近在Windows7下将Qt4.8.4+MSVC2008的项目移植到QT5.2下时,遇到了一些小问题: 问题一:错误:C1083: 无法打开包括文件:"QApplication&q ...
 - JPA 派生标识符的两种实现方式
			
方法一:@Entity@IdClass(ModuleId.class)public class Module { @Id private Integer index; @Id @ManyToOne p ...
 - ZOJ 3795 Grouping(scc+最长路)
			
Grouping Time Limit: 2 Seconds Memory Limit: 65536 KB Suppose there are N people in ZJU, whose ...