openfire

          研究

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            0 隨筆 :: 3 文章 :: 7 評論 :: 0 Trackbacks

           

          Openfire插件開發(fā)人員指南

          導言

          插件是增強Openfire功能。這份文件是一個開發(fā)人員創(chuàng)建插件指南。

          結構的一個插件

          插件存放在插件openfireHome目錄當部署一個jarwar插件文件,它會自動解壓安裝。該文件在插件目錄結構如下:

          插件結構

           

            myplugin / 
                           | - plugin.xml                             插件定義文件 
                           | - readme.html                           任擇自述文件的插件,它會顯示給最終用戶 
                           | - changelog.html                       任擇修改文件的插件,它會顯示給最終用戶 
                           | - icon_small.gif                        可選小( 16x16 )圖標與插件(也可以是 PNG文件) 
                           | - icon_large.gif                        可選大( 32x32 )圖標與插件(也可以是 PNG文件) 
                           | classes/                                    資源的插件需要(即屬性文件) 
                           | -database/                                可選數(shù)據(jù)庫架構文件,你需要插件 
                           | -i18n/                                      插件國際化的語言配置。 
                           | -lib/                                       您的插件的jar包 
                           | -web                                     資源的管理控制臺集成,如果有的話 
                                    | - WEB-INF/ 
                                    | - web.xml                       生成web.xml中含有編譯JSP的條目 
                                    | -web-custom.xml                       可選用戶自定義的web.xml中的自定義servlets 
                                    | -images/                          圖片文件存放的目錄

          web目錄存在的插件,需要添加到Openfire管理控制臺。進一步的細節(jié)如下。

          plugin.xml文件規(guī)定的主要插件類。樣本文件看起來可能如下:

          樣本plugin.xml

          <?xml version="1.0" encoding="UTF-8"?>
          <plugin>
              <!—要的插件類 -->
              <class>org.example.ExamplePlugin</class>
           
              <!-- 插件元數(shù)據(jù) -->
              <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>

          該元數(shù)據(jù)的領域,可以設置在plugin.xml文件:

          ·         name               -插件的名稱。

          ·         description          -插件的說明。

          ·         author              -插件的作者。

          ·         version             -該插件的版本。

          ·         date                -發(fā)布日期200671

          ·         url                  -插件網(wǎng)址。

          ·         minServerVersion    -最低Openfire版本

          ·         databaseKey        -如果插件需要它自己的數(shù)據(jù)表,該databaseKey內容應設立一個架構主要名稱(通常是相同名稱的插件)數(shù)據(jù)庫架構文件為每個支持的數(shù)據(jù)庫,然后放置在數(shù)據(jù)庫目錄下的插件。例如,foo”,架構文件將被稱為“ foo_mysql.sql ” “ foo_oracle.sql ”等等,我們建議您,您的表前綴of ,以避免可能的沖突與其他應用程序安裝在同一數(shù)據(jù)庫。腳本應該進入ofVersion表使用的關鍵,這樣的架構版本信息可跟蹤,例如:

          INSERT INTO ofVersion (name, version) VALUES ('foo', 0); databaseVersion -數(shù)據(jù)庫版本號(如果數(shù)據(jù)庫模式的定義)新的插件與數(shù)據(jù)庫架構應該開始在版本。如果將來插件版本的需要更新,這些更新可以定義創(chuàng)建子目錄中的升級數(shù)據(jù)庫目錄為每個版本。例如,目錄database/upgrade/1database/upgrade/2將包含腳本,如“ foo_mysql.sql ”“ foo_oracle.sql ”中包含相關的數(shù)據(jù)庫,為每一個版本的變化。每個腳本應該更新版本中的信息ofVersion表,例如:

          UPDATE ofVersion set version=1 where name='foo';

          ·         parentPlugin -父層插件(作為“foo”“ foo.jar ”插件)。當一個插件有一個父插件,插件的類加載器將被使用來而不是建立一個新的類加載器。這可讓插件更加緊密地協(xié)同工作。插件將不會影響其父插件。

          ·         “licenseType”:顯示許可協(xié)議,該插件是由。有效值如下:

          o    “commercial”commercial商業(yè):插件是下發(fā)布的商業(yè)許可協(xié)議。

          o    “gpl”通用公共許可證:插件發(fā)布使用GNU公共授權( GPL

          o    apache:該插件發(fā)布的Apache許可證。

          o    internal:(內部)插件是供內部使用的一個組織只,并不會重新分配。

          o    other:(其他)插件是許可下發(fā)布agrement不屬于其中的其他類別。許可協(xié)議的細節(jié)應該在插件的自述。

          如果許可證類型未設置,這是假定其他。

          一些額外的文件都可以在該插件提供更多資料,以最終用戶(所有放置在主要的插件目錄)

          ·         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.您的插件類必須執(zhí)行插件接口從OpenfireAPI ,以及有一個缺省(無參數(shù)) contructor 插件接口方法初始化和銷毀插件。

          采樣插件執(zhí)行

          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是不同的,您可能會開始投放到一些沖突在這里和那里的類名。尤其是當工作與聚類。

          修改管理控制臺

          插件可以添加標簽,區(qū)段,和網(wǎng)頁的管理控制臺。有幾個步驟,以完成這項:

          ·         第一個<adminconsole/>必須添加到plugin.xml文件。

          ·         JSP的文件必須編制和實施的類路徑的插件。web.xml的匯編文件,其中包含的JSP servlet的條目必須付諸網(wǎng)頁/目錄下的插件。注: Openfire建立腳本可以協(xié)助編制JSPs和創(chuàng)造web.xml中。這是詳細說明如下。

          ·         任何圖像所需的JSP頁面必須住在網(wǎng)頁/圖像/目錄。只有GIFPNG圖像的支持。

          <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>

          在這個例子中,我們定義一個新的標簽范例,一個工具欄目我的插件和一個網(wǎng)頁我的插件管理我們已經(jīng)注冊的,插件admin.jsp頁面。您可以覆蓋現(xiàn)有的標簽,區(qū)段,項目利用現(xiàn)有的ID屬性值在自己的<adminconsole>定義。

          管理控制臺最佳實踐

          有幾種最佳做法時,需要考慮變更Openfire管理控制臺通過一個插件。總的主題是無縫集成的插件應該:

          ·         集成到現(xiàn)有的標簽和側欄節(jié)只要有可能不是創(chuàng)建自己的。只有創(chuàng)造新標簽的非常重要的新功能。

          ·         不要用插件的名稱,標簽, sidebars和項目。例如,有一個項目叫做網(wǎng)關插件,也可能是所謂的網(wǎng)關設置

          ·         嘗試以符合現(xiàn)有的用戶界面管理控制臺在您的自定義插件的網(wǎng)頁。

          ·         沒有必要建立一個管理控制臺進入查看插件元數(shù)據(jù)。相反,讓Openfire告知用戶有關該插件安裝,并提供插件管理。

          寫作網(wǎng)頁管理控制臺

          Openfire使用Sitemesh框架裝飾網(wǎng)頁的管理控制臺。全球定義的裝修適用于每個網(wǎng)頁,以便使最終產(chǎn)出,如下面的圖:

          建立網(wǎng)頁,與Sitemesh是容易的。只要創(chuàng)建有效的HTML頁面,然后使用中繼標記來傳送指示Sitemesh 當渲染輸出, Sitemesh將使用您所提供的指示,使裝修的任何內容,在您的HTML網(wǎng)頁。以下元標記可用于:

          ·       pageID -ID的網(wǎng)頁,其中必須符合入境管理控制臺中的XML上文所述。要么pageIDsubPageID 必須指定。

          ·       subPageID -ID小組網(wǎng)頁,其中必須符合入境管理控制臺中的XML上文所述。小組網(wǎng)頁用于行政行為涉及到父頁面編號。例如,編輯或刪除某一特定群體。要么pageIDsubPageID 必須指定。

          ·       extraParams (可選) -額外的參數(shù),應通過網(wǎng)頁。例如,在網(wǎng)頁上刪除一組可能的ID集團。參數(shù)必須是URL編碼。

          ·       裝修(可選) -覆寫Sitemesh裝修使用的網(wǎng)頁。裝修沒有命名,將可提供簡單的網(wǎng)頁沒有裝修。

          下面的HTML代碼段顯示了有效的網(wǎng)頁:

          范例

          <html>
             <head>
                 <title>My Plugin Page</title>
           
                 <meta name="pageID" content="myPluginPage"/>
             </head>
             <body>
                  Body here!
             </body>
             </html>

          在您使用本土化插件

          這有可能把你的插件成多種語言化( i18n 為此,請使用下列程序進行:

          ·   創(chuàng)建一個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建立腳本將幫助您建立和發(fā)展插件。它看起來的插件開發(fā)目錄格式如下:

          插件結構

          myplugin/
           |- plugin.xml      <-插件定義文件
           |- readme.html     <-插件自述文件
           |- changelog.html <-插件修改的日志
           |- icon_small.gif <- 縮略圖片(16x16) 
          |- icon_large.gif <-圖片 (32x32) 
           |- classes/         <-資源的插件需要(即屬性文件)
           |- lib/              <- 
           |- src/
               |- database      <-可選的數(shù)據(jù)庫腳本的插件
               |- java           <- 插件的Java源代碼
               |   |- com
               |       |- mycompany
               |           |- *.java
               |- web
                   |- *.jsp          <- jsp頁面
                   |- images/       <- 圖片文件
                   |- WEB-INF
                       |- web.xml    <-可選的文件自定義servlets可以注冊

          構建腳本將編譯源文件和JSPs ,并建立有效的插件結構和JAR文件。把你的插件目錄中 src /插件目錄下的源分布,然后用antplugins來建立您的插件。

          任何JAR文件的插件需要在匯編應放到lib目錄。這些JAR文件也將被復制到插件的生成lib目錄的構建過程的一部份。

          如果您創(chuàng)建一個src/web/WEB-INF/web.xml,注冊servlets初始化時啟動插件。只有注冊的servletservlet的映在web.xml中的文件。注:此功能是通過合并執(zhí)行您的自定義web.xml中的檔案文件的web.xml中所產(chǎn)生的JSP的匯編過程。

          執(zhí)行您的插件

          插件完全進入OpenfireAPI 這提供了一個巨大的靈活性,什么插件可以完成。然而,有幾個集成點,這是最常見的:

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

           

          1. 注冊一個插件作為PacketInterceptor接收所有數(shù)據(jù)包被通過該系統(tǒng),并有選擇地予以拒絕。例如,一個攔截可以拒絕所有的郵件或載褻瀆國旗他們審查的管理員。
          2. 您可以儲存持續(xù)插件設置Openfire屬性使用JiveGlobals.getProperty (字符串)和JiveGlobals.setProperty (字符串,字符串)的方法。讓您的插件屬性聽眾收聽改變其性質,執(zhí)行org.jivesoftware.util.PropertyEventListener方法。您可以注冊您的插件作為一個聽者使用PropertyEventDispatcher.addListener PropertyEventListener )方法。一定要注冊您的插件作為聽眾在您的插件的destroyPlugin )方法。

          插件常見問題解答

          我是否可以部署一個插件目錄不是一jar

          不,所有的插件必須部署Jar文件或WAR文件。當插件的一個jarwar不存在, Openfire假設該文件已被刪除,而用戶要銷毀插件,所以它也刪除了目錄。

          什么是插件許可協(xié)議受?

          由于Openfire是下發(fā)布的開源GPL許可,任何插件發(fā)達國家也必須在GPL許可下發(fā)布或兼容的開源許可證如果您分發(fā)插件以外的組織。這是違反了許可協(xié)議,以創(chuàng)建插件分配不開源。請訪問jive software如果您需要不同的授權條款Openfire的權利,包括建立商業(yè)插件。

          posted on 2009-02-11 09:49 jyleon 閱讀(11771) 評論(0)  編輯  收藏 所屬分類: openfire插件
          主站蜘蛛池模板: 新源县| 新平| 那曲县| 屏南县| 长武县| 长沙市| 澎湖县| 伊春市| 金乡县| 防城港市| 武强县| 贵溪市| 饶河县| 偃师市| 枞阳县| 霍林郭勒市| 准格尔旗| 资溪县| 安新县| 吉隆县| 烟台市| 黔南| 曲麻莱县| 井研县| 大石桥市| 沙田区| 小金县| 梅河口市| 墨竹工卡县| 手机| 清丰县| 麻栗坡县| 万荣县| 吉水县| 茂名市| 石屏县| 井研县| 遂平县| 申扎县| 开平市| 安福县|