在java>org>jivesoftware>openfire>starter,该类中的main方法启动,有图为证:

在start中方法分别调用unpackArchives和findParentClassLoader方法,确定openfire目录,并解压相关jia包,并创建一个org.jivesoftware.openfire.XMPPServer类的实例,有图为证:

在XMPPServer类中,依次执行start>initialize>locateOpenfire加载相关的配置文件,初始化缓存工厂设置相关的缓存大小,然后接着保存设置,在start方法中有一句判断: if (!setupMode) ,这里的setupMode是从openfire文件夹下的config文件夹下面的openfire.xml配置文件获取,有图为证:

如果想重置openfire或者设置数据库连接把setup设置为false就可以重新配置openfire了;如果已经设置为true了,则会执行verifyDataSource进行数据库验证,loadModules加载模块,initModules初始化模块,startModules启动模块,启动插件管理器 pluginManager.start();最后设置监听。

  private void loadModules() {
// Load boot modules
loadModule(RoutingTableImpl.class.getName());
loadModule(AuditManagerImpl.class.getName());
loadModule(RosterManager.class.getName());
loadModule(PrivateStorage.class.getName());
// Load core modules
loadModule(PresenceManagerImpl.class.getName());
loadModule(SessionManager.class.getName());
loadModule(PacketRouterImpl.class.getName());
loadModule(IQRouter.class.getName());
loadModule(MessageRouter.class.getName());
loadModule(PresenceRouter.class.getName());
loadModule(MulticastRouter.class.getName());
loadModule(PacketTransporterImpl.class.getName());
loadModule(PacketDelivererImpl.class.getName());
loadModule(TransportHandler.class.getName());
loadModule(OfflineMessageStrategy.class.getName());
loadModule(OfflineMessageStore.class.getName());
loadModule(VCardManager.class.getName());
// Load standard modules
loadModule(IQBindHandler.class.getName());
loadModule(IQSessionEstablishmentHandler.class.getName());
loadModule(IQAuthHandler.class.getName());
loadModule(IQPingHandler.class.getName());
loadModule(IQPrivateHandler.class.getName());
loadModule(IQRegisterHandler.class.getName());
loadModule(IQRosterHandler.class.getName());
loadModule(IQTimeHandler.class.getName());
loadModule(IQEntityTimeHandler.class.getName());
loadModule(IQvCardHandler.class.getName());
loadModule(IQVersionHandler.class.getName());
loadModule(IQLastActivityHandler.class.getName());
loadModule(PresenceSubscribeHandler.class.getName());
loadModule(PresenceUpdateHandler.class.getName());
loadModule(IQOfflineMessagesHandler.class.getName());
loadModule(IQPEPHandler.class.getName());
loadModule(IQPEPOwnerHandler.class.getName());
loadModule(MulticastDNSService.class.getName());
loadModule(IQSharedGroupHandler.class.getName());
loadModule(AdHocCommandHandler.class.getName());
loadModule(IQPrivacyHandler.class.getName());
loadModule(DefaultFileTransferManager.class.getName());
loadModule(FileTransferProxy.class.getName());
loadModule(MediaProxyService.class.getName());
loadModule(PubSubModule.class.getName());
loadModule(IQDiscoInfoHandler.class.getName());
loadModule(IQDiscoItemsHandler.class.getName());
loadModule(UpdateManager.class.getName());
loadModule(FlashCrossDomainHandler.class.getName());
loadModule(InternalComponentManager.class.getName());
loadModule(MultiUserChatManager.class.getName());
loadModule(ClearspaceManager.class.getName());
loadModule(IQMessageCarbonsHandler.class.getName()); // Load this module always last since we don't want to start listening for clients
// before the rest of the modules have been started
loadModule(ConnectionManagerImpl.class.getName());
// Keep a reference to the internal component manager
componentManager = getComponentManager();
}

在启动加载模块的过程中会依次加载这些模块。这些模块全部直接继承或间接继承BasicModule类,BasicModule类继承Module接口,Module接口定义五个方法,有图为证:

执行完loadModules这个方法之后所有的模块都保存在 private Map<Class, Module> modules = new LinkedHashMap<Class, Module>(); 这个LinkedHashMap中,执行startModules()时回按顺序执行LinkedHashMap中键值的start方法.

public class RoutingTableImpl extends BasicModule implements RoutingTable, ClusterEventListener

public class AuditManagerImpl extends BasicModule implements AuditManager

public class RosterManager extends BasicModule implements GroupEventListener, UserEventListener

public class PrivateStorage extends BasicModule implements UserEventListener

public class PresenceManagerImpl extends BasicModule implements PresenceManager, UserEventListener, XMPPServerListener

public class SessionManager extends BasicModule implements ClusterEventListener

public class PacketRouterImpl extends BasicModule implements PacketRouter

public class IQRouter extends BasicModule

public class MessageRouter extends BasicModule

public class PresenceRouter extends BasicModule

public class MulticastRouter extends BasicModule implements ServerFeaturesProvider, IQResultListener

public class PacketTransporterImpl extends BasicModule

public class PacketDelivererImpl extends BasicModule implements PacketDeliverer

public class TransportHandler extends BasicModule implements ChannelHandler

public class OfflineMessageStrategy extends BasicModule

public class OfflineMessageStore extends BasicModule implements UserEventListener

public class VCardManager extends BasicModule implements ServerFeaturesProvider

public class IQBindHandler extends IQHandler

public class IQSessionEstablishmentHandler extends IQHandler

public class IQAuthHandler extends IQHandler implements IQAuthInfo

public class IQPingHandler extends IQHandler implements ServerFeaturesProvider

public class IQPrivateHandler extends IQHandler implements ServerFeaturesProvider

public class IQRegisterHandler extends IQHandler implements ServerFeaturesProvider

public class IQRosterHandler extends IQHandler implements ServerFeaturesProvider

public class IQTimeHandler extends IQHandler implements ServerFeaturesProvider

public final class IQEntityTimeHandler extends IQHandler implements ServerFeaturesProvider

public class IQvCardHandler extends IQHandler

public class IQVersionHandler extends IQHandler implements ServerFeaturesProvider

public class IQLastActivityHandler extends IQHandler implements ServerFeaturesProvider

public class PresenceSubscribeHandler extends BasicModule implements ChannelHandler<Presence>

public class PresenceUpdateHandler extends BasicModule implements ChannelHandler, ClusterEventListener

public class IQOfflineMessagesHandler extends IQHandler implements ServerFeaturesProvider, DiscoInfoProvider, DiscoItemsProvider

public class IQPEPHandler extends IQHandler implements ServerIdentitiesProvider, ServerFeaturesProvider, UserIdentitiesProvider, UserItemsProvider, PresenceEventListener, RosterEventListener, UserEventListener

public class IQPEPOwnerHandler extends IQHandler

public class MulticastDNSService extends BasicModule

public class IQSharedGroupHandler extends IQHandler

public class AdHocCommandHandler extends IQHandler
implements ServerFeaturesProvider, DiscoInfoProvider, DiscoItemsProvider

public class IQPrivacyHandler extends IQHandler implements ServerFeaturesProvider, UserEventListener

public class DefaultFileTransferManager extends BasicModule implements FileTransferManager

public class FileTransferProxy extends BasicModule implements ServerItemsProvider, DiscoInfoProvider, DiscoItemsProvider, RoutableChannelHandler

public class MediaProxyService extends BasicModule implements ServerItemsProvider, RoutableChannelHandler, DiscoInfoProvider, DiscoItemsProvider

public class PubSubModule extends BasicModule implements ServerItemsProvider, DiscoInfoProvider, DiscoItemsProvider, RoutableChannelHandler, PubSubService, PropertyEventListener

public class IQDiscoInfoHandler extends IQHandler implements ClusterEventListener

public class IQDiscoItemsHandler extends IQHandler implements ServerFeaturesProvider, ClusterEventListener, UserItemsProvider

public class UpdateManager extends BasicModule

public class FlashCrossDomainHandler extends BasicModule

public class InternalComponentManager extends BasicModule implements ComponentManager, RoutableChannelHandler

public class MultiUserChatManager extends BasicModule implements ClusterEventListener, MUCServicePropertyEventListener, UserEventListener

public class ClearspaceManager extends BasicModule implements ExternalComponentManagerListener, ComponentEventListener, PropertyEventListener, CertificateEventListener

public final class IQMessageCarbonsHandler extends IQHandler implements ServerFeaturesProvider

public class ConnectionManagerImpl extends BasicModule implements ConnectionManager, CertificateEventListener

先做个记录吧。

OPENFIRE 启动流程的更多相关文章

  1. (转)OpenFire源码学习之四:openfire的启动流程

    转:http://blog.csdn.net/huwenfeng_2011/article/details/43413233 openfire启动 ServerStarter 启动流程图: 启动的总入 ...

  2. Openfire注册流程代码分析

    Openfire注册流程代码分析 一.客户端/服务端注册用户流程 经过主机连接消息确认后,客户端共发送俩条XML完成注册过程.服务器返回两条XML. 注:IQ消息节点用于处理用户的注册.好友.分组.获 ...

  3. MyCat源码分析系列之——配置信息和启动流程

    更多MyCat源码分析,请戳MyCat源码分析系列 MyCat配置信息 除了一些默认的配置参数,大多数的MyCat配置信息是通过读取若干.xml/.properties文件获取的,主要包括: 1)se ...

  4. Android进阶系列之源码分析Activity的启动流程

    美女镇楼,辟邪! 源码,是一个程序猿前进路上一个大的而又不得不去翻越障碍,我讨厌源码,看着一大堆.5000多行,要看完得啥时候去了啊.不过做安卓的总有这一天,自从踏上这条不归路,我就认命了.好吧,我慢 ...

  5. Spring Boot启动流程详解(一)

    环境 本文基于Spring Boot版本1.3.3, 使用了spring-boot-starter-web. 配置完成后,编写了代码如下: @SpringBootApplication public ...

  6. linux启动流程及自定义gurb

    linux 启动流程 POST BIOS(boot sequence) 所选择的启动设备次序的MBR中是否有引导程序, ----> MBR(bootloader) 提供内核列表 -------& ...

  7. linux启动流程

    看了深入理解linux内核一书的最后对linux启动流程的介绍,下面就把我能理解的写一下吧: bios(硬件加电自检POST,寻找第一个启动设备) the boot loader(可以从硬盘启动也可以 ...

  8. webapp启动流程

    webapp启动流程 看了这个教程,其实所有的webapp大致都是这个流程了.

  9. Tomcat源码分析之—具体启动流程分析

    从Tomcat启动调用栈可知,Bootstrap类的main方法为整个Tomcat的入口,在init初始化Bootstrap类的时候为设置Catalina的工作路径也就是Catalina_HOME信息 ...

随机推荐

  1. bzoj4289

    最短路 很容易想到边和边之间连边,但是这样菊花图就完蛋了 我们想办法优化一下,能不能不要每条边都连. 考虑查分,把一个点的出边串起来,这样就行了,每条无向边拆成两条就能保证了 #include< ...

  2. 基于IOS下的支付宝SDK的学习与使用——实现产品支付(二)

    首先本篇为作者原创,仅供学习使用,以后会不断完善,精炼.阅读之前请参考  上一篇 上一篇 中详细说明了结合官方支付宝SDK,对工程环境进行的一些配置,实现了支付,本篇重点说明一下,注意事项和原理,主要 ...

  3. HDOJ-2037

    今年暑假不AC Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  4. Eclipse中建立自己的类库,给不同的工程使用

    win7 进入服务 开始 运行 services.msc 在多个工程当中,可能使用到相同的jar包,这时,如果我们建立一个自己的类库,该类库中存放着所有工程均需要的jar包,就可以免去重复导入的麻烦. ...

  5. HDU - 4535 ZZULI 1867: 礼上往来【错位排序】

    1867: 礼上往来 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 216  Solved: 65 SubmitStatusWeb Board Desc ...

  6. java多线程知识点收集-总

    1.线程与进程的关系 进程(Process):当一个程序进入内存开始运行时,就产生一个进程.进程是一个独立单元,它的资源由系统分配和调度. 线程(Thread):线程是进程的执行单元,线程在进程中是独 ...

  7. Docker管理应用数据

    1.  Manage data in Docker 默认情况下,所有在容器内部创建的文件被存储在一个可写的容器层.这就意味着: 当容器不存在的时候,数据不能被持久化,而且在容器外部想要读取这些数据十分 ...

  8. HDU - 1071 - The area - 高斯约旦消元法 - 自适应辛普森法积分

    http://acm.hdu.edu.cn/showproblem.php?pid=1071 解一个给定三个点的坐标二次函数某区域的积分值. 设出方程之后高斯消元得到二次函数.然后再消元得到直线. 两 ...

  9. test markdown style

    code // Forward declaration of isBadVersion API. bool isBadVersion(int version); class Solution { pu ...

  10. KING_Unity学习之UGUI_Canvas渲染顺序以及层次关系总结

    http://blog.csdn.net/kingsea168/article/details/50252733 之前一直用NGUI开发界面,但看到现在的unity的新版本的UGUI也不错,这几天专门 ...