上文讲到,ServerStarter通过java反射机制,实例化org.jivesoftware.openfire.XMPPServer,在xmppserver构造函数中,调用start方法,,开始了服务之旅.
首先,我们来看看start方法中,XMPPServer,它都干了什么.
由于篇幅有限,先从initialize部分开始。
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。
3,解析host,主机名
4,获取版本Version信息
5,判断是否setupMode,即安装模式,如果是安装模式,在打开管理平台界面的时候,会进入安装配置界面。
openfire提供了非常友好而强大的web管理平台,结合web平台学习openfire,事半功倍。
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代码阅读完成。
未完待续...