




已閱讀5頁,還剩82頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
基礎簡介XMPPExtensible Messaging and Presence Protocol,簡單的來講,它就是一個發(fā)送接收處理消息的協(xié)議,但是這個協(xié)議發(fā)送的消息,既不是二進制的東東也不是字符串,而是XML。正是因為使用了XML作為消息傳遞的中介,Extensible 才談的上,不是么? IMInstant Messenger,及時通信軟件,就是大家使用的QQ、MSN Messenger和Gtalk等等。其中Gtalk 就是基于XMPP 協(xié)議的一個實現(xiàn),其他的則不是。當前IM 幾乎作為每個上網(wǎng)者必然使用的工具,在國外的大型企業(yè)中有一些企業(yè)級的IM應用,但是其商業(yè)價值還沒完全發(fā)揮出來。設想既然XMPP 協(xié)議是一個公開的協(xié)議,那么每個企業(yè)都可以利用它來開發(fā)適合本身企業(yè)工作,提高自身生產(chǎn)效率的IM;甚至,你還可以在網(wǎng)絡游戲中集成這種通信軟件,不但讓你可以邊游戲邊聊天,也可以開發(fā)出適合游戲本身的IM 應用,比如說一些游戲關鍵場景提醒功能,團隊語音交流等等都可以基于IM來實現(xiàn)。Spark Smack 和 Openfire開源界總是有許多有趣的東東,這三個合起來就是一個完整的XMPP IM 實現(xiàn)。包括服務器端Openfire,客戶端Spark,XMPP 傳輸協(xié)議的實現(xiàn)Smack(記住,XMPP是一個協(xié)議,協(xié)議是需要實現(xiàn)的,Smack起到的就是這樣的一個作用)。三者都是基于Java 語言的實現(xiàn)。Spark 提供了客戶端一個基本的實現(xiàn),并提出了一個很好的插件架構,這對于開發(fā)者來說不能不說是一個福音。我強烈建議基于插件方式來實現(xiàn)你新增加的功能,而不是去改它的源代碼,這樣有利于你項目架構,把原始項目的影響降到最低。Openfire 是基于XMPP 協(xié)議的IM 的服務器端的一個實現(xiàn),雖然當兩個用戶連接后,可以通過點對點的方式來發(fā)送消息,但是用戶還是需要連接到服務器來獲取一些連接信息和通信信息的,所以服務器端是必須要實現(xiàn)的。Openfire 也提供了一些基本功能,但真的很基本的!慶幸的是,它也提供插件的擴展,像Spark 一樣,同樣強烈建議使用插件擴展的方式來增加新的功能,而不是修改人家的源代碼。Smack 是一個XMPP 協(xié)議的Java 實現(xiàn),提供一套可擴展的API,不過有些時候,你還是不得不使用自己定制發(fā)送的XML 文件內(nèi)容的方式來實現(xiàn)自己的功能下圖展示了三者之間的關系:從圖上可以了解到,client 端和server端都可以通過插件的方式來進行擴展,smack是二者傳遞數(shù)據(jù)的媒介。Apache MINAOpenfire的通信處理基于Apache MINA框架實現(xiàn)。Apache MINA是一個網(wǎng)絡應用程序框架,用來幫助用戶簡單地開發(fā)高性能和高可靠性的網(wǎng)絡應用程序。它提供了一個通過Java NIO在不同的傳輸例如TCP/IP和UDP/IP上抽象的事件驅動的異步API。 Apache MINA 也稱為: NIO 框架庫 客戶端服務器框架庫 一個網(wǎng)絡套接字庫 MINA雖然簡單但是仍然提供了全功能的網(wǎng)絡應用程序框架: 為不同的傳輸類型提供了統(tǒng)一的API: 通過Java NIO提供TCP/IP 和 UDP/IP支持 通過RXTX提供串口通訊(RS232) In-VM管道通訊 你能實現(xiàn)你自己的API! 過濾器作為一個擴展特性; 類似Servlet過濾器 低級和高級的API: 低級: 使用字節(jié)緩存(ByteBuffers) 高級: 使用用戶定義的消息對象(objects)和編碼(codecs) 高度定制化線程模型: 單線程 一個線程池 一個以上的線程池(也就是SEDA) 使用Java 5 SSL引擎提供沙盒(Out-of-the-box) SSL TLS StartTLS支持 超載保護和傳輸流量控制 利用模擬對象進行單元測試 JMX管理能力 通過StreamIoHandler提供基于流的I/O支持 和知名的容器(例如PicoContainer、Spring)集成 從Netty平滑的遷移到MINA, Netty是MINA的前輩。命名規(guī)則Openfire中常見的類名后綴命名包括Starter、Plugin、Listener、Dispatcher、Handler、Manager、Provider,通常情況下,這些命名類包括如下意義:XXStarter 系統(tǒng)啟動類,如org.jivesoftware.openfire.starter.ServerStarter,調用其start()方法可啟動系統(tǒng)應用。XXListener業(yè)務的最終處理類。所有的業(yè)務都是在Listener類中實現(xiàn)的XXDispatcher調度類(發(fā)布),其中有很多關鍵方法,如addListener(),以組合的方式,為類內(nèi)定義的靜態(tài)Set實例添加XXListener對象。以便調用dispatchEvent(String property, EventType eventType, Map params)方法遍歷處理Set集中的XXListener對象(通過調用XXListener對象的各實際方法完成實際業(yè)務)。XXPlugin實現(xiàn)Plugin接口的插件類,需實現(xiàn)initializePlugin(PluginManager manager, File pluginDirectory)方法和destroyPlugin()方法。在其初始化方法中調用Dispatcher實現(xiàn)類的addListener()方法如PropertyEventDispatcher.addListener(this)。XXProvider實現(xiàn)面向接口編程方式的接口類,通過反射機制創(chuàng)建具體實現(xiàn)類的對象,反射類名配置在ofproperty表對應的記錄propvalue屬性中。若沒有相關配置,則調用默認實現(xiàn)類,默認實現(xiàn)類類名命名規(guī)則為DefaultXXProvider。XXHandler實際處理類,以ConnectionHandler為例,在org.jivesoftware.openfire.spi. ConnectionManagerImpl類的startClientSSLListeners(String localIPAddress)方法中,有這樣一段代碼:sslSocketAcceptor.bind(new InetSocketAddress(bindInterface, port), new ClientConnectionHandler(serverName);其中bind方法的第二個參數(shù)是新創(chuàng)建的一個ClientConnectionHandler的實例,而它就是ConnectionHandler的一個子類。系統(tǒng)配置項Openfire的系統(tǒng)配置項采用文件結合數(shù)據(jù)庫表的方式配置,也有部分默認配置項通過Java硬編碼方式配置(如org.jivesoftware.openfire. ConnectionManager接口類中定義的DEFAULT_PORT、DEFAULT_SSL_PORT、DEFAULT_COMPONENT_PORT等),Openfire中比較重要的配置位置包括:一、 src/conf目錄下的openfire.xml配置文件。該配置文件為系統(tǒng)核心配置文件。在第一次啟動Openfire并通過管理控制臺完成安裝配置后會往該配置文件中填入相應的配置信息。二、 plugin.xml配置文件。該配置文件為各插件包下的核心配置文件,由它確定插件核心處理類和相應頁面插件的展現(xiàn)等。配置項及含義詳見官方插件開發(fā)說明部分。三、 web.xml和web-custom.xml配置文件。用于配置servlet和用戶自定義servlet(插件頁面用,放在插件對應目錄下)。四、 ofproperty中的各條記錄,該表中包括兩個字段name和propvalue,分別代表配置項名和配置項值。系統(tǒng)啟動流程系統(tǒng)啟動時調用ServerStarter類中的start()方法,通過反射加載org.jivesoftware.openfire.XMPPServer類文件,創(chuàng)建實例時調用其構造函數(shù),在其構造函數(shù)中調用其start()方法實際啟動服務應用程序。Start()方法中首先調用verifyDataSource()方法驗證并確保數(shù)據(jù)庫可以訪問,然后會調用 loadModules();initModules();startModules();方法來對Module接口的實現(xiàn)類的各子類進行操作,依次完成模塊的加載、初始化和啟動操作。loadModules()方法中會調用loadModule(String module)方法通過反射加載各模塊類,參數(shù)字符串module為對應的模塊核心處理類的類名,如AdHocCommandHandler?,F(xiàn)以AdHocCommandHandler為例對接下來的處理流程進行說明。通過loadModule創(chuàng)建AdHocCommandHandler類實例時調用其構造函數(shù),在構造函數(shù)中初始化了其私有AdHocCommandManager對象。在initModules()時調用AdHocCommandHandler實例的initialize(XMPPServer server)方法對其私有屬性對象進行初始化。然后調用start()方法,調用addDefaultCommands方法添加命令并啟動命令(通過調用startCommand(AdHocCommand command)方法實現(xiàn))。網(wǎng)絡處理消息監(jiān)聽服務SSL等監(jiān)聽服務的調度在ConnectionManagerImpl類中實現(xiàn)。ConnectionManagerImpl.createClientSSLListeners()方法啟動SSL監(jiān)聽消息封裝信息處理采用XML節(jié)的方式傳遞信息,消息封裝通常采用IQ、Message、Presence。Openfire消息包接受處理流程數(shù)據(jù)庫處理Openfire的數(shù)據(jù)庫處理采用直接調用JDBC 的方式。核心類為org.jivesoftware.database.DbConnectionManager。數(shù)據(jù)庫的處理與業(yè)務處理耦合,沒有劃分出專門的業(yè)務邏輯層。ConnectionProvider此類為數(shù)據(jù)庫提供者接口,如需連接mysql、hsqldb等數(shù)據(jù)庫,需首先實現(xiàn)些接口,處理方式通常直接調用XXManager中的實例方法,XXManager中又調用的是對應的接口XXProvider的方法,實際操作在該接口的實現(xiàn)類中實現(xiàn)。實現(xiàn)類是動態(tài)綁定的(默認的實現(xiàn)類通常命名規(guī)則為DefaultXXProvider),在運行時根據(jù)ofproperty表中對應配置項值選擇。下面以添加用戶組為例進行說明。首先獲得GroupManager的一個實例,在調用其構造函數(shù)時調用initProvider()方法,在該方法中獲取數(shù)據(jù)庫中配置項的值,若不為空則根據(jù)該值通過反射機制獲取GroupProvider接口的實現(xiàn)類實例對象;若為空則以DefaultGroupProvider作為GroupProvider接口的實現(xiàn)類并創(chuàng)建實例對象,然后調用GroupProvider. createGroup(String name)方法完成業(yè)務操作。常用類org.jivesoftware.database.DbConnectionManager連接管理類org.jivesoftware.util.JiveGlobals通常用于操作ofproperty表中記錄openfire數(shù)據(jù)結構數(shù)據(jù)庫表以下是一個說明每個表格的Openfire數(shù)據(jù)庫架構。黃色行表示主鍵。 ofGroup ofGroupProp ofGroupUser ofID ofOffline ofPresence ofPrivate ofUser ofUserProp ofUserFlag ofRoster ofRosterGroups ofPrivacyList ofVCard ofVersion ofProperty ofExtComponentConf ofRemoteServerConf ofSecurityAuditLog ofMucService ofMucServiceProp ofMucRoom ofMucRoomProp ofMucAffiliation ofMucMember ofMucConversationLog ofPubsubNode ofPubsubNodeJIDs ofPubsubNodeGroups ofPubsubAffiliation ofPubsubItem ofPubsubSubscription ofPubsubDefaultConf ofGroup (用戶組的數(shù)據(jù))列名類型長度描述groupNameVARCHAR50組名稱(主鍵)descriptionVARCHAR255組描述ofGroupProp (名稱值協(xié)會為一組)列名類型長度描述groupNameVARCHAR50 組名稱(主鍵)nameVARCHAR100 組屬性名稱(主鍵)propValueVARCHAR4000 組屬性值ofGroupUser (組成員)列名類型長度描述groupNameVARCHAR50 組名稱(主鍵)usernameVARCHAR100 用戶名(主鍵)administratorNUMBERn/a 是否為管理員(布爾)(主鍵)ofID (用于唯一ID序列生成)列名類型長度描述idTypeNUMBERn/a證件類型(例如,組,用戶名冊)(主鍵)idNUMBERn/a下一個可用塊編號的(用于數(shù)據(jù)庫獨立編號)ofOffline (離線郵件存儲)列名類型長度更改usernameVARCHAR32用戶名(主鍵)messageIDNUMBERn/a存儲信息的編號(主鍵)creationDateVARCHAR15日期信息存儲messageSizeNUMBERn/a郵件的大小以字節(jié)為單位stanzaTEXTn/a消息文本ofPresence (離線的存在)列名類型長度更改usernameVARCHAR64用戶名(主鍵)offlinePresenceTEXTn/a存在的信息設置為用戶注銷offlineDateCHAR15信息存儲日期ofPrivate (私人數(shù)據(jù)存儲)列名類型長度描述usernameVARCHAR32用戶名(主鍵)nameVARCHAR100姓名私營項(主鍵)namespaceVARCHAR200名字空間私營項(主鍵)privateDataTEXTn/a價值的私人數(shù)據(jù)ofUser (用戶數(shù)據(jù))列名類型長度描述usernameVARCHAR32 用戶名(主鍵)plainPasswordVARCHAR32 純文字密碼數(shù)據(jù)encryptedPasswordVARCHAR255 加密的密碼數(shù)據(jù)(默認)nameVARCHAR100 名字emailVARCHAR100 電郵地址creationDateVARCHAR15 創(chuàng)建日期modificationDateVARCHAR15 最后更新日期ofUserProp (名稱值協(xié)會針對用戶)列名類型長度描述usernameVARCHAR32 用戶名(主鍵)nameVARCHAR100 用戶屬性名稱(主鍵)propValueVARCHAR4000 用戶屬性值ofUserFlag (用戶類型標識(如殘疾人)列名類型長度描述usernameVARCHAR64 用戶名(主鍵)nameVARCHAR100 用戶屬性名稱(主鍵)startTimeCHAR15 國旗的時候,開始被有效(無效的現(xiàn)在 )endTimeCHAR15 當時國旗是結束有效(無效的永遠 )ofRoster (好友列表)列名類型長度描述rosterIDNUMBERn/a編號名冊(主鍵)usernameVARCHAR32用戶名jidTEXTn/a地址名冊入境subNUMBERn/a認購地位入境askNUMBERn/a賣出地位入境recvNUMBERn/a檢舉表明進入名冊收到請求nickVARCHAR255昵稱分配給這個名冊入境ofRosterGroups (組的好友名單中的條目)列名類型長度描述rosterIDNUMBERn/a名冊編號(主鍵)rankNUMBERn/a立場項(主鍵)groupNameVARCHAR255用戶定義的名稱,這個名冊組ofPrivacyList (用戶隱私清單)列名類型長度描述usernameVARCHAR32用戶名(主鍵)nameVARCHAR100姓名保密清單(主鍵)isDefaultNUMBERn/a檢舉指出,如果這是默認隱私的用戶名單listTEXTn/aXML表示的隱私清單ofVCard (電子名片的聯(lián)系信息)列名類型長度描述usernameVARCHAR32用戶名(主鍵)vcardTEXTn/a價值的vCard入境ofVersion (包含產(chǎn)品版本信息)列名類型長度描述nameVARCHAR50名稱的項目,版本信息正在跟蹤的(主鍵)versionINTEGERn/a版本號ofProperty (服務器屬性)列名類型長度描述nameVARCHAR100屬性名稱(主鍵)propValueTEXTn/a進入值ofExtComponentConf (外部元件配置)列名類型長度描述subdomainVARCHAR255子的外部元件(主鍵)secretVARCHAR255共享密鑰的外部元件permissionVARCHAR10許可,表明如果組件是可以連接到服務器ofRemoteServerConf (遠程服務器配置)列名類型長度描述xmppDomainVARCHAR255域的外部元件(主鍵)remotePortNUMBERn/a港口的遠程服務器連接到permissionVARCHAR10許可,表明如果遠程服務器可以連接到服務器ofSecurityAuditLog (伐木安全事件)列名類型長度描述msgIDNUMBERn/a編號審計信息(主鍵)usernameVARCHAR64使用者誰執(zhí)行的行動entryStampNUMBERn/a時間戳當事件發(fā)生summaryVARCHAR255總結了發(fā)生在事件nodeVARCHAR255節(jié)點事件發(fā)生detailsTEXTn/a詳細的細節(jié),所發(fā)生的ofMucService (甲Groupchat服務)列名類型長度描述serviceIDNUMBERn/a編號的服務(收錄)subdomainVARCHAR255子服務(主鍵)descriptionVARCHAR255服務說明isHiddenNUMBERn/a1 ,如果隱藏的管理界面名單, 0正常ofMucServiceProp (名稱值協(xié)會的Groupchat服務)列名類型長度描述serviceIDNUMBERn/a編號的服務(主鍵)nameVARCHAR100屬性名稱(主鍵)propValueTEXTn/a屬性值ofMucRoom ( Groupchat室內(nèi)資料)列名類型長度描述roomIDNUMBERn/a編號的房間(主鍵)creationDateVARCHAR15創(chuàng)建日期modificationDateVARCHAR15最后更新日期nameVARCHAR50姓名房間用作公共編號naturalNameVARCHAR255天然名稱室descriptionVARCHAR255客房描述canChangeSubjectNUMBERn/a檢舉指出是否可以改變參與者的主題maxUsersNUMBERn/a馬克斯一些房間居住者canChangeSubjectNUMBERn/a檢舉指出是否與會者可以改變的主題或不publicRoomNUMBERn/a檢舉指示是否室將在目錄中列出或不moderatedNUMBERn/a檢舉指示是否室主持或不membersOnlyNUMBERn/a檢舉指出是否房間是會員制或不canInviteNUMBERn/a檢舉指出是否占用可以邀請其他用戶roomPasswordVARCHAR50密碼數(shù)據(jù)加入室canDiscoverJIDNUMBERn/a檢舉指出是否真正JID的居住者是公共或不logEnabledNUMBERn/a檢舉指出是否房間談話記錄或不subjectVARCHAR100最后為人所知的主題房間rolesToBroadcastNUMBERn/a二元代表的作用,以廣播useReservedNickNUMBERn/a檢舉指出是否用戶只能加入室使用其保留昵稱canChangeNickNUMBERn/a檢舉指出是否可以改變其占用的空間昵稱canRegisterNUMBERn/a檢舉顯示用戶是否被允許登記室ofMucRoomProp (名稱值協(xié)會的Groupchat房間)列名類型長度描述roomIDNUMBERn/a編號的房間(主鍵)nameVARCHAR100屬性名稱(主鍵)propValueVARCHAR4000屬性值ofMucAffiliation (歸屬的空間用戶)列名類型長度描述roomIDNUMBERn/a編號的房間(主鍵)jidTEXTn/a用戶JID (主鍵)affiliationNUMBERn/a一些代表所屬一級ofMucMember (室成員資料)列名類型長度描述roomIDNUMBERn/a編號的房間(主鍵)jidTEXTn/a用戶JID (主鍵)nicknameVARCHAR255保留昵稱的會員ofMucConversationLog (室會話日志)列名類型長度描述roomIDNUMBERn/a編號的空間senderTEXTn/aJID的用戶發(fā)送郵件的房間nicknameVARCHAR255昵稱使用時由用戶發(fā)出的信息logTimeVARCHAR15日期的消息時,被送到房間subjectVARCHAR50新的主題改變的信息bodyTEXTn/a消息正文ofPubsubNode (節(jié)點pubsub服務)列名類型長度描述serviceIDVARCHAR100編號托管服務節(jié)點(主鍵)nodeIDVARCHAR100編號的節(jié)點(主鍵)leafNUMBERn/a檢舉表明節(jié)點是否是葉或收集節(jié)點creationDateVARCHAR15創(chuàng)建日期modificationDateVARCHAR15最后更新日期parentVARCHAR100編號的父節(jié)點(如果有的話)deliverPayloadsNUMBERn/a檢舉指出是否有效載荷中包含的通知maxPayloadSizeNUMBERn/a最大規(guī)模的有效載荷的字節(jié)persistItemsNUMBERn/a檢舉表明節(jié)點是否將持續(xù)出版項目maxItemsNUMBERn/a最大的項目數(shù)量將持續(xù)notifyConfigChangesNUMBERn/a檢舉指出是否發(fā)送通知時,該節(jié)點的配置發(fā)生了變化notifyDeleteNUMBERn/a檢舉指出是否發(fā)送通知時,該節(jié)點將被刪除notifyRetractNUMBERn/a檢舉指出是否發(fā)送通知時,發(fā)布的項目將被刪除presenceBasedNUMBERn/a檢舉指出是否發(fā)送通知只有用戶才sendItemSubscribeNUMBERn/a檢舉指出是否向去年出版項目,以新用戶publisherModelVARCHAR15Publisher中使用的模式的節(jié)點subscriptionEnabledNUMBERn/a檢舉指出是否允許訂閱configSubscriptionNUMBERn/a檢舉指出是否新的訂戶必須設定為活躍accessModelVARCHAR10訪問模型所使用的節(jié)點payloadTypeVARCHAR100類型的有效載荷數(shù)據(jù)將提供在節(jié)點bodyXSLTVARCHAR100網(wǎng)址的一個XSLT轉換有效載荷的格式為一個郵件正文dataformXSLTVARCHAR100網(wǎng)址的一個XSLT轉化的有效載荷格式的數(shù)據(jù)形式結果creatorVARCHAR1024JID的實體建立了節(jié)點descriptionVARCHAR255說明節(jié)點languageVARCHAR255默認語言的節(jié)點nameVARCHAR50名稱節(jié)點replyPolicyVARCHAR15政策界定業(yè)主或出版商是否應得到答復項目associationPolicyVARCHAR15政策規(guī)定誰可以聯(lián)系葉節(jié)點的集合maxLeafNodesNUMBERn/a馬克斯一些葉節(jié)點,一個節(jié)點可能會收集ofPubsubNodeJIDs ( JIDs與節(jié)點)列名類型長度描述serviceIDVARCHAR100編號托管服務節(jié)點(主鍵)nodeIDVARCHAR100編號的節(jié)點(主鍵)jidVARCHAR1024JID實體(主鍵)associationTypeVARCHAR20協(xié)會類型的節(jié)點ofPubsubNodeGroups (名冊集團與節(jié)點)列名類型長度內(nèi)容serviceIDVARCHAR100編號托管服務節(jié)點nodeIDVARCHAR100編號的節(jié)點rosterGroupVARCHAR100名冊組節(jié)點所有者可以簽署和檢索項目ofPubsubAffiliation (節(jié)點分支機構)列名類型長度描述serviceIDVARCHAR100編號托管服務節(jié)點(主鍵)nodeIDVARCHAR100編號的節(jié)點(主鍵)jidVARCHAR1024JID的子公司(主鍵)affiliationVARCHAR10所屬類別ofPubsubItem (項目發(fā)布到節(jié)點)列名類型長度描述serviceIDVARCHAR100編號托管服務節(jié)點(主鍵)nodeIDVARCHAR100編號的節(jié)點(主鍵)idVARCHAR100編號的出版項目(獨特的每個節(jié)點)(主鍵)jidVARCHAR1024JID出版商creationDateVARCHAR15創(chuàng)建日期payloadTEXTn/aXML的有效載荷包括在出版項目ofPubsubSubscription (訂閱節(jié)點)列名類型長度描述serviceIDVARCHAR100編號托管服務節(jié)點(主鍵)nodeIDVARCHAR100編號的節(jié)點(主鍵)idVARCHAR100編號認購(主鍵)jidVARCHAR1024地址接收通知ownerVARCHAR1024JID的子公司,擁有認購stateVARCHAR15國家認購(工作流程中的)deliverNUMBERn/a檢舉指出是否通知或未啟用digestNUMBERn/a檢舉表明一個實體是否希望收到通知摘要digest_frequencyNUMBERn/a最低數(shù)目的毫秒之間發(fā)出任何兩個通知消化expireVARCHAR15日期在租賃認購將結束或已經(jīng)結束includeBodyNUMBERn/a檢舉表明一個實體是否希望收到郵件正文除了有效載荷格式showValuesVARCHAR30存在這些國家的實體希望收到通知subscriptionTypeVARCHAR10無論是用戶訂閱的項目或節(jié)點(收集節(jié)點只)subscriptionDepthNUMBERn/a收到通知的兒童一定深度(收集節(jié)點只)keywordVARCHAR200關鍵字活動必須符合ofPubsubDefaultConf (默認配置節(jié)點)列名類型長度描述serviceIDVARCHAR100編號托管服務節(jié)點(主鍵)leafNUMBERn/a檢舉指出是否配置屬于葉或收集節(jié)點(主鍵)deliverPayloadsNUMBERn/a檢舉指出是否有效載荷中包含的通知maxPayloadSizeNUMBERn/a最大規(guī)模的有效載荷的字節(jié)persistItemsNUMBERn/a檢舉表明節(jié)點是否將持續(xù)出版項目maxItemsNUMBERn/a最大的項目數(shù)量將持續(xù)notifyConfigChangesNUMBERn/a檢舉指出是否發(fā)送通知時,該節(jié)點的配置發(fā)生了變化notifyDeleteNUMBERn/a檢舉指出是否發(fā)送通知時,該節(jié)點將被刪除notifyRetractNUMBERn/a檢舉指出是否發(fā)送通知時,發(fā)布的項目將被刪除presenceBasedNUMBERn/a檢舉指出是否發(fā)送通知只有用戶才sendItemSubscribeNUMBERn/a檢舉指出是否向去年出版項目,以新用戶publisherModelVARCHAR15Publisher中使用的模式的節(jié)點subscriptionEnabledNUMBERn/a檢舉指出是否允許訂閱accessModelVARCHAR10訪問模型所使用的節(jié)點languageVARCHAR255默認語言的節(jié)點replyPolicyVARCHAR15政策界定業(yè)主或出版商是否應得到答復項目associationPolicyVARCHAR15政策規(guī)定誰可以聯(lián)系葉節(jié)點的集合maxLeafNodesNUMBERn/a馬克斯一些葉節(jié)點,一個節(jié)點可能會收集WEB服務器Openfire采用內(nèi)置的jetty作web服務器,在啟動AdminConsolePlugin插件時調用startup()方法啟動jetty服務器,9090為其明文端口,9091為其加密端口。頁面處理Openfire沒有采用現(xiàn)在很流行的技術架構(SSH),只使用JSP+JavaBean,但是它有自己的系統(tǒng)設計,就連日志都是自己做的,沒有使用我們熟悉的log4j?,F(xiàn)有的Openfire管理控制臺可采用插件方式進行擴展(詳見插件開發(fā)說明部分介紹),頁面采用Jsp方式實現(xiàn),頁面直接調用業(yè)務處理邏輯類(通常命名為XXManager)的實例方法,通常通過request對象封裝的方式傳遞頁面展現(xiàn)判定變量,常出現(xiàn)本頁跳轉。每個插件可定義自己的Servlet類和web.xml及web-custom.xml配置文件。采用裝飾框架方式展現(xiàn)頁面,decorator頁面有兩個,即src/web/decorators目錄下的兩個頁面main.jsp和setup.jsp。采用自定義的admin標簽實現(xiàn),標簽庫admin.tld放置在src/web/WEB-INF目錄下,標簽解析類放置在org.jivesoftware.admin包下,有SidebarTag、SubnavTag、SubSidebarTag、TabsTag四個解析類。在調用loadPlugin()方法進行插件加載時,解析插件的plugin.xml配置文件,將獲取的相關信息封裝在AdminConsole類的generatedModel對象中,后期通過插件解析類提取該對象中的數(shù)據(jù)并配合sitemesh裝飾器進行頁面展現(xiàn)。詳見“使用dom4j設計Openfire式導航菜單”部分相關介紹。插件開發(fā)Openfire Plugins加載流程官方插件開發(fā)說明所有插件都存放在openfire根下的plugins目錄下。當一個插件被以JAR或WAR文件發(fā)布時,他自動擴展為一個文件夾。插件目錄結構如下所示: Plugin Structuremyplugin/ |- plugin.xml - 插件定義文件 |- readme.html - 可選的插件自己述文件,它將被顯示給最終用戶。 |- changelog.html -可選的插件版本日志文件,它將被展現(xiàn)給最終用戶。 |- logo_small.gif - 可選的與插件關聯(lián)的小圖標(16x16)文件(也能為png文件) |- logo_large.gif -可選的與插件關聯(lián)的大圖標(32x32)文件(也能為png文件) |- classes/ - 你的插件需要的資源文件(如properties文件) |- database/ - 可選的你的插件需要的數(shù)據(jù)庫schema文件 |- i18n/ - 可選的i18n文件,它們?yōu)椴寮峁﹪H化支持 |- lib/ - 你的插件需要的庫(JAR文件) |- web - 需要集成到管理控制臺中的各類資源(如果有的話) |- WEB-INF/ |- web.xml - 配置jsp調度的web.xml配置文件 |- web-custom.xml - 可選的用戶定義的web.xml文件,用于調度自定義servlets |- images/若插件需要為Openfire的管理控制臺添加內(nèi)容,則web文件夾必須存在。具體內(nèi)容詳述如下。Plugin.xml文件指定了主插件類,下面是一個例子。Itvi plugin.xml plugin.Itvi TestPlugin This is an example plugin. Jive Software 1.0 07/01/2006 /projects/openfire/plugins.jsp 3.0.0 gpl 各元數(shù)據(jù)域能在plugin.xml文件中進行設置: name 插件名. description 插件描述. author 插件作者. version 插件版本. date 插件版本生成日期。該日期必須為MM/dd/yyyy格式, 如07/01/2006. url 關于該插件的更多詳細信息可以從該地址獲取. minServerVersion 為運行該插件所需的最低的Openfire軟件版本(Openfire 2.1.2及后續(xù)版本支持該選項).如果服務器版本低于需要的最低版本,插件將不會啟動. databaseKey 如果插件需要它自己的數(shù)據(jù)庫表,必須將databaseKey元素設置為一個schema key name(通常與插件同名). 然后需將所有需支持數(shù)據(jù)庫類型的數(shù)據(jù)庫schema 文件放到插件的database文件夾下. 例如,給一個關鍵字“foo”,那么schema文件需命名為foo_mysql.sql, foo_oracle.sql等.我們建議你在命名你的表時加上前綴of (openfire),以避免與其他可能使用同一數(shù)據(jù)庫的其他應用系統(tǒng)需要的表產(chǎn)生沖突.關于版本的描述信息需添加到ofVersion表中,以對應的key做標識,這樣可以跟蹤schema版本信息,如:INSERT INTO ofVersion (name, version) VALUES (foo, 0); databaseVersion 數(shù)據(jù)庫schema版本(如果定義了數(shù)據(jù)庫schema)。有數(shù)據(jù)庫schema的新插件的版本從0開始編號。如果以后的插件版本需要更新schema,這些更新能通過在database/upgrade目錄下為各版
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 征信合規(guī)管理培訓課件
- 語言培訓班課件制作指南
- 急性乳房炎的護理
- 感恩團隊培訓
- 中醫(yī)噯氣病例分享
- 氣道異物的護理
- 倉庫管理的安全培訓
- 新教師法培訓
- 小學國教育主題班會
- 天津市2025年中考語文模擬試卷7(含答案)
- GB/T 22751-2008臺球桌
- GA 1205-2014滅火毯
- “十個堅持”的邏輯體系與深刻內(nèi)涵
- 攜手耕耘未來課件
- 社區(qū)工作者經(jīng)典備考題庫(必背300題)
- 2023年陜西韓城象山中學高一物理第二學期期末聯(lián)考試題(含答案解析)
- DB4401-T 102.1-2020 建設用地土壤污染防治+第1部分:污染狀況調查技術規(guī)范-(高清現(xiàn)行)
- 農(nóng)業(yè)產(chǎn)業(yè)園可行性研究報告
- 實驗2:基本數(shù)據(jù)類型、運算符與表達式
- 常州建筑水電安裝施工專項方案
- 增強教師職業(yè)認同感、榮譽感、幸福感-課件
評論
0/150
提交評論