上文讲到,ServerStarter经过java反射机制,实例化org.jivesoftware.openfire.XMPPServer,在xmppserver构造函数中,调用start方法,,开始了服务之旅.java
首先,咱们来看看start方法中,XMPPServer,它都干了什么.node
因为篇幅有限,先从initialize部分开始。
web
1,locateOpenfire,数据库
这个不稀奇,初始化一些数据和环境变量.首先locateOpenfire,顾名思义,找到openfire,这里是指openfire的主目录。怎么找呢?读取配置文件conf/openfire.xml,这里找openfireHome变量。若是没有咋办,这里有一个颇有意思的方法:verifyHome,啥意思呢?就是验证openfire主目录在哪?若是以前openfireHome没设置,那么就检查当前上一级目录(..),若是还没找到,就找web/WEB-INF/openfire_init.xml配置,还没找到,就抛异常了,.....,也别干了,收工吧。固然若是找到了,就保存到配置JiveGlobals中,这个JiveGlobals很是重要,之后说?感受是否是很纠结啊,这主要考虑到一些安装配置的一些状况,从而也能够看出设置的优先级,简单来讲,若是咱们在环境变量中直接设置openfireHome,就哦了,清楚告诉它,也就不纠结了。缓存
2,读取xmpp.domain,默认是127.0.0.1,至关于localhost,这里xmpp.domain是域名的,了解一点xmpp的都知道,jid是有node@domain/resource组成,这里xmpp.domain就是jid中的domain了,这个也能够配置,在数据库表中ofproperty中配置,先了解,具体之后再说。提醒一下,这个读取是从JiveGlobals对象中读取,这是第二次说道JiveGlobals。dom
3,解析host,主机名函数
4,获取版本Version信息学习
5,判断是否setupMode,即安装模式,若是是安装模式,在打开管理平台界面的时候,会进入安装配置界面。server
openfire提供了很是友好而强大的web管理平台,结合web平台学习openfire,事半功倍。xml
6,建立loader对象,此loader在ServerStarter中保存的对象
7,缓存初始化,CacheFactory,默认org.jivesoftware.util.cache.DefaultLocalCacheStrategy,有兴趣的能够研究一下
8,最后initialized = true;,标识初始化完成。
这里有一个isStandAlone判断,根据代码分析,我理解是是否从org.jivesoftware.openfire.starter.ServerStarter这个启动器启动,若是是,则true,那么这里的意思,可能在于对其它方式的启动的区别。好比,你能够自定义一个对象,或者从web启动这个XMPPServer,那就不是standalone了。这是我我的的理解,但愿各位大神拍砖。
至此,XmppServer的initialize代码阅读完成。
未完待续...