XMPP學習筆記-LESSON-005:XMPPServer.java之Module

上面討論過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

相關文章
相關標籤/搜索