`
iluoxuan
  • 浏览: 570920 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

2:openfire插件开发--文档

 
阅读更多

1:按上面部署成功 会看到 有很多插件实现的。

 

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 -可选小( 16x16 )图标相关插件。也可以是。 GIF文件。

·         icon_large.png -可选大( 32x32 )图标相关插件。也可以是。 GIF文件。

interface from the Openfire API as well as have a default (no argument) contructor.您的插件类必须执行插件接口从OpenfireAPI ,以及有一个缺省(无参数) 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的权利,包括建立商业插件。

 

分享到:
评论

相关推荐

    openfire开发文档

    让人快速上手openfire插件的开发,让你节省更多时间了解源码。

    编写Openfire开发插件、部署源码

    这是一个文档,内容是如何编写Openfire开发插件、部署源码

    XMPP协议及其服务器端的Openfire插件开发.doc

    XMPP协议及其服务器端的Openfire插件开发XMPP背景知识XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。绊过扩展以后的XMPP可以通过发送扩展的信息来处理用户的...

    IM服务端开发文档

    基本信息 1 ...附:《Openfire插件开发》 23 开发插件的目的 23 插件的目录结构 23 plugin.xml配置文件的结构 24 管理控制台添加页面 25 实现自己的插件plugin类 25 打包成jar或者war文件 26 其他参考信息 28

    openfire二次开发

    openfire二次开发文档 从安装到部署,数据库表、字段、openfire常用的类,配置文件等信息 插件开发等等

    Openfire服务器端搭建以及聊天记录插件

    自己整合的里面有服务器端的搭建教程和开发文档,源码和SQL也有

    openfire安装配置部署提供Windows系统和linux系统安装配置以及管理员控制台API接入

    2. linux安装配置下载安装文件,SQL文件导入,检测以及开发端口配置和页面设置。 3. 管理控制台 设置API接口插件集群配置 4.openfire源代码构建,搭建Eclipse工程启动配置。 5.userService 接口详细介绍 6.Spark 源...

    java开源包2

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包1

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包10

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包11

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包3

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包6

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包5

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包4

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包8

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包7

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包9

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包101

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    Java资源包01

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

Global site tag (gtag.js) - Google Analytics