导言 插件是增强Openfire功能。这份文件是一个开发人员创建插件指南。 结构的一个插件 插件存放在插件openfireHome目录。当部署一个jar或war插件文件,它会自动解压安装。该文件在插件目录结构如下: 插件结构
myplugin / 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./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表使用的关键,这样的架构版本信息可跟踪,例如: · 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./jstl/core_rt" prefix="c" %> <%@ taglib uri="http://java./jstl/fmt_rt" prefix="fmt" %> ... <fmt:message key="some.key.name" /> · 国际化在你的Java文件使用LocaleUtils class: · 国际化plugin.xml文件在您使用$ (叶)格式: 使用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初始化时启动插件。只有注册的servlet和servlet的映在web.xml中的文件。注:此功能是通过合并执行您的自定义web.xml中的档案文件的web.xml中所产生的JSP的汇编过程。 执行您的插件 插件完全进入Openfire的API 。这提供了一个巨大的灵活性,什么插件可以完成。然而,有几个集成点,这是最常见的:
IQHandler myHandler = new MyIQHander(); IQRouter iqRouter = XMPPServer.getInstance().getIQRouter(); iqRouter.addHandler(myHandler);
插件常见问题解答 我是否可以部署一个插件目录不是一jar? 不,所有的插件必须部署Jar文件或WAR文件。当插件的一个jar或war不存在, Openfire假设该文件已被删除,而用户要销毁插件,所以它也删除了目录。 什么是插件许可协议受? 由于Openfire是下发布的开源GPL许可,任何插件发达国家也必须在GPL许可下发布或兼容的开源许可证如果您分发插件以外的组织。这是违反了许可协议,以创建插件分配不开源。请访问jive software如果您需要不同的授权条款Openfire的权利,包括建立商业插件。 |
|