Openfire插件原理

Openfire插件原理


   
   比较正式的文档说明见: http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/plugin-dev-guide.html

     在Openfire和Jabberd2里都有插件这个概念,两者的意义不是完全相同的,在jabberd2里面,插件就是你可以在服务注册的时候加入插件,并且这个插件不可以配置,比如对数据流的处理,你想在用户发送数据时,在服务器处理之前,加入你的过滤,你就可以添加一个插件,这时的插件可以有四个方法,你可以选择性的实现。而Openfire里面的插件,是一种配置的,更加独立的功能。
     总体来说,插件是一种遵循一定规范的应用程序接口编写出来的程序,可以是一个类,也可以一个方法,甚至是一个组件。在Openfire项目中,采用了插件的机制,它促使你可以在不改变核心代码的基础上,增加多种你需要的功能;同时,它可以减少你部署和测试的工作量,对于后期的程序维护也有很大的好处。当你需要对某一个插件进行升级时,只要动态的unload这个插件,然后patch,上传到服务器中即可。你甚至可以不需要停止服务就可以完成对插件的升级。这是在Jabberd2里面所不具备的。

     我根据本人对文档的理解,简单的翻译一下:
     所有的插件都位于Openfire主目录下的plugins子目录下面,当以JAR或者WAR文件格式打包一个插件时,会自动的扩展一个目录,这个目录中包含下列文件:

Plugin Structure

myplugin/
 |- plugin.xml <- Plugin definition file
 |- readme.html <- Optional readme file for plugin, which will be displayed to end users 
 |- changelog.html <- Optional changelog file for plugin, which will be displayed to end users
 |- logo_small.gif <- Optional small (16x16) icon associated with the plugin (can also be a .png file)  
 |- logo_large.gif <- Optional large (32x32) icon associated with the plugin (can also be a .png file) 
 |- classes/ <- Resources your plugin needs (i.e., a properties file)
 |- database/ <- Optional database schema files that your plugin needs
 |- i18n/ <- Optional i18n files to allow for internationalization of plugins.
 |- lib/ <- Libraries (JAR files) your plugin needs
 |- web <- Resources for Admin Console integration, if any
          |- WEB-INF/
                     |- web.xml <- Generated web.xml containing compiled JSP entries
                     |- web-custom.xml <- Optional user-defined web.xml for custom servlets
          |- images/


   上面的所有文件中,plugin.xml文件是最重要的。该文件包含下列内容:


The plugin.xml file specifies the main Plugin class. A sample file might look like the following:

Sample plugin.xml

<?xml version="1.0" encoding="UTF-8"?> 
<plugin>
        <!-- Main plugin class --> 
        <class>org.example.ExamplePlugin</class> 
                   <!-- Plugin meta-data -->
        <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> 
              <!-- Admin console entries -->
     <adminconsole>
                       <!-- More on this below -->
     </adminconsole>
 </plugin>

The meta-data fields that can be set in the plugin.xml file


class: 插件的入口类,在此类中,必须实现Plugin这个interface。

    - 

        - name:插件的名称。

        - description:插件的描述。

        - author:插件的作者。

        - version:插件的版本。

        - date:插件开发的日期。

        - url:插件的网络说明信息,可以说明插件的一些附信息

        - miniServerVersion: 插件需要Openfire平台的最低版本号,在插件装载过程中,平台判断插件的版本号是否匹配,如果不匹配,则不加载。

        - adminconsole: 这个标签指定了插件在Openfire平台中的web入口菜单,openfire会根据这个文件来动态的生成多级入口菜单,这个在后续会继续解释。


    在插件开发的过程,插件一定要实现Plugin接口,如:

Sample plugin implementation

package org.example;
 import org.jivesoftware.openfire.container.Plugin;
 import org.jivesoftware.openfire.container.PluginManager;
 import java.io.File;
  
public class ExamplePlugin implements Plugin { 
         public void initializePlugin(PluginManager manager, File pluginDirectory) {
                       // Your code goes here 
          }
          public void destroyPlugin() { 
             // Your code goes here 
          }
 }



你可能感兴趣的:(Openfire插件原理)