上面討論過Xmppserver有如下3個方法:sql
loadModules();
// Initize all the modules
initModules();
// Start all the modules
startModules();數據庫
意思很簡單,載入模塊,初始化,啓動模塊。設計模式
如何載入的呢?服務器
loadModule(RoutingTableImpl.class.getName());
session
... ...函數
這裏就是經過loader載入class,這裏現以PrivateStorage module爲例,說明module如何編寫--也可添加本身的module。spa
Module是個接口,定義一個簡單的功能,getName,init,start,stop,destoy.而後實現了一個BasicModule做爲全部module的基類,對應的方法都是空的。基本都是在子類中實現,這裏有個興趣點,你們想一想這是什麼設計模式?設計
查看PrivateStorage源碼,咱們來看如何實現的,其它的module類也就大同小異了。server
PrivateStorage,除了繼承basemodule還實現了UserEventListener接口,這個接口提供了userCreated,userModified,userDeleting功能。這是module的一個通用寫法,module定義了模塊生命週期,用戶操做接口就是經過這類EventListener接口來實現,這是一個頗有技巧的實現,很好的體現了設計模式的巧妙--接口分離原則。xml
繼續......
PrivateStorage到底幹什麼的呢?能夠參考構造函數,
public PrivateStorage() {
super("Private user data storage");
}
PrivateStorage首先定義了4條SQL語句,增刪查改(載入,插入,更新,刪除)私有數據。
以增長爲例,add(username,data)
其實就是對數據庫的操做:
獲取connection,操做sql等.
這裏注意幾點,幾個經常使用類:DbConnectionManager,JiveGlobals。
DbConnectionManager是獲取數據庫鏈接管理對象,能夠獲取對connection進行操做,如獲取,關閉connection。
JiveGlobals則是獲取全局設置變量。它包含xmlProperties,properties兩個存儲對象,各自針對opfnire.xml和數據庫的參數變量。
xmlProperties:
private static String JIVE_CONFIG_FILENAME = "conf" + File.separator + "openfire.xml";
properties:
JiveProperties實例,單例對象。經過loadProperties方法載入變量(存儲到ofProperty表的參數,這個表很是重要,之後在整合第三方系統用戶的時候會常常用到).
經過這2個對象,獲取了系統的設置參數,也可修改對應參數。是否是很簡單?
至於如何操做數據庫,這個是基本的jdbc開發,這裏就很少說了。
這就是簡單的module開發。
固然,你也能夠開發本身的module了。
附module列表:
DbConnectionManager 數據庫鏈接管理類,提供大量的靜態方法獲取數據庫鏈接。例如:getConnection()等等。·RoutingTableImplRoutTable是用來存儲各個終端之間的會話,一旦一個用戶通過服務器的認證,他就會發起一次會話,最終會在Rout Table中插入一條記錄。無論何時,用戶變得可用或不可用,表中的數據都會及時更新。在集羣開發中會有涉及,這塊還沒仔細研究,望你們討論。·AuditManagerImpl·RosterManager 花名冊,好友,分組等消息,這個在集成用戶數據時涉及。·PrivateStorage私有數據存儲模塊·PresenceManagerImpl用戶狀態管理·SessionManager用戶登錄session情況管理·PacketRouterImpl ·IQRouter·MessageRouter·PresenceRouter·MulticastRouter·PacketTransporterImpl·PacketDelivererImpl·TransportHandler·OfflineMessageStrategy·OfflineMessageStore·VCardManager·IQBindHandler·IQSessionEstablishmentHandler·IQAuthHandler·IQPingHandler·IQPrivateHandler·IQRegisterHandler·IQRosterHandler·IQTimeHandler·IQvCardHandler·IQVersionHandler·IQLastActivityHandler·PresenceSubscribeHandler·PresenceUpdateHandler·IQOfflineMessagesHandler·IQPEPHandler·IQPEPOwnerHandler·MulticastDNSService·IQSharedGroupHandler·AdHocCommandHandler·IQPrivacyHandler·DefaultFileTransferManager·FileTransferProxy·MediaProxyService·STUNService·PubSubModule·IQDiscoInfoHandler·IQDiscoItemsHandler·UpdateManager·FlashCrossDomainHandler·InternalComponentManager·MultiUserChatManager·ClearspaceManager·ConnectionManagerImpl