<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    openfire

    研究

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

     

    Openfire插件開發人員指南

    導言

    插件是增強Openfire功能。這份文件是一個開發人員創建插件指南。

    結構的一個插件

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

    插件結構

     

      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                -發布日期200671。

    ·         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/1database/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 -可選?。?/span> 16x16 )圖標相關插件。也可以是。 GIF文件。

    ·         icon_large.png -可選大( 32x32 )圖標相關插件。也可以是。 GIF文件。

    interface from the Openfire API as well as have a default (no argument) contructor.您的插件類必須執行插件接口從OpenfireAPI ,以及有一個缺?。o參數) 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頁面必須住在網頁/圖像/目錄。只有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>

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

    管理控制臺最佳實踐

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

    ·         集成到現有的標簽和側欄節只要有可能不是創建自己的。只有創造新標簽的非常重要的新功能。

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

    ·         嘗試以符合現有的用戶界面管理控制臺在您的自定義插件的網頁。

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

    寫作網頁管理控制臺

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

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

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

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

    ·       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 /插件目錄下的源分布,然后用antplugins來建立您的插件。

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

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

    執行您的插件

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

    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文件。當插件的一個jarwar不存在, Openfire假設該文件已被刪除,而用戶要銷毀插件,所以它也刪除了目錄。

    什么是插件許可協議受?

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

    posted on 2009-02-11 09:49 jyleon 閱讀(11768) 評論(0)  編輯  收藏 所屬分類: openfire插件
    主站蜘蛛池模板: 最近高清中文字幕无吗免费看| 67194在线午夜亚洲| 自拍偷自拍亚洲精品第1页| 亚洲JIZZJIZZ中国少妇中文| 全部免费国产潢色一级| 无码国模国产在线观看免费| 特级淫片国产免费高清视频| 久久ww精品w免费人成| 99在线热视频只有精品免费| **aaaaa毛片免费| 日日麻批免费40分钟日本的| 2021免费日韩视频网| 久久久久国色AV免费观看性色| 无人在线观看免费高清视频| 亚洲不卡AV影片在线播放| 在线观看无码AV网站永久免费| 免费福利网站在线观看| 久久精品亚洲一区二区| AAA日本高清在线播放免费观看| 亚洲成av人片天堂网无码】| 蜜桃传媒一区二区亚洲AV| 色窝窝亚洲av网| 日韩在线观看免费完整版视频| 中文字幕成人免费高清在线视频 | 亚洲夜夜欢A∨一区二区三区| 亚洲视频网站在线观看| 色偷偷亚洲男人天堂| 久久aa毛片免费播放嗯啊| 日本成人免费在线| 久久精品亚洲日本佐佐木明希| 亚洲精品欧美综合四区| 国产无遮挡无码视频免费软件| 午夜视频免费成人| 亚洲第一视频网站| 精品一区二区三区免费毛片| 18以下岁毛片在免费播放| 亚洲高清成人一区二区三区| 亚洲国产成人精品无码一区二区| 一级毛片a免费播放王色| 野花高清在线观看免费3中文| 亚洲韩国精品无码一区二区三区|