導言
外掛程式是增強 Openfire 功能。 這份檔案是一個開發人員建立外掛程式指南。
結構的一個外掛程式
外掛程式存放在 外掛程式 openfireHome 目錄 。 當部署一個 jar 或 war 外掛程式檔案,它會自動解壓安裝。 該檔案在外掛程式目錄結構如下:
外掛程式結構
myplugin /
| - plugin.xml 外掛程式定義檔案
| - readme.html 任擇讀我檔案的外掛程式,它會顯示給終端使用者
| - changelog.html 任擇修改檔案的外掛程式,它會顯示給終端使用者
| - icon_small.gif 可選小( 16x16 )表徵圖與外掛程式(也可以是 PNG檔案)
| - icon_large.gif 可選大( 32x32 )表徵圖與外掛程式(也可以是 PNG檔案)
| classes/ 資源的外掛程式需要(即屬性檔案)
| -database/ 可選資料庫結構描述檔案,你需要外掛程式
| -i18n/ 外掛程式國際化的語言配置。
| -lib/ 您的外掛程式的jar包
| -web 資源的管理主控台整合,如果有的話
| - WEB-INF/
| - web.xml 產生web.xml中含有編譯JSP的條目
| -web-custom.xml 可選使用者自訂的web.xml中的自訂servlets
| -images/ 圖片檔案存放的目錄
web 目錄存在的外掛程式,需要添加到 Openfire 管理主控台。 進一步的細節如下。
在 plugin.xml 檔案規定的主要外掛程式類。 樣本檔案看起來可能如下:
樣本 plugin.xml
<?xml version="1.0" encoding="UTF-8"?><plugin> <!—需要的外掛程式類
-->
<class>org.example.ExamplePlugin</class> <!-- 外掛程式中繼資料 -->
<name>Example Plugin</name> <description>This is an example plugin.</description> <author>Jive Software</author> <version>1.0</version> <date>07/01/2006</date> <url>http://www.igniterealtime.org/projects/openfire/plugins.jsp</url> <minServerVersion>3.0.0</minServerVersion> <licenseType>gpl</licenseType> <!-- 管理主控台的條目 -->
<adminconsole> <!-- More on this below --> </adminconsole></plugin>該中繼資料的領域,可以設定在 plugin.xml 檔案:
· name - 外掛程式的名稱。
· description - 外掛程式的說明。
· author - 外掛程式的作者。
· version - 該外掛程式的版本。
· date - 發布日期 如 2006 年 7 月 1 日 。
· url - 外掛程式網址。
· minServerVersion - 最低 Openfire 版本
· databaseKey - 如果外掛程式需要它自己的資料表,該 databaseKey 內容應設立一個架構主要名稱(通常是相同名稱的外掛程式) 。 資料庫結構描述檔案為每個支援的資料庫,然後放置在 資料庫 目錄下的外掛程式。 例如, “ foo” ,架構檔案將被稱為 “ foo_mysql.sql ” , “ foo_oracle.sql ” 等等,我們建議您,您的表首碼 of ,以避免可能的衝突與其他應用程式安裝在同一資料庫。 指令碼應該進入 ofVersion 表使用的關鍵,這樣的架構版本資訊可跟蹤,例如:
INSERT INTO ofVersion (name, version) VALUES ('foo', 0); databaseVersion - 資料庫版本號碼(如果資料庫模式的定義) 。 新的外掛程式與資料庫結構描述應該開始在版本。 如果將來外掛程式版本的需要更新,這些更新可以定義建立子目錄中的 升級資料庫 目錄為每個版本。 例如,目錄 database/upgrade/1 和 database/upgrade/2 將包含指令碼,如 “ foo_mysql.sql ” 和 “ foo_oracle.sql ” 中包含相關的資料庫,為每一個版本的變化。 每個指令碼應該更新版本中的資訊 ofVersion 表,例如:
UPDATE ofVersion set version=1 where name='foo';
· parentPlugin - 父層外掛程式(作為 “foo” 的 “ foo.jar ” 外掛程式) 。當一個外掛程式有一個父外掛程式,外掛程式的類載入器將被使用來而不是建立一個新的類載入器。 這可讓外掛程式更加緊密地協同工作。 子 外掛程式將不會影響其父外掛程式。
· “licenseType” :顯示許可協議,該外掛程式是由。 有效值如下:
o “commercial” : commercial “ 商業 ” :外掛程式是下發布的商業許可協議。
o “gpl” : “ 通用公用許可證 ” :外掛程式發布使用 GNU 公用授權( GPL ) 。
o “ apache ” :該外掛程式發布的 Apache 許可證。
o “ internal ” :(內部)外掛程式是供內部使用的一個組織只,並不會重新分配。
o “ other ” :(其他)外掛程式是許可下發布 agrement 不屬於其中的其他類別。 許可協議的細節應該在外掛程式的自述。
如果許可證類型未設定,這是假定其他。
一些額外的檔案都可以在該外掛程式提供更多資料,以終端使用者(所有放置在主要的外掛程式目錄) :
· readme.html - 可選讀我檔案的外掛程式,它會顯示給終端使用者。
· changelog.html - 可選修改檔案的外掛程式,它會顯示給終端使用者。
· icon_small.png - 可選小( 16x16 )表徵圖相關外掛程式。 也可以是。 GIF 檔案。
· icon_large.png - 可選大( 32x32 )表徵圖相關外掛程式。 也可以是。 GIF 檔案。
interface from the Openfire API as well as have a default (no argument) contructor.您的外掛程式類必須執行 外掛程式 介面從 Openfire的 API ,以及有一個預設(無參數) contructor 。 外掛程式介面方法初始化和銷毀外掛程式。
採樣外掛程式執行
package org.example; import org.jivesoftware.openfire.container.Plugin;import org.jivesoftware.openfire.container.PluginManager; import java.io.File; /** * A sample plugin for Openfire. */public class ExamplePlugin implements Plugin { public void initializePlugin(PluginManager manager, File pluginDirectory) { //您的代碼
} public void destroyPlugin() { //您的代碼
}}General Plugin Best Practices 一般外掛程式最佳實務
在選擇軟體包的名稱為您的外掛程式,我們建議您選擇一些與眾不同的您和 / 或您的組織,以協助避免衝突儘可能。 例如,如果每個人去與 org.example.PluginName ,即使 PluginName 是不同的,您可能會開始投放到一些衝突在這裡和那裡的類名。 尤其是當工作與聚類。
。
修改管理主控台
外掛程式可以添加標籤,區段,和網頁的管理主控台。 有幾個步驟,以完成這項:
· 第一個 <adminconsole/> 必須添加到 plugin.xml 檔案。
· JSP 的檔案必須編製和實施的類路徑的外掛程式。 阿 web.xml 中 的彙編檔案,其中包含的 JSP servlet 的條目必須付諸 網頁 / 目錄下的外掛程式。 註: Openfire 建立指令碼可以協助編製 JSPs 和創造 web.xml 中。 這是詳細說明如下。
· 任何映像所需的 JSP 頁面必須住在 網頁 / 映像 / 目錄。 只有 GIF 和 PNG 映像的支援。
該 <adminconsole /> 部分 plugin.xml 定義額外的標籤,科和專案管理控制台架構。 抽樣 plugin.xml 檔案看起來可能如下:
樣本 plugin.xml
<?xml version="1.0" encoding="UTF-8"?>
<plugin>
<!-- 主要外掛程式類 -->
<class>org.example.ExamplePlugin</class>
<!-- 管理主控台的條目 -->
<adminconsole>
<tab id="mytab" name="Example" url="my-plugin-admin.jsp" description="Click to manage...">
<sidebar id="mysidebar" name="My Plugin">
<item id="my-plugin" name="My Plugin Admin"
url="my-plugin-admin.jsp"
description="Click to administer settings for my plugin" />
</sidebar>
</tab>
</adminconsole>
</plugin>
在這個例子中,我們定義一個新的標籤 “ 範例 ” ,一個工具列目 “ 我的外掛程式 ” 和一個網頁 “ 我的外掛程式管理 ” 。 我們已經註冊 的,外掛程式 admin.jsp 頁面。 您可以覆蓋現有的標籤,區段,項目利用現有的 ID 屬性值在自己的 <adminconsole> 定義。
管理主控台最佳實務
有幾種最佳做法時,需要考慮變更 Openfire 管理主控台通過一個外掛程式。 總的主題是無縫整合的外掛程式應該:
· 整合到現有的標籤和側欄節只要有可能不是建立自己的。 只有創造新標籤的非常重要的新功能。
· 不要用 “ 外掛程式 ” 的名稱,標籤, sidebars 和項目。例如,有一個項目叫做 “ 網關外掛程式 ” ,也可能是所謂的 “ 網關設定 ” 。
· 嘗試以符合現有的使用者介面管理主控台在您的自訂外掛程式的網頁。
· 沒有必要建立一個管理主控台進入查看外掛程式中繼資料。 相反,讓 Openfire 告知使用者有關該外掛程式安裝,並提供外掛程式管理。
寫作網頁管理主控台
Openfire 使用 Sitemesh 架構裝飾網頁的管理主控台。 全球定義的裝修適用於每個網頁,以便使最終產出,如下面的圖:
建立網頁,與 Sitemesh 是容易的。 只要建立有效 HTML 頁面,然後使用中繼標記來傳送指示 Sitemesh 。 當渲染輸出, Sitemesh 將使用您所提供的指示,使裝修的任何內容,在您的 HTML 網頁。 以下元標記可用於:
· pageID - 的 ID 的網頁,其中必須符合入境管理主控台中的 XML 上文所述。 要麼 pageID 或 subPageID 必須 指定。
· subPageID - 的 ID 小組網頁,其中必須符合入境管理主控台中的 XML 上文所述。 小組網頁用於行政行為涉及到父頁面編號。 例如,編輯或刪除某一特定群體。要麼 pageID 或 subPageID 必須 指定。
· extraParams (可選) - 額外的參數,應通過網頁。例如,在網頁上刪除一組可能的 ID 集團。 參數必須是 URL 編碼。
· 裝修 (可選) - 覆寫 Sitemesh 裝修使用的網頁。裝修 沒有 命名,將可提供簡單的網頁沒有裝修。
下面的 HTML 程式碼段顯示了有效網頁:
範例
<html> <head> <title>My Plugin Page</title> <meta name="pageID" content="myPluginPage"/> </head> <body> Body here! </body> </html>在您使用本土化外掛程式
這有可能把你的外掛程式成多種語言化( i18n ) 。 為此,請使用下列程式進行:
· 建立一個 “ i18n ” 目錄的根目錄中的外掛程式。
· 購買每項資源檔,並使用 %[plugin_name]%_i18n "_" language ".properties" 。屬性 ” 命名規範,在那裡 [ plugin_name ] 的名字是外掛程式目錄中。 見 翻譯指南 ,詳細瞭解資源套件。
· 字串轉換在您的 JSP 的檔案指的是國際鑰匙。 例如:
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/fmt_rt" prefix="fmt" %>
...
<fmt:message key="some.key.name" />
· 國際化在你的 Java 檔案使用 LocaleUtils class :
org.jivesoftware.util.LocaleUtils.getLocalizedString("some.key.name", "[plugin_name]");
· 國際化 plugin.xml 檔案在您使用 $ (葉)格式:
<sidebar id="gateways" name="${plugin.sidebar.name}" description="${plugin.sidebar.description}">
<description>${plugin.description}</description>
使用 Openfire 構建指令碼
在 Openfire 建立指令碼將協助您建立和發展外掛程式。 它看起來的外掛程式開發目錄格式如下:
外掛程式結構
myplugin/ |- plugin.xml <-外掛程式定義檔案
|- readme.html <-外掛程式讀我檔案
|- changelog.html <-外掛程式修改的日誌
|- icon_small.gif <- 縮圖片
(16x16) |- icon_large.gif <-圖片
(32x32) |- classes/ <-資源的外掛程式需要(即屬性檔案)
|- lib/ <- 包
|- src/ |- database <-可選的資料庫指令碼的外掛程式
|- java <- 外掛程式的
Java原始碼
| |- com | |- mycompany | |- *.java |- web |- *.jsp <- jsp頁面
|- images/ <- 圖片檔案
|- WEB-INF |- web.xml <-可選的檔案自訂
servlets可以註冊
構建指令碼將編譯源檔案和 JSPs ,並建立有效外掛程式結構和 JAR 檔案。 把你的外掛程式目錄中 的 src / 外掛程式 目錄下的源分布,然後用 ant plugins 來建立您的外掛程式。
任何 JAR 檔案的外掛程式需要在彙編應放到 lib 目錄。 這些 JAR 檔案也將被複製到外掛程式的產生 lib 目錄的構建過程的一部份。
如果您建立一個 src/web/WEB-INF/web.xml ,註冊 servlets 初始化時啟動外掛程式。 只有註冊的 servlet 和 servlet 的映在 web.xml 中的檔案。 註:此功能是通過合并執行您的自訂 web.xml 中的檔案檔案的 web.xml 中所產生的 JSP 的彙編過程。
執行您的外掛程式
外掛程式完全進入 Openfire 的 API 。 這提供了一個巨大的靈活性,什麼外掛程式可以完成。 然而,有幾個整合點,這是最常見的:
註冊一個外掛程式作為一個 組成部分 。元件接收所有資料包給某一特定子網域。 例如, test_component.example.com 。 因此,資料包發送到 joe@test_component.example.com 將交付給該組件。 請注意,子域定義為組件無關的 DNS 條目的子域。 所有的 XMPP 協議路由在通訊端層級是使用主伺服器域( example.com 在上面的例子) ; 子域僅用於路由的 XMPP 協議的伺服器。
註冊一個外掛程式作為 IQHandler 。 智商處理回應智商包特別元素的名稱和命名空間。 下面的代碼片斷示範了如何註冊一個 IQHandler :
IQHandler myHandler = new MyIQHander(); IQRouter iqRouter = XMPPServer.getInstance().getIQRouter(); iqRouter.addHandler(myHandler);
註冊一個外掛程式作為 PacketInterceptor 接收所有資料包被通過該系統,並有選擇地予以拒絕。 例如,一個攔截可以拒絕所有的郵件或載褻瀆國旗他們審查的管理員。
您可以儲存持續外掛程式設定 Openfire 屬性使用 JiveGlobals.getProperty (字串)和 JiveGlobals.setProperty (字串,字串)的方法。 讓您的外掛程式屬性聽眾收聽改變其性質,執行 org.jivesoftware.util.PropertyEventListener 方法。您可以註冊您的外掛程式作為一個聽者使用 PropertyEventDispatcher.addListener ( PropertyEventListener )方法。 一定要註冊您的外掛程式作為聽眾在您的外掛程式的 destroyPlugin ( )方法。
外掛程式常見問題集
我是否可以部署一個外掛程式目錄不是一 jar ?
不,所有的外掛程式必須部署 Jar 檔案或 WAR 檔案。 當外掛程式的一個 jar 或 war 不存在, Openfire 假設該檔案已被刪除,而使用者要銷毀外掛程式,所以它也刪除了目錄。
什麼是外掛程式許可協議受?
由於 Openfire 是下發布的開源 GPL 許可,任何外掛程式發達國家也必須在 GPL 許可下發布或相容的開源許可證如果您分發外掛程式以外的組織。 這是違反了許可協議,以建立外掛程式分配不開源。 請訪問 jive software 如果您需要不同的授權條款 Openfire 的權利,包括建立商業外掛程式。
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/heyi1214/archive/2009/05/26/4218201.aspx