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 的权利,包括建立商业插件。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值