1.openfire运行配置
1) 点击Run\Open Debug Dialog...,出现"Run"窗口
2) 选择"Java Application",右键点击"New"按钮.
3) 在"Main"标签页,将New_configuration换成openfire.
4) 点击Project\Browse按钮,选择openfire,再点OK.
5) 点击Main class\Search按钮,选择main所在的类ServerStarter再点击OK, 建议勾选Stop in main.
6) Arguments页面。在VM arguments中加下内容
-DopenfireHome="${workspace_loc:Openfire}/target/openfire"。
7) 点击Classpath标签页,选择User Entries ,使得Advanced..按钮变的可用.点击Advanced按钮.在弹出来的Advanced Options窗口,选择Add Folders,再点OK,在Folder Selection窗口选择Openfire/src/i18n文件夹,同样的方式选择Openfire/src/resources/jar文件夹,点击OK。
8) 选择Common标签页,勾选Debug,Run前面的框
9) 点击Apply,再点击Close
2.编译
将Openfire/src/i18n文件夹下的openfire_i18n_en.properties文件及Openfire/src/resources/jar文件夹下的admin-sidebar.xml文件拷贝到src\bin目录下,打开ANT面板,选择openfire【default】任务执行。
3.运行
运行openfire,控制台界面出现如下信息:
Openfire 3.6.4 [Mar 15, 2010 8:49:33 AM]
Admin console listening at http://127.0.0.1:9090
在浏览器中打开上面显示的地址,可进行openfire的管理配置。
二、插件开发的目录结构
插件开发的目录位于src\plugins\下面。如本例新建camacus文件夹用于开发camacus插件。
先说文件:
changelog.html。这个是插件的修改记录,是一个网页而已,开发员可修改。其主要的用途就是在使用WEB浏览器(如IE)登录openfire服务器的时候,显示的插件的更改记录。
logo_large.png、logo_small.png。这是2个图标文件,分别在使用WEB浏览器(如IE)登录openfire服务器的时候显示插件的图标。分别是32*32和16*16大小的。
Plugin.xml。这个文件描述了插件重要的一些信息,在配置Openfire插件的时候至关重要。
Readme.html。这个和上面的那个一样一个网页而已。开发员可自行修改里面的内容。
这里要举例说明一下plugin.xml的写法:
<?xml version="1.0" encoding="UTF-8"?>
<plugin>
<class>cama.Camaplugin</class>
<name>Camacus Plugin</name>
<description>The customization plugin for openfire.</description>
<author>CDSoft</author>
<version>1.0.0</version>
<date>10/8/2012</date>
<minServerVersion>3.0.0</minServerVersion>
<adminconsole>
<tab id="tab-server">
<sidebar id="sidebar-server-manager">
<item id="camacus" name="Camacus Plugin"
url="camacus.jsp"
description="The customization plugin for openfire." />
</sidebar>
</tab>
</adminconsole>
</plugin>
主要配置如下:
class。表示插件的类。
Name。表示插件的名称。
Description。一些描述信息,可以自定义写。
Author。作者。
Version。插件版本。
Date。发布日期。
minServerVersion。需要最低的服务器版本。
Adminconsole。这里是配置在web上访问Openfire服务器的时候左侧边栏加入的条目。如果不想加入,可以在adminconsole的子项都去掉。我这里是配置了一个页面camacus.jsp。这个页面在src的web目录下。
三、插件开发的种类
1. 注册一个插件作为一个组成部分 。组件接收所有数据包给某一特定子网域。例如,test_component.example.com。因此,数据包发送到joe@test_component.example.com将交付给该组件。请注意,子域定义为组件无关的DNS条目的子域。所有的XMPP协议路由在套接字级别是使用主服务器域( example.com在上面的例子) ;子域仅用于路由的XMPP协议的服务器。
2. 注册一个插件作为IQHandler 。IQHandler处理特别元素的名称和命名空间的IQ包。下面的代码片断演示了如何注册一个IQHandler :
IQHandler myHandler = new MyIQHander();
IQRouter iqRouter = XMPPServer.getInstance().getIQRouter();
iqRouter.addHandler(myHandler);
3. 注册一个插件作为PacketInterceptor,接收所有通过该系统的数据包,并有选择地予以拒绝。例如,一个拦截可以拒绝所有的邮件或载亵渎国旗他们审查的管理员。
4. 您可以使用Openfire属性来储存持续插件设置:JiveGlobals.getProperty(String)和JiveGlobals.setProperty(String,String)的方法。让您的插件监听属性变化,使用org.jivesoftware.util.PropertyEventListener方法。您可以使用PropertyEventDispatcher.addListener ( PropertyEventListener )方法把您的插件作为一个监听者。注意你一定要在您的插件的destroyPlugin()反注册监听器。
本篇开发是PacketInterceptor的插件开发小结。从头到尾都详细介绍了如何开发一个PacketInterceptor插件实现消息的拦截和处理。
四、开发一个PacketInterceptor插件吧。
首先,从接口Plugin开发一个自定义的插件类。类名称之前的Plugin.xml里面已经配置了,就是用那个名称Camaplugin。
然后,实例化Plugin接口的initializePlugin和destroyPlugin两个方法。其中主要是initializePlugin。后面start()方法是后来启动webservice,如果不涉及webservice可以去掉这个方法调用代码如下:
/**
* 插件载入
*/
public void initializePlugin(PluginManager manager, File pluginDirectory)
{
System.out.println("载入Openfire的门户集成插件包!");
cpi = new CamaPacketInterceptor();
InterceptorManager.getInstance().addInterceptor(cpi);
start();
}
/**
* 插件注销
*/
public void destroyPlugin()
{
if(cpi != null)
{
InterceptorManager.getInstance().removeInterceptor(cpi);
}
}
其中可以看到CamaPacketInterceptor。这个是我手工编写的一个类,这个类实现了PacketInterceptor这个接口。这个接口需要实例化的方法只有一个,就是这个包拦截方法。
public void interceptPacket(Packet packet, Session session,
boolean incoming, boolean processed) throws PacketRejectedException
{
if(!processed && packet instanceof Message && incoming)
{//对packet的处理Message进行处理
}
}
这里packet是instanceof Message的。Packet还可以是其他种类。IQ, Message, Presence, Route。一共这4种。
接下来。如果想要丢弃被拦截的包。则通过抛出PacketRejectedException实现。
五、总结。
插件开发好以后编译完成就可以运行了。启动Openfire服务器。然后服务器会自动加载这个开发的插件。也可以通过登录Web来进行Openfire的插件配置。