




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、免費版,也是寫的最詳細(xì)的基礎(chǔ)簡介XMPPExtensible Messaging and Presence Protocol,簡單的來講,它就是一個發(fā)送接收處理消息的協(xié)議,但是這個協(xié)議發(fā)送的消息,既不是二進制的東東也不是字符串,而是 XML。正是因為使用了XML 作為消息傳遞的中介,Extensible 才談的上,不是么?IMInstant Messenger,及時通信,就是大家使用的、MSN Messenger 和 Gtalk 等等。其中 Gtalk 就是基于 XMPP 協(xié)議的一個實現(xiàn),其他的則不是。當(dāng)前 IM 幾乎作為每個上網(wǎng)者必然使用的工具,在國外的大型企業(yè)中有一些企業(yè)級的 IM 應(yīng)用,
2、但是其還沒完全發(fā)揮出來。設(shè)想既然 XMPP 協(xié)議是一個公開的協(xié)議,那么每個企業(yè)都可以利用它來開發(fā)適合本身企業(yè)工作,提高自身生產(chǎn)效率的 IM;甚至,你還可以在中集成這種通信,不但讓你可以邊邊聊天,也可以開發(fā)出適合本身的 IM 應(yīng)用,比如說一些游戲關(guān)鍵場景提醒功能,團隊語音交流等等都可以基于 IM 來實現(xiàn)。Spark Smack 和 Openfire開源界總是有許多有趣的東東,這三個合起來就是一個完整的 XMPP IM 實現(xiàn)。包括服務(wù)器端Openfire,客戶端Spark,XMPP 傳輸協(xié)議的實現(xiàn)Smack(記住,XMPP是一個協(xié)議,協(xié)議是需要實現(xiàn)的,Smack 起到的就是這樣的一個作用)。三者都
3、是基于 Java 語言的實現(xiàn)。Spark 提供了客戶端一個基本的實現(xiàn),并提出了一個很好的插件架構(gòu),這對于開發(fā)者來說不能不說是一個。我強烈建議基于插件方式來實現(xiàn)你新增加的功能,而不是去改它的源代碼,這樣有利于你項目架構(gòu),把原始項目的影響降到最低。Openfire 是基于 XMPP 協(xié)議的 IM 的服務(wù)器端的一個實現(xiàn),雖然當(dāng)兩個用戶連接后,可以通過點對點的方式來發(fā)送消息,但是用戶還是需要連接到服務(wù)器來獲取一些連接信息和通信信息的,所以服務(wù)器端是必須要實現(xiàn)的。Openfire 也提供了一些基本功能,但真的很基本的!慶幸的是,它也提供插件的擴展,像 Spark 一樣,同樣強烈建議使用插件擴展的方式來增
4、加新的功能,而不是修改人家的源代碼。Smack 是一個 XMPP 協(xié)議的 Java 實現(xiàn),提供一套可擴展的 API,不過有些時候,你還是不得不使用自己定制發(fā)送的XML 文件內(nèi)容的方式來實現(xiàn)自己的功能下圖展示了三者之間的關(guān)系:從圖上可以了解到,cnt二者傳遞數(shù)據(jù)的媒介。端和 server 端都可以通過插件的方式來進行擴展,smack 是Apache MINAOpenfire 的通信處理基于Apache MINA 框架實現(xiàn)。Apache MINA 是一個網(wǎng)絡(luò)應(yīng)用程序框架,用來幫助用戶簡單地開發(fā)高性能和高可靠性的網(wǎng)絡(luò)應(yīng)用程序。它提供了一個通過 Java NIO 在不同的傳輸例如TCP/IP 和 UD
5、P/IP 上抽象的事件驅(qū)動的異步 API。Apache MINA 也稱為:NIO 框架庫客戶端服務(wù)器框架庫一個網(wǎng)絡(luò)套接字庫MINA 雖然簡單但是仍然提供了全功能的網(wǎng)絡(luò)應(yīng)用程序框架:為不同的傳輸類型提供了的 API:通過 Java NIO 提供 TCP/IP 和 UDP/IP 支持通過 RXTX 提供串口通訊(RS232)In-VM 管道通訊你能實現(xiàn)你自己的 API!過濾器作為一個擴展特性; 類似Servlet 過濾器低級和高級的 API:低級: 使用字節(jié)緩存(ByteBuffers)高級: 使用用戶定義的消息對象(objects)和編碼(codecs)高度定制化線程模型:單線程一個線程池一個以
6、上的線程池(也就是SEDA)使用 Java 5 SSL 引擎提供沙盒(Out-of-the-box) SSL TLS StartTLS 支持超載保護和傳輸流量控制利用模擬對象進行單元測試JMX 管理能力通過StreamIoHandler 提供基于流的 I/O 支持 和知名的容器(例如 PicoContainer、Spring)集成從Netty 平滑的遷移到 MINA, Netty 是 MINA 的前輩。命名規(guī)則Openfire 中常見的類名后綴命名包括 Startlugin 、Listener 、Dispatcher、Handler、Manag意義:rovider,通常情況下,這些命名類包括如
7、下XXStarter系統(tǒng)啟動類,如.jivesoftware.openfire.starter.ServerStarter,調(diào)用其 start()方法可啟動系統(tǒng)應(yīng)用。XXListener業(yè)務(wù)的最終處理類。所有的業(yè)務(wù)都是在 Listener 類中實現(xiàn)的XXDispatcher調(diào)度類(發(fā)布),其中有很多關(guān)鍵方法,如 addListener(),以組合的方式,為類內(nèi)定義的靜態(tài) Set實例添加 XXListener 對象。以便調(diào)用 dispatchEvent(String property, EventType eventType, Map params)方法遍歷處理 Set 集中的 XXListen
8、er 對象(通過調(diào)用 XXListener 對象的各實際方法完成實際業(yè)務(wù))。XXPlugin實現(xiàn) Plugin 接口的插件類, 需實現(xiàn) initializePlugin(Pluganagermanager, File pluginDirectory)方法和 destroyPlugin()方法。在其初始化方法 中 調(diào) 用Dispatcher實 現(xiàn) 類 的addListener() 方 法 如PropertyEventDispatcher.addListener(this)。XXProvider實現(xiàn)面向接口編程方式的接口類,通過反射機制創(chuàng)建具體實現(xiàn)類的對象,反射類名配置在 ofproperty 表
9、對應(yīng)的propvalue 屬性中。若沒有相關(guān)配置,則調(diào)用默認(rèn)實現(xiàn)類,默認(rèn)實現(xiàn)類類名命名規(guī)則為 DefaultXXProvider。XXHandler實際處理類,以ConnectionHandler為例,類在的.jivesoftware.openfire.spi.ConnectionManagerImplstartCntSSLListeners(String localIPAddress)方法中,有這樣一段代碼:sslSocketAcceptor.bind(new InetSocketAddress(binderface, port), newCntConnectionHandler(serve
10、rName);其中bind方法的第二個參數(shù)是新創(chuàng)建的一個C類。ntConnectionHandler的實例,而它就是ConnectionHandler的一個子系統(tǒng)配置項Openfire 的系統(tǒng)配置項采用文件結(jié)合數(shù)據(jù)庫表的方式配置,也有部分默認(rèn)配置項通過 Java 硬 編 碼 方 式 配 置 ( 如.jivesoftware.openfire.ConnectionManager 接口類中定義的 DEFAULT_PORT 、 DEFAULT_SSL_PORT 、PONENT_PORT 等),Openfire 中比較重要的配置位置包括:一、src/conf 目錄下的 openfire.xml 配置文
11、件。該配置文件為系統(tǒng)配置文件。在第一次啟動 Openfire 并通過管理控制臺完成安裝配置后會往該配置文件中填入相應(yīng)的配置信息。二、plugin.xml 配置文件。該配置文件為各插件包下的配置文件,由它確定插件處理類和相應(yīng)頁面插件的展現(xiàn)等。配置含義詳見插件開發(fā)說明部分。三、web.xml 和 web-custom.xml 配置文件。用于配置 servlet 和用戶自定義servlet(插件頁面用,放在插件對應(yīng)目錄下)。四、ofproperty 中的各條,該表中包括兩個字段 name 和 propvalue,分別代表配置項名和配置項值。系統(tǒng)啟動流程系統(tǒng)啟動時調(diào)用 ServerStarter 類中
12、的 start() 方法,通過反射加載.jivesoftware.openfire.XMPPServer 類文件,創(chuàng)建實例時調(diào)用其構(gòu)造函數(shù),在其構(gòu)造函數(shù)中調(diào)用其 start()方法實際啟動服務(wù)應(yīng)用程序。Start()方法中首先調(diào)用 verifyDataSource() 方法驗證并確保數(shù)據(jù)庫可以, 然后會調(diào)用loadModules();initModules();startModules();方法來對 Module 接口的實現(xiàn)類的各子類進行操作,依次完成模塊的加載、初始化和啟動操作。loadModules()方法中會調(diào)用 loadModule(String module)方法通過反射加載各模塊類
13、,參數(shù)字符串 module 為對應(yīng)的模塊處理類的類名 如m。現(xiàn)以mandHandler 為例對mandHandler 類實例時調(diào)用接下來的處理流程進行說明。通過 loadModule 創(chuàng)建其構(gòu)造函數(shù),在構(gòu)造函數(shù)中初始化了其私有mandManager 對象。在 initModules()時調(diào)用mandHandler 實例的 initialize(XMPPServer server)方法對其私有屬性對象進行初始化。然后調(diào)用 start()方法,調(diào)用mands 方法添加命令并d)方法實現(xiàn))。啟動命令(通過調(diào)用mand(mand網(wǎng)絡(luò)處理消息服務(wù)SSL等服 務(wù) 的 調(diào) 度在ConnectionManag
14、erImpl類 中 實 現(xiàn) 。ConnectionManagerImpl.createCntSSLListeners()方法啟動 SSL消息封裝信息處理采用 XML 節(jié)的方式傳遞信息,消息封裝通常采用 IQ、Message、 Presence。Openfire 消息包接受處理流程數(shù)據(jù)庫處理Openfire 的 數(shù) 據(jù) 庫處 理 采 用直 接 調(diào) 用 JDBC 的 方 式 。類 為.jivesoftware.database.DbConnectionManager。數(shù)據(jù)庫的處理與業(yè)務(wù)處理耦合,沒有劃分出專門的業(yè)務(wù)邏輯層。ConnectionProvider、hsqldb 等數(shù)據(jù)庫,需首先實現(xiàn)些接
15、口,此類為數(shù)據(jù)庫提供者接口,如需連接處理方式通常直接調(diào)用 XXManager 中的實例方法,XXManager 中又調(diào)用的是對應(yīng)的接口 XXProvider 的方法,實際操作在該接口的實現(xiàn)類中實現(xiàn)。實現(xiàn)類是動態(tài)綁定的( 默認(rèn)的實現(xiàn)類通常命名規(guī)則為 DefaultXXProvider ), 在運行時根據(jù) ofproperty 表中對應(yīng)配置項值選擇。下面以添加用戶組為例進行說明。首先獲得 GroupManager 的一個實例, 在調(diào)用其構(gòu)造函數(shù)時調(diào)用 initProvider()方法,在該方法中獲取數(shù)據(jù)庫中配置項的值,若不為空則根據(jù)該值通過反射機制獲取 GroupProvider 接口的實現(xiàn)類實例
16、對象;若為空則以 DefaultGroupProvider 作為 GroupProvider 接口的實現(xiàn)類并創(chuàng)建實例對象,然后調(diào)用 GroupProvider. createGroup(String name)方法完成業(yè)務(wù)操作。常用類.jivesoftware.database.DbConnectionManager連接管理類.jivesoftware.util.JiveGlobals通常用于操作 ofproperty 表中openfire 數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)庫表以下是一個說明每個表格的Openfire 數(shù)據(jù)庫架構(gòu)。黃色行表示主鍵。ofGroupofGroupPropofGroupUserofIDo
17、fOfflineofPresenceofPrivateofUserofUsropofUserFlagofRosterofRosterGroupsofPrivacyListofVCardofVerofPropertyponentConfofRemoteServerConfofSecurityAuditLogofMucServiceofMucServicePropofMucRoomofMucRoomPropofMucAffiliationofMucMemberofMucConversationLogofPubsubNodeofPubsubNodeJIDsofPubsubNodeGroupsofPu
18、bsubAffiliationofPubsubItemofPubsubSubscriptionofPubsubDefaultConfofGroup (用戶組的數(shù)據(jù))列名類型長度描述descriptionVARCHAR255組描述ofGroupProp (名稱值為一組)列名類型長度描述propValueVARCHAR4000組屬性值ofGroupUser(組成員)列名類型長度描述ofID (用于唯一ID 序列生成)列名類型長度描述idNUMBERn/a下一個可用塊的(用于數(shù)據(jù)庫獨立)ofOffline (離線郵件)列名類型長度更改creationDatemessageSizeVARCHARNUM
19、BER15n/a日期信息郵件的大小以字節(jié)為usernamemessageIDVARCHARNUMBER32用戶名(主鍵)n/a信息的(主鍵)idTypeNUMBERn/a證件類型(例如,組,用戶名冊)(主鍵)groupNameVARCHAR50組名稱(主鍵)usernameadministratorVARCHARNUMBER100用戶名(主鍵)n/a是否為管理員()(主鍵)groupNameVARCHAR50組名稱(主鍵)nameVARCHAR100組屬性名稱(主鍵)groupNameVARCHAR50組名稱(主鍵)stanzaTEXTn/a消息文本ofPresence (離線的存在)列名類型
20、長度更改offlineDateCHAR15信息日期ofPrivate (私人數(shù)據(jù))列名類型長度描述privateDaEXTn/a價值的私人數(shù)據(jù)ofUser (用戶數(shù)據(jù))列名類型長度描述plainPassword encryptedPasswordnameVARCHAR VARCHAR VARCHAR VARCHAR VARCHARVARCHAR322551001001515純文字?jǐn)?shù)據(jù)加密的數(shù)據(jù)(默認(rèn))名字電郵地址creationDatemodificationDate創(chuàng)建日期最后更新日期ofUsrop (名稱值針對用戶)列名類型長度描述propValueVARCHAR4000用戶屬性值ofUs
21、erFlag (用戶類型標(biāo)識(如殘疾人)列名類型長度描述startTimeendTimeCHARCHAR1515國旗的時候,開始被有效(無效的現(xiàn)在)當(dāng)時國旗是結(jié)束有效(無效的 )ofRoster (好友列表)列名類型長度描述rosterIDNUMBERn/a名冊(主鍵)usernameVARCHAR64用戶名(主鍵)nameVARCHAR100用戶屬性名稱(主鍵)usernameVARCHAR32用戶名(主鍵)nameVARCHAR100用戶屬性名稱(主鍵)usernameVARCHAR32用戶名(主鍵)usernamename namespaceVARCHARVARCHAR VARCHAR3
22、2用戶名(主鍵)100私營項(主鍵)200名字空間私營項(主鍵)usernameVARCHAR64用戶名(主鍵)offlinePresenceTEXTn/a存在的信息設(shè)置為用戶注銷username jidsub ask recvnickVARCHAR TEXT NUMBER NUMBER NUMBERVARCHAR32n/a n/a n/a n/a255用戶名地址名冊入境認(rèn)購地位入境賣出地位入境表明進入名冊收到請求昵稱分配給這個名冊入境ofRosterGroups (組的好友中的條目)列名類型長度描述groupNameVARCHAR255用戶定義的名稱,這個名冊組ofPrivacyList (
23、用戶隱私)列名類型長度描述isDefaultlistNUMBERTEXTn/an/a,如果這是默認(rèn)隱私的用戶XML 表示的隱私ofVCard (電子名片的聯(lián)系信息)列名類型長度描述vcardTEXTn/a價值的vCard 入境ofVer(包含產(chǎn)品版本信息)列名類型長度描述verEGERn/a版本號ofProperty (服務(wù)器屬性)列名類型長度描述propValueTEXTn/a進入值ponentConf (外部元件配置)列名類型長度描述secretpermisVARCHARVARCHAR25510共享密鑰的外部元件,表明如果組件是可以連接到服務(wù)器ofRemoteServerConf (服務(wù)器
24、配置)subVARCHAR255子的外部元件(主鍵)nameVARCHAR100屬性名稱(主鍵)nameVARCHAR50名稱的項目,版本信息正在的(主鍵)usernameVARCHAR32用戶名(主鍵)usernameVARCHAR32用戶名(主鍵)(主鍵)nameVARCHAR100rosterIDNUMBERn/a名冊(主鍵)rNUMBERn/a立場項(主鍵)列名類型長度描述remotePortpermisNUMBERVARCHARn/a10港口的服務(wù)器連接到,表明如果服務(wù)器可以連接到服務(wù)器ofSecurityAuditLog (伐木安全事件)列名類型長度描述username entry
25、St summary nodedetailsVARCHAR NUMBER VARCHAR VARCHARTEXT64n/a 255255n/a使用者誰執(zhí)行的行動時間戳當(dāng)事件發(fā)生 總結(jié)了發(fā)生在事件節(jié)點事件發(fā)生詳細(xì)的細(xì)節(jié),所發(fā)生的ofMucService (甲Groupchat 服務(wù))列名類型長度描述descriptionisHiddenVARCHARNUMBER255n/a服務(wù)說明1 ,如果隱藏的管理界面, 0 正常ofMucServiceProp (名稱值的Groupchat 服務(wù))列名類型長度描述propValueTEXTn/a屬性值ofMucRoom (Groupchat 室內(nèi)資料)列名類
26、型長度描述creationDate modificationDate name naturalName description canChangeSubject maxUsers canChangeSubject publicRoommoderatedVARCHAR VARCHAR VARCHAR VARCHAR VARCHAR NUMBER NUMBER NUMBER NUMBERNUMBER151550255255n/a n/a n/a n/an/a創(chuàng)建日期最后更新日期房間用作公共天然名稱室客房描述是否可以改變參與者的一些房間居住者是否與會者可以改變的或不指示是否室將在目錄中列出或不指示是
27、否室主持或不roomIDNUMBERn/a的房間(主鍵)serviceIDnameNUMBERVARCHARn/a的服務(wù)(主鍵)100屬性名稱(主鍵)serviceIDNUMBERn/a的服務(wù)(收錄)subVARCHAR255子服務(wù)(主鍵)msgIDNUMBERn/a審計信息(主鍵)xmppVARCHAR255域的外部元件(主鍵)membersOnly canInvite roomPassword canDiscoverJID logEnabled subjectrolesToBroadcastNUMBER NUMBER VARCHAR NUMBER NUMBER VARCHAR NUMBER
28、 NUMBER NUMBERNUMBERn/a n/a 50n/a n/a 100n/a n/a n/an/a是否房間是會員制或不是否占用可以邀請其他用戶數(shù)據(jù)加入室是否真正JID 的居住者是公共或不是否房間談話或不最后為人所知的房間二元代表的作用,以廣播useNick是否用戶只能加入室使用其保留昵稱是否可以改變其占用的空間昵稱顯示用戶是否被允許登記室canChangeNickcanRegisterofMucRoomProp (名稱值的Groupchat 房間)列名類型長度描述propValueVARCHAR4000屬性值ofMucAffiliation (歸屬的空間用戶)列名類型長度描述aff
29、iliationNUMBERn/a一些代表所屬一級ofMucMember (室成員資料)列名類型長度描述nicknameVARCHAR255保留昵稱的會員ofMucConversationLog (室會話日志)列名類型長度描述roomID sender nickname logTime subjectbodyNUMBER TEXT VARCHAR VARCHAR VARCHARTEXTn/a n/a 2551550n/a的空間JID 的用戶發(fā)送郵件的房間 昵稱使用時由用戶發(fā)出的信息日期的消息時,被送到房間新的改變的信息消息正文ofPubsubNode (節(jié)點 pubsub 服務(wù))列名類型長度描
30、述roomIDjidNUMBERTEXTn/an/a用戶JID (主鍵)的房間(主鍵)roomIDjidNUMBERTEXTn/an/a用戶JID (主鍵)的房間(主鍵)roomIDnameNUMBERVARCHARn/a100屬性名稱(主鍵)的房間(主鍵)leaf creationDate modificationDateparentNUMBER VARCHAR VARCHAR VARCHAR NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER VARCHAR NUMBER NUMBER VARCHARVARCHARn
31、/a 1515100n/a n/a n/a n/a n/a n/a n/a n/a n/a 15n/a n/a 10100表明節(jié)點是否是葉或收集節(jié)點創(chuàng)建日期最后更新日期的父節(jié)點(如果有的話)是否有效載荷中包含delivayloadsmaxPayloadSize persistItems maxItems notifyConfigChanges notifyDelete notifyRetract presenceBased sendItemSubscribe publisherM subscriptionEnabledconfigSubscription最大規(guī)模的有效載荷的字節(jié)表明節(jié)點是否將持
32、續(xù)最大的項目數(shù)量將持續(xù)項目是否發(fā)送通知時,該節(jié)點的配置發(fā)生了變化是否發(fā)送通知時,該節(jié)點將被刪除是否發(fā)送通知時,發(fā)布的項目將被刪除是否發(fā)送通知只有用戶才是否向去年項目,以新用戶Publisher 中使用的模式的節(jié)點是否允許訂閱是否新的訂戶必須設(shè)定為活躍模型所使用的節(jié)點類型的有效載荷數(shù)據(jù)將提供在節(jié)點的一個XSLT 轉(zhuǎn)換有效載荷的格式為一個郵件正文的一個XSLT 轉(zhuǎn)化的有效載荷格式的數(shù)據(jù)形式結(jié)果JID 的實體建立了節(jié)點說明節(jié)點默認(rèn)語言的節(jié)點acsMpayloadTypebodyXSLTVARCHAR100dataformXSLTVARCHAR100creator description langua
33、ge namereplyPolicyVARCHAR VARCHAR VARCHAR VARCHAR VARCHAR VARCHARNUMBER1024255255501515n/a名稱節(jié)點政策界定業(yè)主或商是否應(yīng)得到答復(fù)項目assotionPolicy政策規(guī)定誰可以聯(lián)系葉節(jié)點的集合maxLeafNodes一些葉節(jié)點,一個節(jié)點可能會收集ofPubsubNodeJIDs ( JIDs 與節(jié)點)列名類型長度描述assotionTypeVARCHAR20類型的節(jié)點serviceID nodeIDjidVARCHAR VARCHARVARCHAR1001001024JID 實體(主鍵)的節(jié)點(主鍵)托管服
34、務(wù)節(jié)點(主鍵)serviceIDnodeIDVARCHARVARCHAR100100的節(jié)點(主鍵)托管服務(wù)節(jié)點(主鍵)ofPubsubNodeGroups (名冊與節(jié)點)列名類型長度內(nèi)容serviceID nodeIDrosterGroupVARCHAR VARCHARVARCHAR100100100托管服務(wù)節(jié)點的節(jié)點名冊組節(jié)點所有者可以簽署和檢索項目ofPubsubAffiliation (節(jié)點分支機構(gòu))列名類型長度描述affiliationVARCHAR10所屬類別ofPubsubItem (項目發(fā)布到節(jié)點)列名類型長度描述jid creationDatepayloadVARCHAR VA
35、RCHARTEXT102415n/aJID商創(chuàng)建日期XML 的有效載荷包括在項目ofPubsubSubscription (訂閱節(jié)點)列名類型長度描述jid owner sedeliver digestdigest_frequencyexpireVARCHAR VARCHAR VARCHAR NUMBER NUMBER NUMBERVARCHAR1024102415n/a n/a n/a15地址接收通知JID 的子公司,擁有認(rèn)購 國家認(rèn)購(工作流程中的)是否通知或未啟用表明一個實體是否希望收到通知摘要 最低數(shù)目的毫秒之間發(fā)出任何兩個通知消化日期在租賃認(rèn)購將結(jié)束或已經(jīng)結(jié)束表明一個實體是否希望收到
36、郵件正文除了有效載荷格式includeBodyNUMBERn/ashowValues subscriptionTypesubscriptionDepthVARCHAR VARCHARNUMBER3010n/a存在這些國家的實體希望收到通知無論是用戶訂閱的項目或節(jié)點(收集節(jié)點只)收到通知的兒童一定深度(收集節(jié)點只)serviceIDnodeID idVARCHARVARCHAR VARCHAR100托管服務(wù)節(jié)點(主鍵)100的節(jié)點(主鍵)100認(rèn)購(主鍵)serviceIDVARCHAR100托管服務(wù)節(jié)點(主鍵)nodeIDVARCHAR100的節(jié)點(主鍵)idVARCHAR100的項目(獨特的
37、每個節(jié)點)(主鍵)serviceIDnodeID jidVARCHARVARCHAR VARCHAR100托管服務(wù)節(jié)點(主鍵)100的節(jié)點(主鍵)1024JID 的子公司(主鍵)keywordVARCHAR200關(guān)鍵字活動必須符合ofPubsubDefaultConf(默認(rèn)配置節(jié)點)列名類型長度描述delivayloadsNUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER VARCHAR NUMBER VARCHAR VARCHAR VARCHAR VARCHARNUMBERn/a n/a n/a n/a n/a n/a
38、 n/a n/a n/a 15n/a 102551515n/a是否有效載荷中包含maxPayloadSize persistItems maxItems notifyConfigChanges notifyDelete notifyRetract presenceBased sendItemSubscribe publisherMsubscriptionEnabled最大規(guī)模的有效載荷的字節(jié)表明節(jié)點是否將持續(xù)最大的項目數(shù)量將持續(xù)項目是否發(fā)送通知時,該節(jié)點的配置發(fā)生了變化是否發(fā)送通知時,該節(jié)點將被刪除是否發(fā)送通知時,發(fā)布的項目將被刪除是否發(fā)送通知只有用戶才是否向去年項目,以新用戶Publishe
39、r 中使用的模式的節(jié)點是否允許訂閱acsM模型所使用的節(jié)點默認(rèn)語言的節(jié)點languagereplyPolicy政策界定業(yè)主或商是否應(yīng)得到答復(fù)項目assotionPolicy政策規(guī)定誰可以聯(lián)系葉節(jié)點的集合一些葉節(jié)點,一個節(jié)點可能會收集maxLeafNodesWEB 服務(wù)器Openfire 采用內(nèi)置的 jetty 作 web 服務(wù)器,在啟動 AdminConsolePlugin 插件時調(diào)用 startup()方法啟動 jetty 服務(wù)器,9090 為其明文端口,9091 為其加密端口。頁面處理Openfire 沒有采用現(xiàn)在很流行的技術(shù)架構(gòu)(SSH),只使用 JSP+JavaBean,但是它有自己的
40、系統(tǒng)設(shè)計,就連日志都是自己做的,沒有使用 熟悉的 log4j?,F(xiàn)有的 Openfire 管理控制臺可采用插件方式進行擴展(詳見插件開發(fā)說明部分介紹),頁面采用 Jsp 方式實現(xiàn),頁面直接調(diào)用業(yè)務(wù)處理邏輯類(通常命名為 XXManager)的實例方法,通常通過 request 對象封裝的方式傳遞頁面展現(xiàn)判定變量,常出現(xiàn)本頁跳轉(zhuǎn)。每個插件可定義自己的 Servlet 類和 web.xml 及serviceIDVARCHAR100托管服務(wù)節(jié)點(主鍵)leafNUMBERn/a是否配置屬于葉或收集節(jié)點(主鍵)web-custom.xml 配置文件。采用裝飾框架方式展現(xiàn)頁面,decorator 頁面有兩
41、個,即 src/web/decorators目錄下的兩個頁面 main.jsp 和 setup.jsp。采用自定義的 admin實現(xiàn),標(biāo)類放置在 簽庫 admld 放置在 src/web/WEB-INF 目錄下, .jivesoftware.admin 包下,有 SidebarTag、SubnavTag、SubSidebarTag、TabsTag 四個類。在調(diào)用 lolugin()方法進行插件加載時,插件的plugin.xml 配置文件, 將獲取的相關(guān)信息封裝在 AdminConsole 類的 generatedM對象中,后期通過插件類提取該對象中的數(shù)據(jù)并配合sitemesh 裝飾器進行頁面展
42、現(xiàn)。詳見“使用 dom4j 設(shè)計 Openfire 式導(dǎo)航菜單”部分相關(guān)介紹。插件開發(fā)Openfire Plugins 加載流程插件開發(fā)說明所有插件都存放在 openfire 根下的 plugins 目錄下。當(dāng)一個插件被以 JAR或 WAR 文件發(fā)布時,他自動擴展為一個文件夾。插件目錄結(jié)構(gòu)如下所示:Plugin Structure myplugin/|-|-|-|-plugin.xml readme.html changelog.html logo_small.gif- 插件定義文件- 可選的插件自己述文件,它將被顯示給最終用戶。-可選的插件版本日志文件,它將被展現(xiàn)給最終用戶。- 可選的與插件
43、關(guān)聯(lián)的小圖標(biāo)(16x16)文件(也能為png 文件)|- logo_large.gif文件)-可選的與插件關(guān)聯(lián)的大圖標(biāo)(32x32)文件(也能為 png|-|-|-|-|-classes/ database/ i18n/ lib/web|- WEB-INF/|- web.xml-你的插件需要的資源文件(如 properties 文件)可選的你的插件需要的數(shù)據(jù)庫 schema 文件可選的 i18n 文件,它們?yōu)椴寮峁┠愕牟寮枰膸?JAR 文件)支持需要集成到管理控制臺中的各類資源(如果有的話)- 配置 jsp 調(diào)度的 web.xml 配置文件- 可選的用戶定義的 web.xml 文件,用于
44、調(diào)|- web-custom.xml度自定義 servlets|- images/若插件需要為 Openfire 的管理控制臺添加內(nèi)容,則 web 文件夾必須存在。具體內(nèi)容詳述如下。Plugin.xml 文件指定了主插件類,下面是一個例子。Itvi plugin.xml?xml ver=1.0 encoding=UTF-8?plugin.ItviTestPluginThis is an exle plugin.Jive Software1.007/01/2006minServerVer3.0.0gplle url=sle.html各元數(shù)據(jù)域能在 plugin.xml 文件中進行設(shè)置:name
45、插件名. description 插件描述. author 插件作者.ver 插件版本.date 插件版本生成日期。該日期必須為 MM/dd/yyyy 格式, 如07/01/2006.url 關(guān)于該插件的詳細(xì)信息可以從該地址獲取.minServerVer 為運行該插件所需的最低的 Openfire版本(Openfire 2.1.2 及后續(xù)版本支持該選項).如果服務(wù)器版本低于需要的最低版本,插件將不會啟動.databaseKey 如果插件需要它自己的數(shù)據(jù)庫表,必須將 databaseKey元素設(shè)置為一個 schema key name(通常與插件同名). 然后需將所有需支持?jǐn)?shù)據(jù)庫類型的數(shù)據(jù)庫 s
46、chema 文件放到插件的 database 文件夾下.例如,給一個關(guān)鍵字“foo”,那么 schema 文件需命名為foo_.sql,foo_oracle.sql等.建議你在命名你的表時加上前綴of(openfire),以避免與其他可能使用同一數(shù)據(jù)庫的其他應(yīng)用系統(tǒng)需要的表產(chǎn)生.關(guān)于版本的描述信息需添加到 ofVer表中,以對應(yīng)的 key做標(biāo)識,這樣可以schema 版本信息,如:INSERTO ofVer(name, ver) VALUES (foo, 0);databaseVer數(shù)據(jù)庫 schema 版本(如果定義了數(shù)據(jù)庫 schema)。有數(shù)據(jù)庫 schema 的新插件的版本從 0 開始
47、。如果以后的插件版本需要更新 schema,這些更新能通過在 database/upgrade 目錄下為各版本創(chuàng)建子目錄的方式來定義。例如目錄 database/upgrade/1 和database/upgrade/2 將包括如 foo_.sql和foo_oracle.sql這樣的包含各版本相應(yīng)的數(shù)據(jù)庫改變信息的.這些中均需要更新ofVer表的信息,如:UPDATE ofVerset ver=1 where name=foo;parentPlugin 父插件名 (foo.jar插件相應(yīng)的為foo).當(dāng)一個插件有一個父插件,將不會創(chuàng)建一個新的 class loader,相應(yīng)地替換為使用父插件的
48、 class loader。這使得插件間能更緊密地聯(lián)合工作。子插件不能脫離父插件獨立工作。licenseType 指定 類型信息。 有效值包括:o commerl: 插件被發(fā)布為商業(yè)性插件。gpl: 插件被發(fā)布為遵循 GNU Public License (GPL)協(xié)議。apache: 插件被發(fā)布為 Apache license 系列o ernal: 插件,且不能被重新發(fā)布。o other: 插件被發(fā)布為與其他目錄下的版本限制不同。License信息需在插件自述文件中進行詳細(xì)描述。如果類型未設(shè)置,默認(rèn)為 other。為了給最終用戶提供插件的額外信息,可以為插件添加一些額外文件(全放置在插件的主
49、目錄下):readme.html changelog.html logo_small.png gif 文件)。 logo_large.png gif 文件)??蛇x的插件自述文件,它的信息將展現(xiàn)給最終用戶。-可選的插件版本日子文件,它將被展現(xiàn)給最終用戶。-可選的與插件關(guān)聯(lián)的小圖標(biāo)(16x16)文件(也能為-可選的與插件關(guān)聯(lián)的大圖標(biāo)(32x32)文件(也能為插件必須實現(xiàn) Plugin 接口,且有一個默認(rèn)構(gòu)造函數(shù)。Plugin 接口包含了初始化和銷毀插件的方法。Sle plugin implemenionpackage.exle;import import.jivesoftware.openfire
50、.contain.jivesoftware.openfire.containlugin;luganager;importjava.io.File;/* A s*/ publicle plugin for Openfire.class ExlePlugin implements Plugin public void initializePlugin(Plug pluginDirectory) anager manager,File/Yourcode goes herepublic/void YourdestroyPlugin() code goes hereOpenfire 插件開發(fā)指南導(dǎo)言插件
51、是增強Openfire 功能。這份文件是一個開發(fā)創(chuàng)建插件指南。結(jié)構(gòu)的一個插件插件存放在插件openfireHome 目錄。當(dāng)部署一個 jar 或 war 插件文件,它會自動解壓安裝。該文件在插件目錄結(jié)構(gòu)如下:插件結(jié)構(gòu)myplugin /|-plugin.xml件定義文件插|-readme.html自述文件的插件,它會顯示給最終用戶|-changelog.html件的插件,它會顯示給最終用戶修改文|-icon_small.gif( 16x16 )圖標(biāo)與插件(也可以是可選小PNG 文件)| -icon_large.gif( 32x32 )圖標(biāo)與插件(也可以是可選大PNG 文件)|classes/資
52、源的插件需要(即屬性文件)|-database/可選數(shù)據(jù)庫架構(gòu)文件,你需要插件|-i18n/插件的語言配置。|-lib/您的插件的 jar 包|-web資源的管理控制臺集成,如果有的話| - WEB-INF/| -生成 web.xml 中含web.xml有編譯 JSP 的條目|-web-custom.xml自定義的 web.xml 中的自定義 servlets可選用戶|-images/放的目錄文件存web 目錄存在的插件,需要添加到Openfire 管理控制臺。進一步的細(xì)節(jié)如下。在 plugin.xml 文件規(guī)定的主要插件類。樣本文件看起來可能如下:樣本plugin.xml?xml ver=1
53、.0 encoding=UTF-8?要的插件類.exle.ExlePluginExle PluginThis is an exle plugin.Jive Software1.007/01/2006 sp3.0.0gpl該元數(shù)據(jù)的領(lǐng)域,可以設(shè)置在plugin.xml 文件:name-插件的名稱。description-插件的說明。author-插件的作者。ver-該插件的版本。date-發(fā)布日期如 2006 年 7 月 1 日。url-插件。minServerVer-最低Openfire 版本databaseKey-如果插件需要它自己的數(shù)據(jù)表,該 databaseKey 內(nèi)容應(yīng)設(shè)立一個架構(gòu)主要
54、名稱(通常是相同名稱的插件)。數(shù)據(jù)庫架構(gòu)文件為每個支持的數(shù)據(jù)庫,然后放置在數(shù)據(jù)庫目錄下的插件。例如, “foo”,架構(gòu)文件將被稱為“ foo_免可能的.sql ” , “ foo_oracle.sql ”等等,建議您,您的表前綴of ,以避與其他應(yīng)用程序安裝在同一數(shù)據(jù)庫。應(yīng)該進入 ofVer表使用的關(guān)鍵,這樣的架構(gòu)版本信息可,例如:(name, ver) VALUES (foo, 0); databaseVer-數(shù)據(jù)INSERTO ofVer庫版本號(如果數(shù)據(jù)庫模式的定義)。新的插件與數(shù)據(jù)庫架構(gòu)應(yīng)該開始在版本。如果將來插件版本的需要更新,這些更新可以定義創(chuàng)建子目錄中的升級數(shù)據(jù)庫目錄為每個版本。
55、例如,目錄 database/upgrade/1 和 database/upgrade/2 將包含,如“ foo_.sql ”和“ foo_oracle.sql ”中包含相關(guān)的數(shù)據(jù)庫,為每一個版本的變化。每個應(yīng)該更新版本中的信息ofVer表,例如:UPDATE ofVerset ver=1 where name=foo;parentPlugin -父層插件(作為“foo”的“ foo.jar ”插件)。當(dāng)一個插件有一個父插件,插件的類加載器將被使用來而不是建立一個新的類加載器。這可讓插件更加緊密地協(xié)同工作。子插件將不會影響其父插件。“l(fā)icenseType”:顯示協(xié)議,該插件是由。有效值如下:
56、o “commerl”:commerl “商業(yè)” :插件是下發(fā)布的商業(yè)協(xié)議。o “gpl”: “通用公共證” :插件發(fā)布使用GNU 公共( GPL )。o “apache” :該插件發(fā)布的Apache證。o “ernal” :()插件是供的只,并不會重新分配。o “other” :(其他)插件是下發(fā)布agrement 不屬于其中的其他類別。許可協(xié)議的細(xì)節(jié)應(yīng)該在插件的自述。如果證類型未設(shè)置,這是假定其他。一些額外的文件都可以在該插件提供資料,以最終用戶(所有放置在主要的插件目錄):readme.html -可選自述文件的插件,它會顯示給最終用戶。changelog.html -可選修改文件的插件
57、,它會顯示給最終用戶。icon_small.png -可選?。?16x16 )圖標(biāo)相關(guān)插件。也可以是。 GIF 文件。icon_large.png -可選大( 32x32 )圖標(biāo)相關(guān)插件。也可以是。 GIF 文件。erfacefrom the Openfire API as well as have a default (no argument)contructor.您的插件類必須執(zhí)行插件接口從Openfire 的 API ,以及有一個缺省(無參數(shù))contructor 。插件接口方法初始化和銷毀插件。采用插件執(zhí)行package.exle;import import.jivesoftware.
58、openfire.contain.jivesoftware.openfire.containlugin;luganager;importjava.io.File;/* A s*/ publicle plugin for Openfire.class ExlePlugin implements Plugin public void initializePlugin(Plug pluginDirectory) /您的代碼anager manager, Filepublic void destroyPlugin() /您的代碼General Plugin Best Practi一般插件最佳實踐在選擇
59、包的名稱為您的插件,建議您選擇一些與眾不同的您和/或您的組織,以幫助避盡可能。例如,如果每個人去與.exle.PluginName ,即使 PluginName 是不同的,免您可能會開始投放到一些在這里和那里的類名。尤其是當(dāng)工作與聚類。修改管理控制臺插件可以添加,區(qū)段,和網(wǎng)頁的管理控制臺。有幾個步驟,以完成這項:第一個必須添加到 plugin.xml 文件。JSP 的文件必須編制和實施的類路徑的插件。阿 web.xml 中的匯編文件,其中包含的JSP servlet 的條目必須付諸網(wǎng)頁/目錄下的插件。注: Openfire 建立以協(xié)助編制JSPs 和創(chuàng)造web.xml 中。這是詳細(xì)說明如下???/p>
60、任何圖像所需的JSP 頁面必須住在網(wǎng)頁/圖像/目錄。只有 GIF 和PNG 圖像的支持。該部分 plugin.xml 定義額外的plugin.xml 文件看起來可能如下:,科和項目管理控制臺框架。抽樣樣本plugin.xml.exle.ExlePlugin在這個例子中,定義一個新的“范例” ,一個目“插件”和一個網(wǎng)頁“插件管理” 。已經(jīng)的,插件admin.jsp 頁面。您可以覆蓋現(xiàn)有的,區(qū)段,項目利用現(xiàn)有的ID 屬性值在自己的定義。管理控制臺最佳實踐有幾種最佳做法時,需要考慮變更Openfire 管理控制臺通過一個插件??偟牟寮?yīng)該:是無縫集成的集成到現(xiàn)有的重要的新功能。和側(cè)欄節(jié)只要有可能不是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)校介護實訓(xùn)室設(shè)備采購 投標(biāo)方案(技術(shù)方案)
- 體育館土石方運輸平整協(xié)議
- 醫(yī)療器械操作規(guī)范與標(biāo)準(zhǔn)作業(yè)指導(dǎo)書
- 環(huán)保理念與低碳生活實踐方法作業(yè)指導(dǎo)書
- 三農(nóng)人才培養(yǎng)及實施方案指導(dǎo)書
- 新能源汽車充電紅燈
- 新能源汽車充電樁難題
- 品牌管理與推廣操作手冊
- 商家自行配送怎么查物流
- 施工建筑設(shè)計說明
- 保安招聘個人信息登記表
- 全國優(yōu)質(zhì)課一等獎職業(yè)學(xué)校教師信息化大賽建筑類《三面正投影圖》說課課件
- 秦漢時期建筑
- 東成28電錘使用說明書
- 六年級1班語文老師家長會課件
- 哲學(xué)與人生課件
- APIC 基于風(fēng)險的數(shù)據(jù)完整性管理實踐指南-2019(中英文對照版)
- 港澳臺專題教育課件
- 環(huán)縣聲環(huán)境功能區(qū)劃技術(shù)報告(2018-2022)
- 高中英語外研版高中必修2Module3Music-Music教案
- 車間主要生產(chǎn)設(shè)備一覽表
評論
0/150
提交評論