openfire開發文檔(轉)

轉自:http://www.blogjava.net/jyleon/articles/254197.html

Openfire插件開發人員指南

導言

插件是增強 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 這提供了一個巨大的靈活性,什麼插件可以完成。 然而,有幾個集成點,這是最常見的:

  1. 註冊一個插件作爲一個 組成部分 。元件接收所有數據包給某一特定子網域。 例如, test_component.example.com 因此,數據包發送到 joe@test_component.example.com 將交付給該組件。 請注意,子域定義爲組件無關的 DNS 條目的子域。 所有的 XMPP 協議路由在套接字級別是使用主服務器域( example.com 在上面的例子) ; 子域僅用於路由的 XMPP 協議的服務器。
  2. 註冊一個插件作爲 IQHandler 智商處理迴應智商包特別元素的名稱和命名空間。 下面的代碼片斷演示瞭如何註冊一個 IQHandler
   IQHandler myHandler = new MyIQHander();
 IQRouter iqRouter = XMPPServer.getInstance().getIQRouter();
 iqRouter.addHandler(myHandler);

 

  1. 註冊一個插件作爲 PacketInterceptor 接收所有數據包被通過該系統,並有選擇地予以拒絕。 例如,一個攔截可以拒絕所有的郵件或載褻瀆國旗他們審查的管理員。
  2. 您可以儲存持續插件設置 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 的權利,包括建立商業插件。

發佈了4 篇原創文章 · 獲贊 1 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章