启动

ServerStarter

ServerStarter.main()
public static void main(String [] args) {
    new ServerStarter().start();
}
ServerStarter.start()
private void start() {
	try {
		final ClassLoader parent = findParentClassLoader();

		String libDirString = System.getProperty("openfire.lib.dir");

		File libDir;
		if (libDirString != null) {
			libDir = new File(libDirString);
			if (!libDir.exists()) {
				Log.warn("Lib directory " + libDirString +
						" does not exist. Using default " + DEFAULT_LIB_DIR);
				libDir = new File(DEFAULT_LIB_DIR);
			}
		}
		else {
			libDir = new File(DEFAULT_LIB_DIR);
		}

		String adminLibDirString = System.getProperty("openfireHome");
		if (adminLibDirString == null) {
			adminLibDirString = DEFAULT_ADMIN_LIB_DIR;
		}
		else {
			adminLibDirString = adminLibDirString+"/plugins/admin/webapp/WEB-INF/lib";
		}
		File adminLibDir = new File(adminLibDirString);
		if (!adminLibDir.exists()) {
			Log.warn("Admin Lib Directory " + adminLibDirString +
				" does not exist. Web admin console may not work.");
		}

		ClassLoader loader = new JiveClassLoader(parent, libDir);

		Thread.currentThread().setContextClassLoader(loader);
		// 加载XMPPServer类
		Class containerClass = loader.loadClass(
				"org.jivesoftware.openfire.XMPPServer");
		containerClass.newInstance();
	}
	catch (Exception e) {
		e.printStackTrace();
	}
}

XMPPServer

XMPPServer.start()
public void start() {
	try {
		// 加载openfire.xml配置文件,初始化配置
		initialize();
		//初始化插件管理器
		File pluginDir = new File(openfireHome, "plugins");
		pluginManager = new PluginManager(pluginDir);

		if (!setupMode) {					// 判断是否已经安装
			// 校验数据库连接
			verifyDataSource();	
			// 再让模块			
			loadModules();
			// 初始化模块
			initModules();
			// 启动模块
			startModules();
		}
		ServerTrafficCounter.initStatistics();
		// 启动插件管理器
		pluginManager.start();

		String startupBanner = LocaleUtils.getLocalizedString("short.title") + " " + xmppServerInfo.getVersion().getVersionString() +
				" [" + JiveGlobals.formatDateTime(new Date()) + "]";
		logger.info(startupBanner);
		System.out.println(startupBanner);

		started = true;
		// 开启监听
		for (XMPPServerListener listener : listeners) {			
			listener.serverStarted();
		}
		// 启动完毕
	}
	catch (Exception e) {
		e.printStackTrace();
		logger.error(e.getMessage(), e);
		System.out.println(LocaleUtils.getLocalizedString("startup.error"));
		shutdownServer();
	}
}
XMPPServer.loadModules()
private void loadModules() {
	// 基础模块
	loadModule(RoutingTableImpl.class.getName());
	loadModule(AuditManagerImpl.class.getName());
	loadModule(RosterManager.class.getName());
	loadModule(PrivateStorage.class.getName());
	// 核心模块
	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());
	// 标准模块
	loadModule(IQBindHandler.class.getName());
	loadModule(IQSessionEstablishmentHandler.class.getName());
	loadModule(IQPingHandler.class.getName());
	loadModule(IQPrivateHandler.class.getName());
	loadModule(IQRegisterHandler.class.getName());
	loadModule(IQRosterHandler.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(IQMessageCarbonsHandler.class.getName());
	loadModule(CertificateStoreManager.class.getName());

	// 加载连接
	loadModule(ConnectionManagerImpl.class.getName());
	
	componentManager = getComponentManager();
}
XMPPServer.loadModule()
private void loadModule(String module) {
	try {
		Class<Module> modClass = (Class<Module>) loader.loadClass(module);
		Module mod = modClass.newInstance();
		this.modules.put(modClass, mod);
	}
	catch (Exception e) {
		e.printStackTrace();
		logger.error(LocaleUtils.getLocalizedString("admin.error"), e);
	}
}
XMPPServer.startModules()
private void startModules() {
	for (Module module : modules.values()) {
		try {
			logger.debug( "Starting module: " + module.getName() );
			module.start();
		}
		catch (Exception e) {
			logger.error( "An exception occurred while starting module '{}'.", module.getName(), e );
		}
	}
}

Last updated