一些參考o(jì)penfire綜合介紹_第1頁
一些參考o(jì)penfire綜合介紹_第2頁
一些參考o(jì)penfire綜合介紹_第3頁
一些參考o(jì)penfire綜合介紹_第4頁
一些參考o(jì)penfire綜合介紹_第5頁
已閱讀5頁,還剩85頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、免費(fèi)版,也是寫的最詳細(xì)的基礎(chǔ)簡(jiǎn)介XMPPExtensible Messaging and Presence Protocol,簡(jiǎn)單的來講,它就是一個(gè)發(fā)送接收處理消息的協(xié)議,但是這個(gè)協(xié)議發(fā)送的消息,既不是二進(jìn)制的東東也不是字符串,而是 XML。正是因?yàn)槭褂昧薠ML 作為消息傳遞的中介,Extensible 才談的上,不是么?IMInstant Messenger,及時(shí)通信,就是大家使用的、MSN Messenger 和 Gtalk 等等。其中 Gtalk 就是基于 XMPP 協(xié)議的一個(gè)實(shí)現(xiàn),其他的則不是。當(dāng)前 IM 幾乎作為每個(gè)上網(wǎng)者必然使用的工具,在國(guó)外的大型企業(yè)中有一些企業(yè)級(jí)的 IM 應(yīng)用,

2、但是其還沒完全發(fā)揮出來。設(shè)想既然 XMPP 協(xié)議是一個(gè)公開的協(xié)議,那么每個(gè)企業(yè)都可以利用它來開發(fā)適合本身企業(yè)工作,提高自身生產(chǎn)效率的 IM;甚至,你還可以在中集成這種通信,不但讓你可以邊邊聊天,也可以開發(fā)出適合本身的 IM 應(yīng)用,比如說一些游戲關(guān)鍵場(chǎng)景提醒功能,團(tuán)隊(duì)語音交流等等都可以基于 IM 來實(shí)現(xiàn)。Spark Smack 和 Openfire開源界總是有許多有趣的東東,這三個(gè)合起來就是一個(gè)完整的 XMPP IM 實(shí)現(xiàn)。包括服務(wù)器端Openfire,客戶端Spark,XMPP 傳輸協(xié)議的實(shí)現(xiàn)Smack(記住,XMPP是一個(gè)協(xié)議,協(xié)議是需要實(shí)現(xiàn)的,Smack 起到的就是這樣的一個(gè)作用)。三者都

3、是基于 Java 語言的實(shí)現(xiàn)。Spark 提供了客戶端一個(gè)基本的實(shí)現(xiàn),并提出了一個(gè)很好的插件架構(gòu),這對(duì)于開發(fā)者來說不能不說是一個(gè)。我強(qiáng)烈建議基于插件方式來實(shí)現(xiàn)你新增加的功能,而不是去改它的源代碼,這樣有利于你項(xiàng)目架構(gòu),把原始項(xiàng)目的影響降到最低。Openfire 是基于 XMPP 協(xié)議的 IM 的服務(wù)器端的一個(gè)實(shí)現(xiàn),雖然當(dāng)兩個(gè)用戶連接后,可以通過點(diǎn)對(duì)點(diǎn)的方式來發(fā)送消息,但是用戶還是需要連接到服務(wù)器來獲取一些連接信息和通信信息的,所以服務(wù)器端是必須要實(shí)現(xiàn)的。Openfire 也提供了一些基本功能,但真的很基本的!慶幸的是,它也提供插件的擴(kuò)展,像 Spark 一樣,同樣強(qiáng)烈建議使用插件擴(kuò)展的方式來增

4、加新的功能,而不是修改人家的源代碼。Smack 是一個(gè) XMPP 協(xié)議的 Java 實(shí)現(xiàn),提供一套可擴(kuò)展的 API,不過有些時(shí)候,你還是不得不使用自己定制發(fā)送的XML 文件內(nèi)容的方式來實(shí)現(xiàn)自己的功能下圖展示了三者之間的關(guān)系:從圖上可以了解到,cnt二者傳遞數(shù)據(jù)的媒介。端和 server 端都可以通過插件的方式來進(jìn)行擴(kuò)展,smack 是Apache MINAOpenfire 的通信處理基于Apache MINA 框架實(shí)現(xiàn)。Apache MINA 是一個(gè)網(wǎng)絡(luò)應(yīng)用程序框架,用來幫助用戶簡(jiǎn)單地開發(fā)高性能和高可靠性的網(wǎng)絡(luò)應(yīng)用程序。它提供了一個(gè)通過 Java NIO 在不同的傳輸例如TCP/IP 和 UD

5、P/IP 上抽象的事件驅(qū)動(dòng)的異步 API。Apache MINA 也稱為:NIO 框架庫客戶端服務(wù)器框架庫一個(gè)網(wǎng)絡(luò)套接字庫MINA 雖然簡(jiǎn)單但是仍然提供了全功能的網(wǎng)絡(luò)應(yīng)用程序框架:為不同的傳輸類型提供了的 API:通過 Java NIO 提供 TCP/IP 和 UDP/IP 支持通過 RXTX 提供串口通訊(RS232)In-VM 管道通訊你能實(shí)現(xiàn)你自己的 API!過濾器作為一個(gè)擴(kuò)展特性; 類似Servlet 過濾器低級(jí)和高級(jí)的 API:低級(jí): 使用字節(jié)緩存(ByteBuffers)高級(jí): 使用用戶定義的消息對(duì)象(objects)和編碼(codecs)高度定制化線程模型:單線程一個(gè)線程池一個(gè)以

6、上的線程池(也就是SEDA)使用 Java 5 SSL 引擎提供沙盒(Out-of-the-box) SSL TLS StartTLS 支持超載保護(hù)和傳輸流量控制利用模擬對(duì)象進(jìn)行單元測(cè)試JMX 管理能力通過StreamIoHandler 提供基于流的 I/O 支持 和知名的容器(例如 PicoContainer、Spring)集成從Netty 平滑的遷移到 MINA, Netty 是 MINA 的前輩。命名規(guī)則Openfire 中常見的類名后綴命名包括 Startlugin 、Listener 、Dispatcher、Handler、Manag意義:rovider,通常情況下,這些命名類包括如

7、下XXStarter系統(tǒng)啟動(dòng)類,如.jivesoftware.openfire.starter.ServerStarter,調(diào)用其 start()方法可啟動(dòng)系統(tǒng)應(yīng)用。XXListener業(yè)務(wù)的最終處理類。所有的業(yè)務(wù)都是在 Listener 類中實(shí)現(xiàn)的XXDispatcher調(diào)度類(發(fā)布),其中有很多關(guān)鍵方法,如 addListener(),以組合的方式,為類內(nèi)定義的靜態(tài) Set實(shí)例添加 XXListener 對(duì)象。以便調(diào)用 dispatchEvent(String property, EventType eventType, Map params)方法遍歷處理 Set 集中的 XXListen

8、er 對(duì)象(通過調(diào)用 XXListener 對(duì)象的各實(shí)際方法完成實(shí)際業(yè)務(wù))。XXPlugin實(shí)現(xiàn) Plugin 接口的插件類, 需實(shí)現(xiàn) initializePlugin(Pluganagermanager, File pluginDirectory)方法和 destroyPlugin()方法。在其初始化方法 中 調(diào) 用Dispatcher實(shí) 現(xiàn) 類 的addListener() 方 法 如PropertyEventDispatcher.addListener(this)。XXProvider實(shí)現(xiàn)面向接口編程方式的接口類,通過反射機(jī)制創(chuàng)建具體實(shí)現(xiàn)類的對(duì)象,反射類名配置在 ofproperty 表

9、對(duì)應(yīng)的propvalue 屬性中。若沒有相關(guān)配置,則調(diào)用默認(rèn)實(shí)現(xiàn)類,默認(rèn)實(shí)現(xiàn)類類名命名規(guī)則為 DefaultXXProvider。XXHandler實(shí)際處理類,以ConnectionHandler為例,類在的.jivesoftware.openfire.spi.ConnectionManagerImplstartCntSSLListeners(String localIPAddress)方法中,有這樣一段代碼:sslSocketAcceptor.bind(new InetSocketAddress(binderface, port), newCntConnectionHandler(serve

10、rName);其中bind方法的第二個(gè)參數(shù)是新創(chuàng)建的一個(gè)C類。ntConnectionHandler的實(shí)例,而它就是ConnectionHandler的一個(gè)子系統(tǒng)配置項(xiàng)Openfire 的系統(tǒng)配置項(xiàng)采用文件結(jié)合數(shù)據(jù)庫表的方式配置,也有部分默認(rèn)配置項(xiàng)通過 Java 硬 編 碼 方 式 配 置 ( 如.jivesoftware.openfire.ConnectionManager 接口類中定義的 DEFAULT_PORT 、 DEFAULT_SSL_PORT 、PONENT_PORT 等),Openfire 中比較重要的配置位置包括:一、src/conf 目錄下的 openfire.xml 配置文

11、件。該配置文件為系統(tǒng)配置文件。在第一次啟動(dòng) Openfire 并通過管理控制臺(tái)完成安裝配置后會(huì)往該配置文件中填入相應(yīng)的配置信息。二、plugin.xml 配置文件。該配置文件為各插件包下的配置文件,由它確定插件處理類和相應(yīng)頁面插件的展現(xiàn)等。配置含義詳見插件開發(fā)說明部分。三、web.xml 和 web-custom.xml 配置文件。用于配置 servlet 和用戶自定義servlet(插件頁面用,放在插件對(duì)應(yīng)目錄下)。四、ofproperty 中的各條,該表中包括兩個(gè)字段 name 和 propvalue,分別代表配置項(xiàng)名和配置項(xiàng)值。系統(tǒng)啟動(dòng)流程系統(tǒng)啟動(dòng)時(shí)調(diào)用 ServerStarter 類中

12、的 start() 方法,通過反射加載.jivesoftware.openfire.XMPPServer 類文件,創(chuàng)建實(shí)例時(shí)調(diào)用其構(gòu)造函數(shù),在其構(gòu)造函數(shù)中調(diào)用其 start()方法實(shí)際啟動(dòng)服務(wù)應(yīng)用程序。Start()方法中首先調(diào)用 verifyDataSource() 方法驗(yàn)證并確保數(shù)據(jù)庫可以, 然后會(huì)調(diào)用loadModules();initModules();startModules();方法來對(duì) Module 接口的實(shí)現(xiàn)類的各子類進(jìn)行操作,依次完成模塊的加載、初始化和啟動(dòng)操作。loadModules()方法中會(huì)調(diào)用 loadModule(String module)方法通過反射加載各模塊類

13、,參數(shù)字符串 module 為對(duì)應(yīng)的模塊處理類的類名 如m。現(xiàn)以mandHandler 為例對(duì)mandHandler 類實(shí)例時(shí)調(diào)用接下來的處理流程進(jìn)行說明。通過 loadModule 創(chuàng)建其構(gòu)造函數(shù),在構(gòu)造函數(shù)中初始化了其私有mandManager 對(duì)象。在 initModules()時(shí)調(diào)用mandHandler 實(shí)例的 initialize(XMPPServer server)方法對(duì)其私有屬性對(duì)象進(jìn)行初始化。然后調(diào)用 start()方法,調(diào)用mands 方法添加命令并d)方法實(shí)現(xiàn))。啟動(dòng)命令(通過調(diào)用mand(mand網(wǎng)絡(luò)處理消息服務(wù)SSL等服 務(wù) 的 調(diào) 度在ConnectionManag

14、erImpl類 中 實(shí) 現(xiàn) 。ConnectionManagerImpl.createCntSSLListeners()方法啟動(dòng) 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ù)庫,需首先實(shí)現(xiàn)些接

15、口,此類為數(shù)據(jù)庫提供者接口,如需連接處理方式通常直接調(diào)用 XXManager 中的實(shí)例方法,XXManager 中又調(diào)用的是對(duì)應(yīng)的接口 XXProvider 的方法,實(shí)際操作在該接口的實(shí)現(xiàn)類中實(shí)現(xiàn)。實(shí)現(xiàn)類是動(dòng)態(tài)綁定的( 默認(rèn)的實(shí)現(xiàn)類通常命名規(guī)則為 DefaultXXProvider ), 在運(yùn)行時(shí)根據(jù) ofproperty 表中對(duì)應(yīng)配置項(xiàng)值選擇。下面以添加用戶組為例進(jìn)行說明。首先獲得 GroupManager 的一個(gè)實(shí)例, 在調(diào)用其構(gòu)造函數(shù)時(shí)調(diào)用 initProvider()方法,在該方法中獲取數(shù)據(jù)庫中配置項(xiàng)的值,若不為空則根據(jù)該值通過反射機(jī)制獲取 GroupProvider 接口的實(shí)現(xiàn)類實(shí)例

16、對(duì)象;若為空則以 DefaultGroupProvider 作為 GroupProvider 接口的實(shí)現(xiàn)類并創(chuàng)建實(shí)例對(duì)象,然后調(diào)用 GroupProvider. createGroup(String name)方法完成業(yè)務(wù)操作。常用類.jivesoftware.database.DbConnectionManager連接管理類.jivesoftware.util.JiveGlobals通常用于操作 ofproperty 表中openfire 數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)庫表以下是一個(gè)說明每個(gè)表格的Openfire 數(shù)據(jù)庫架構(gòu)。黃色行表示主鍵。ofGroupofGroupPropofGroupUserofIDo

17、fOfflineofPresenceofPrivateofUserofUsropofUserFlagofRosterofRosterGroupsofPrivacyListofVCardofVerofPropertyponentConfofRemoteServerConfofSecurityAuditLogofMucServiceofMucServicePropofMucRoomofMucRoomPropofMucAffiliationofMucMemberofMucConversationLogofPubsubNodeofPubsubNodeJIDsofPubsubNodeGroupsofPu

18、bsubAffiliationofPubsubItemofPubsubSubscriptionofPubsubDefaultConfofGroup (用戶組的數(shù)據(jù))列名類型長(zhǎng)度描述descriptionVARCHAR255組描述ofGroupProp (名稱值為一組)列名類型長(zhǎng)度描述propValueVARCHAR4000組屬性值ofGroupUser(組成員)列名類型長(zhǎng)度描述ofID (用于唯一ID 序列生成)列名類型長(zhǎng)度描述idNUMBERn/a下一個(gè)可用塊的(用于數(shù)據(jù)庫獨(dú)立)ofOffline (離線郵件)列名類型長(zhǎng)度更改creationDatemessageSizeVARCHARNUM

19、BER15n/a日期信息郵件的大小以字節(jié)為usernamemessageIDVARCHARNUMBER32用戶名(主鍵)n/a信息的(主鍵)idTypeNUMBERn/a證件類型(例如,組,用戶名冊(cè))(主鍵)groupNameVARCHAR50組名稱(主鍵)usernameadministratorVARCHARNUMBER100用戶名(主鍵)n/a是否為管理員()(主鍵)groupNameVARCHAR50組名稱(主鍵)nameVARCHAR100組屬性名稱(主鍵)groupNameVARCHAR50組名稱(主鍵)stanzaTEXTn/a消息文本ofPresence (離線的存在)列名類型

20、長(zhǎng)度更改offlineDateCHAR15信息日期ofPrivate (私人數(shù)據(jù))列名類型長(zhǎng)度描述privateDaEXTn/a價(jià)值的私人數(shù)據(jù)ofUser (用戶數(shù)據(jù))列名類型長(zhǎng)度描述plainPassword encryptedPasswordnameVARCHAR VARCHAR VARCHAR VARCHAR VARCHARVARCHAR322551001001515純文字?jǐn)?shù)據(jù)加密的數(shù)據(jù)(默認(rèn))名字電郵地址creationDatemodificationDate創(chuàng)建日期最后更新日期ofUsrop (名稱值針對(duì)用戶)列名類型長(zhǎng)度描述propValueVARCHAR4000用戶屬性值ofUs

21、erFlag (用戶類型標(biāo)識(shí)(如殘疾人)列名類型長(zhǎng)度描述startTimeendTimeCHARCHAR1515國(guó)旗的時(shí)候,開始被有效(無效的現(xiàn)在)當(dāng)時(shí)國(guó)旗是結(jié)束有效(無效的 )ofRoster (好友列表)列名類型長(zhǎng)度描述rosterIDNUMBERn/a名冊(cè)(主鍵)usernameVARCHAR64用戶名(主鍵)nameVARCHAR100用戶屬性名稱(主鍵)usernameVARCHAR32用戶名(主鍵)nameVARCHAR100用戶屬性名稱(主鍵)usernameVARCHAR32用戶名(主鍵)usernamename namespaceVARCHARVARCHAR VARCHAR3

22、2用戶名(主鍵)100私營(yíng)項(xiàng)(主鍵)200名字空間私營(yíng)項(xiàng)(主鍵)usernameVARCHAR64用戶名(主鍵)offlinePresenceTEXTn/a存在的信息設(shè)置為用戶注銷username jidsub ask recvnickVARCHAR TEXT NUMBER NUMBER NUMBERVARCHAR32n/a n/a n/a n/a255用戶名地址名冊(cè)入境認(rèn)購地位入境賣出地位入境表明進(jìn)入名冊(cè)收到請(qǐng)求昵稱分配給這個(gè)名冊(cè)入境ofRosterGroups (組的好友中的條目)列名類型長(zhǎng)度描述groupNameVARCHAR255用戶定義的名稱,這個(gè)名冊(cè)組ofPrivacyList (

23、用戶隱私)列名類型長(zhǎng)度描述isDefaultlistNUMBERTEXTn/an/a,如果這是默認(rèn)隱私的用戶XML 表示的隱私ofVCard (電子名片的聯(lián)系信息)列名類型長(zhǎng)度描述vcardTEXTn/a價(jià)值的vCard 入境ofVer(包含產(chǎn)品版本信息)列名類型長(zhǎng)度描述verEGERn/a版本號(hào)ofProperty (服務(wù)器屬性)列名類型長(zhǎng)度描述propValueTEXTn/a進(jìn)入值ponentConf (外部元件配置)列名類型長(zhǎng)度描述secretpermisVARCHARVARCHAR25510共享密鑰的外部元件,表明如果組件是可以連接到服務(wù)器ofRemoteServerConf (服務(wù)器

24、配置)subVARCHAR255子的外部元件(主鍵)nameVARCHAR100屬性名稱(主鍵)nameVARCHAR50名稱的項(xiàng)目,版本信息正在的(主鍵)usernameVARCHAR32用戶名(主鍵)usernameVARCHAR32用戶名(主鍵)(主鍵)nameVARCHAR100rosterIDNUMBERn/a名冊(cè)(主鍵)rNUMBERn/a立場(chǎng)項(xiàng)(主鍵)列名類型長(zhǎng)度描述remotePortpermisNUMBERVARCHARn/a10港口的服務(wù)器連接到,表明如果服務(wù)器可以連接到服務(wù)器ofSecurityAuditLog (伐木安全事件)列名類型長(zhǎng)度描述username entry

25、St summary nodedetailsVARCHAR NUMBER VARCHAR VARCHARTEXT64n/a 255255n/a使用者誰執(zhí)行的行動(dòng)時(shí)間戳當(dāng)事件發(fā)生 總結(jié)了發(fā)生在事件節(jié)點(diǎn)事件發(fā)生詳細(xì)的細(xì)節(jié),所發(fā)生的ofMucService (甲Groupchat 服務(wù))列名類型長(zhǎng)度描述descriptionisHiddenVARCHARNUMBER255n/a服務(wù)說明1 ,如果隱藏的管理界面, 0 正常ofMucServiceProp (名稱值的Groupchat 服務(wù))列名類型長(zhǎng)度描述propValueTEXTn/a屬性值ofMucRoom (Groupchat 室內(nèi)資料)列名類

26、型長(zhǎng)度描述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)建日期最后更新日期房間用作公共天然名稱室客房描述是否可以改變參與者的一些房間居住者是否與會(huì)者可以改變的或不指示是否室將在目錄中列出或不指示是

27、否室主持或不roomIDNUMBERn/a的房間(主鍵)serviceIDnameNUMBERVARCHARn/a的服務(wù)(主鍵)100屬性名稱(主鍵)serviceIDNUMBERn/a的服務(wù)(收錄)subVARCHAR255子服務(wù)(主鍵)msgIDNUMBERn/a審計(jì)信息(主鍵)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是否房間是會(huì)員制或不是否占用可以邀請(qǐng)其他用戶數(shù)據(jù)加入室是否真正JID 的居住者是公共或不是否房間談話或不最后為人所知的房間二元代表的作用,以廣播useNick是否用戶只能加入室使用其保留昵稱是否可以改變其占用的空間昵稱顯示用戶是否被允許登記室canChangeNickcanRegisterofMucRoomProp (名稱值的Groupchat 房間)列名類型長(zhǎng)度描述propValueVARCHAR4000屬性值ofMucAffiliation (歸屬的空間用戶)列名類型長(zhǎng)度描述aff

29、iliationNUMBERn/a一些代表所屬一級(jí)ofMucMember (室成員資料)列名類型長(zhǎng)度描述nicknameVARCHAR255保留昵稱的會(huì)員ofMucConversationLog (室會(huì)話日志)列名類型長(zhǎng)度描述roomID sender nickname logTime subjectbodyNUMBER TEXT VARCHAR VARCHAR VARCHARTEXTn/a n/a 2551550n/a的空間JID 的用戶發(fā)送郵件的房間 昵稱使用時(shí)由用戶發(fā)出的信息日期的消息時(shí),被送到房間新的改變的信息消息正文ofPubsubNode (節(jié)點(diǎn) pubsub 服務(wù))列名類型長(zhǎng)度描

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é)點(diǎn)是否是葉或收集節(jié)點(diǎn)創(chuàng)建日期最后更新日期的父節(jié)點(diǎn)(如果有的話)是否有效載荷中包含delivayloadsmaxPayloadSize persistItems maxItems notifyConfigChanges notifyDelete notifyRetract presenceBased sendItemSubscribe publisherM subscriptionEnabledconfigSubscription最大規(guī)模的有效載荷的字節(jié)表明節(jié)點(diǎn)是否將持

32、續(xù)最大的項(xiàng)目數(shù)量將持續(xù)項(xiàng)目是否發(fā)送通知時(shí),該節(jié)點(diǎn)的配置發(fā)生了變化是否發(fā)送通知時(shí),該節(jié)點(diǎn)將被刪除是否發(fā)送通知時(shí),發(fā)布的項(xiàng)目將被刪除是否發(fā)送通知只有用戶才是否向去年項(xiàng)目,以新用戶Publisher 中使用的模式的節(jié)點(diǎn)是否允許訂閱是否新的訂戶必須設(shè)定為活躍模型所使用的節(jié)點(diǎn)類型的有效載荷數(shù)據(jù)將提供在節(jié)點(diǎn)的一個(gè)XSLT 轉(zhuǎn)換有效載荷的格式為一個(gè)郵件正文的一個(gè)XSLT 轉(zhuǎn)化的有效載荷格式的數(shù)據(jù)形式結(jié)果JID 的實(shí)體建立了節(jié)點(diǎn)說明節(jié)點(diǎn)默認(rèn)語言的節(jié)點(diǎn)acsMpayloadTypebodyXSLTVARCHAR100dataformXSLTVARCHAR100creator description langua

33、ge namereplyPolicyVARCHAR VARCHAR VARCHAR VARCHAR VARCHAR VARCHARNUMBER1024255255501515n/a名稱節(jié)點(diǎn)政策界定業(yè)主或商是否應(yīng)得到答復(fù)項(xiàng)目assotionPolicy政策規(guī)定誰可以聯(lián)系葉節(jié)點(diǎn)的集合maxLeafNodes一些葉節(jié)點(diǎn),一個(gè)節(jié)點(diǎn)可能會(huì)收集ofPubsubNodeJIDs ( JIDs 與節(jié)點(diǎn))列名類型長(zhǎng)度描述assotionTypeVARCHAR20類型的節(jié)點(diǎn)serviceID nodeIDjidVARCHAR VARCHARVARCHAR1001001024JID 實(shí)體(主鍵)的節(jié)點(diǎn)(主鍵)托管服

34、務(wù)節(jié)點(diǎn)(主鍵)serviceIDnodeIDVARCHARVARCHAR100100的節(jié)點(diǎn)(主鍵)托管服務(wù)節(jié)點(diǎn)(主鍵)ofPubsubNodeGroups (名冊(cè)與節(jié)點(diǎn))列名類型長(zhǎng)度內(nèi)容serviceID nodeIDrosterGroupVARCHAR VARCHARVARCHAR100100100托管服務(wù)節(jié)點(diǎn)的節(jié)點(diǎn)名冊(cè)組節(jié)點(diǎn)所有者可以簽署和檢索項(xiàng)目ofPubsubAffiliation (節(jié)點(diǎn)分支機(jī)構(gòu))列名類型長(zhǎng)度描述affiliationVARCHAR10所屬類別ofPubsubItem (項(xiàng)目發(fā)布到節(jié)點(diǎn))列名類型長(zhǎng)度描述jid creationDatepayloadVARCHAR VA

35、RCHARTEXT102415n/aJID商創(chuàng)建日期XML 的有效載荷包括在項(xiàng)目ofPubsubSubscription (訂閱節(jié)點(diǎn))列名類型長(zhǎng)度描述jid owner sedeliver digestdigest_frequencyexpireVARCHAR VARCHAR VARCHAR NUMBER NUMBER NUMBERVARCHAR1024102415n/a n/a n/a15地址接收通知JID 的子公司,擁有認(rèn)購 國(guó)家認(rèn)購(工作流程中的)是否通知或未啟用表明一個(gè)實(shí)體是否希望收到通知摘要 最低數(shù)目的毫秒之間發(fā)出任何兩個(gè)通知消化日期在租賃認(rèn)購將結(jié)束或已經(jīng)結(jié)束表明一個(gè)實(shí)體是否希望收到

36、郵件正文除了有效載荷格式includeBodyNUMBERn/ashowValues subscriptionTypesubscriptionDepthVARCHAR VARCHARNUMBER3010n/a存在這些國(guó)家的實(shí)體希望收到通知無論是用戶訂閱的項(xiàng)目或節(jié)點(diǎn)(收集節(jié)點(diǎn)只)收到通知的兒童一定深度(收集節(jié)點(diǎn)只)serviceIDnodeID idVARCHARVARCHAR VARCHAR100托管服務(wù)節(jié)點(diǎn)(主鍵)100的節(jié)點(diǎn)(主鍵)100認(rèn)購(主鍵)serviceIDVARCHAR100托管服務(wù)節(jié)點(diǎn)(主鍵)nodeIDVARCHAR100的節(jié)點(diǎn)(主鍵)idVARCHAR100的項(xiàng)目(獨(dú)特的

37、每個(gè)節(jié)點(diǎn))(主鍵)serviceIDnodeID jidVARCHARVARCHAR VARCHAR100托管服務(wù)節(jié)點(diǎn)(主鍵)100的節(jié)點(diǎn)(主鍵)1024JID 的子公司(主鍵)keywordVARCHAR200關(guān)鍵字活動(dòng)必須符合ofPubsubDefaultConf(默認(rèn)配置節(jié)點(diǎn))列名類型長(zhǎng)度描述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é)點(diǎn)是否將持續(xù)最大的項(xiàng)目數(shù)量將持續(xù)項(xiàng)目是否發(fā)送通知時(shí),該節(jié)點(diǎn)的配置發(fā)生了變化是否發(fā)送通知時(shí),該節(jié)點(diǎn)將被刪除是否發(fā)送通知時(shí),發(fā)布的項(xiàng)目將被刪除是否發(fā)送通知只有用戶才是否向去年項(xiàng)目,以新用戶Publishe

39、r 中使用的模式的節(jié)點(diǎn)是否允許訂閱acsM模型所使用的節(jié)點(diǎn)默認(rèn)語言的節(jié)點(diǎn)languagereplyPolicy政策界定業(yè)主或商是否應(yīng)得到答復(fù)項(xiàng)目assotionPolicy政策規(guī)定誰可以聯(lián)系葉節(jié)點(diǎn)的集合一些葉節(jié)點(diǎn),一個(gè)節(jié)點(diǎn)可能會(huì)收集maxLeafNodesWEB 服務(wù)器Openfire 采用內(nèi)置的 jetty 作 web 服務(wù)器,在啟動(dòng) AdminConsolePlugin 插件時(shí)調(diào)用 startup()方法啟動(dòng) jetty 服務(wù)器,9090 為其明文端口,9091 為其加密端口。頁面處理Openfire 沒有采用現(xiàn)在很流行的技術(shù)架構(gòu)(SSH),只使用 JSP+JavaBean,但是它有自己的

40、系統(tǒng)設(shè)計(jì),就連日志都是自己做的,沒有使用 熟悉的 log4j?,F(xiàn)有的 Openfire 管理控制臺(tái)可采用插件方式進(jìn)行擴(kuò)展(詳見插件開發(fā)說明部分介紹),頁面采用 Jsp 方式實(shí)現(xiàn),頁面直接調(diào)用業(yè)務(wù)處理邏輯類(通常命名為 XXManager)的實(shí)例方法,通常通過 request 對(duì)象封裝的方式傳遞頁面展現(xiàn)判定變量,常出現(xiàn)本頁跳轉(zhuǎn)。每個(gè)插件可定義自己的 Servlet 類和 web.xml 及serviceIDVARCHAR100托管服務(wù)節(jié)點(diǎn)(主鍵)leafNUMBERn/a是否配置屬于葉或收集節(jié)點(diǎn)(主鍵)web-custom.xml 配置文件。采用裝飾框架方式展現(xiàn)頁面,decorator 頁面有兩

41、個(gè),即 src/web/decorators目錄下的兩個(gè)頁面 main.jsp 和 setup.jsp。采用自定義的 admin實(shí)現(xiàn),標(biāo)類放置在 簽庫 admld 放置在 src/web/WEB-INF 目錄下, .jivesoftware.admin 包下,有 SidebarTag、SubnavTag、SubSidebarTag、TabsTag 四個(gè)類。在調(diào)用 lolugin()方法進(jìn)行插件加載時(shí),插件的plugin.xml 配置文件, 將獲取的相關(guān)信息封裝在 AdminConsole 類的 generatedM對(duì)象中,后期通過插件類提取該對(duì)象中的數(shù)據(jù)并配合sitemesh 裝飾器進(jìn)行頁面展

42、現(xiàn)。詳見“使用 dom4j 設(shè)計(jì) Openfire 式導(dǎo)航菜單”部分相關(guān)介紹。插件開發(fā)Openfire Plugins 加載流程插件開發(fā)說明所有插件都存放在 openfire 根下的 plugins 目錄下。當(dāng)一個(gè)插件被以 JAR或 WAR 文件發(fā)布時(shí),他自動(dòng)擴(kuò)展為一個(gè)文件夾。插件目錄結(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 文件)支持需要集成到管理控制臺(tái)中的各類資源(如果有的話)- 配置 jsp 調(diào)度的 web.xml 配置文件- 可選的用戶定義的 web.xml 文件,用于

44、調(diào)|- web-custom.xml度自定義 servlets|- images/若插件需要為 Openfire 的管理控制臺(tái)添加內(nèi)容,則 web 文件夾必須存在。具體內(nèi)容詳述如下。Plugin.xml 文件指定了主插件類,下面是一個(gè)例子。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 文件中進(jìn)行設(shè)置:name

45、插件名. description 插件描述. author 插件作者.ver 插件版本.date 插件版本生成日期。該日期必須為 MM/dd/yyyy 格式, 如07/01/2006.url 關(guān)于該插件的詳細(xì)信息可以從該地址獲取.minServerVer 為運(yùn)行該插件所需的最低的 Openfire版本(Openfire 2.1.2 及后續(xù)版本支持該選項(xiàng)).如果服務(wù)器版本低于需要的最低版本,插件將不會(huì)啟動(dòng).databaseKey 如果插件需要它自己的數(shù)據(jù)庫表,必須將 databaseKey元素設(shè)置為一個(gè) schema key name(通常與插件同名). 然后需將所有需支持?jǐn)?shù)據(jù)庫類型的數(shù)據(jù)庫 s

46、chema 文件放到插件的 database 文件夾下.例如,給一個(gè)關(guān)鍵字“foo”,那么 schema 文件需命名為foo_.sql,foo_oracle.sql等.建議你在命名你的表時(shí)加上前綴of(openfire),以避免與其他可能使用同一數(shù)據(jù)庫的其他應(yīng)用系統(tǒng)需要的表產(chǎn)生.關(guān)于版本的描述信息需添加到 ofVer表中,以對(duì)應(yīng)的 key做標(biāo)識(shí),這樣可以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)一個(gè)插件有一個(gè)父插件,將不會(huì)創(chuàng)建一個(gè)新的 class loader,相應(yīng)地替換為使用父插件的

48、 class loader。這使得插件間能更緊密地聯(lián)合工作。子插件不能脫離父插件獨(dú)立工作。licenseType 指定 類型信息。 有效值包括:o commerl: 插件被發(fā)布為商業(yè)性插件。gpl: 插件被發(fā)布為遵循 GNU Public License (GPL)協(xié)議。apache: 插件被發(fā)布為 Apache license 系列o ernal: 插件,且不能被重新發(fā)布。o other: 插件被發(fā)布為與其他目錄下的版本限制不同。License信息需在插件自述文件中進(jìn)行詳細(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)文件(也能為插件必須實(shí)現(xiàn) Plugin 接口,且有一個(gè)默認(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、是增強(qiáng)Openfire 功能。這份文件是一個(gè)開發(fā)創(chuàng)建插件指南。結(jié)構(gòu)的一個(gè)插件插件存放在插件openfireHome 目錄。當(dāng)部署一個(gè) jar 或 war 插件文件,它會(huì)自動(dòng)解壓安裝。該文件在插件目錄結(jié)構(gòu)如下:插件結(jié)構(gòu)myplugin /|-plugin.xml件定義文件插|-readme.html自述文件的插件,它會(huì)顯示給最終用戶|-changelog.html件的插件,它會(huì)顯示給最終用戶修改文|-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資源的管理控制臺(tái)集成,如果有的話| - WEB-INF/| -生成 web.xml 中含web.xml有編譯 JSP 的條目|-web-custom.xml自定義的 web.xml 中的自定義 servlets可選用戶|-images/放的目錄文件存web 目錄存在的插件,需要添加到Openfire 管理控制臺(tái)。進(jìn)一步的細(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è)架構(gòu)主要

54、名稱(通常是相同名稱的插件)。數(shù)據(jù)庫架構(gòu)文件為每個(gè)支持的數(shù)據(jù)庫,然后放置在數(shù)據(jù)庫目錄下的插件。例如, “foo”,架構(gòu)文件將被稱為“ foo_免可能的.sql ” , “ foo_oracle.sql ”等等,建議您,您的表前綴of ,以避與其他應(yīng)用程序安裝在同一數(shù)據(jù)庫。應(yīng)該進(jìn)入 ofVer表使用的關(guān)鍵,這樣的架構(gòu)版本信息可,例如:(name, ver) VALUES (foo, 0); databaseVer-數(shù)據(jù)INSERTO ofVer庫版本號(hào)(如果數(shù)據(jù)庫模式的定義)。新的插件與數(shù)據(jù)庫架構(gòu)應(yīng)該開始在版本。如果將來插件版本的需要更新,這些更新可以定義創(chuàng)建子目錄中的升級(jí)數(shù)據(jù)庫目錄為每個(gè)版本。

55、例如,目錄 database/upgrade/1 和 database/upgrade/2 將包含,如“ foo_.sql ”和“ foo_oracle.sql ”中包含相關(guān)的數(shù)據(jù)庫,為每一個(gè)版本的變化。每個(gè)應(yīng)該更新版本中的信息ofVer表,例如:UPDATE ofVerset ver=1 where name=foo;parentPlugin -父層插件(作為“foo”的“ foo.jar ”插件)。當(dāng)一個(gè)插件有一個(gè)父插件,插件的類加載器將被使用來而不是建立一個(gè)新的類加載器。這可讓插件更加緊密地協(xié)同工作。子插件將不會(huì)影響其父插件?!發(fā)icenseType”:顯示協(xié)議,該插件是由。有效值如下:

56、o “commerl”:commerl “商業(yè)” :插件是下發(fā)布的商業(yè)協(xié)議。o “gpl”: “通用公共證” :插件發(fā)布使用GNU 公共( GPL )。o “apache” :該插件發(fā)布的Apache證。o “ernal” :()插件是供的只,并不會(huì)重新分配。o “other” :(其他)插件是下發(fā)布agrement 不屬于其中的其他類別。許可協(xié)議的細(xì)節(jié)應(yīng)該在插件的自述。如果證類型未設(shè)置,這是假定其他。一些額外的文件都可以在該插件提供資料,以最終用戶(所有放置在主要的插件目錄):readme.html -可選自述文件的插件,它會(huì)顯示給最終用戶。changelog.html -可選修改文件的插件

57、,它會(huì)顯示給最終用戶。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 ,以及有一個(gè)缺省(無參數(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一般插件最佳實(shí)踐在選擇

59、包的名稱為您的插件,建議您選擇一些與眾不同的您和/或您的組織,以幫助避盡可能。例如,如果每個(gè)人去與.exle.PluginName ,即使 PluginName 是不同的,免您可能會(huì)開始投放到一些在這里和那里的類名。尤其是當(dāng)工作與聚類。修改管理控制臺(tái)插件可以添加,區(qū)段,和網(wǎng)頁的管理控制臺(tái)。有幾個(gè)步驟,以完成這項(xiàng):第一個(gè)必須添加到 plugin.xml 文件。JSP 的文件必須編制和實(shí)施的類路徑的插件。阿 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 文件看起來可能如下:,科和項(xiàng)目管理控制臺(tái)框架。抽樣樣本plugin.xml.exle.ExlePlugin在這個(gè)例子中,定義一個(gè)新的“范例” ,一個(gè)目“插件”和一個(gè)網(wǎng)頁“插件管理” 。已經(jīng)的,插件admin.jsp 頁面。您可以覆蓋現(xiàn)有的,區(qū)段,項(xiàng)目利用現(xiàn)有的ID 屬性值在自己的定義。管理控制臺(tái)最佳實(shí)踐有幾種最佳做法時(shí),需要考慮變更Openfire 管理控制臺(tái)通過一個(gè)插件。總的插件應(yīng)該:是無縫集成的集成到現(xiàn)有的重要的新功能。和側(cè)欄節(jié)只要有可能不是

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論