首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

摘引 Openfire插件开发

2012-12-20 
引用 Openfire插件开发?????? class定义的是插件的入口,必须实现org.jivesofware.openfire.container.Plug

引用 Openfire插件开发

?????? class定义的是插件的入口,必须实现org.jivesofware.openfire.container.Plugin接口。

?????? minServerVersion 则是你的插件要求openfire的最低版本

四、管理控制台添加页面

?如果你的插件需要在控制台配置,则可以修改 the Admin Console。看下文档就应该很容易做到了。你也许发现了,当你登陆http://localhost:9090/后会发现它使用了jsp页面,你可能会认为openfire也是一个web服务器,能够处理http请求,能够解析jsp页面?其实不是的,openfire中要使用的jsp页面事先已经使用jsper-compile.jar编译好了,并且把编译成的servlet配置在web.xml中。运行时根据请求的路径来实例化那些servlet,再调用service方法,处理http请求。

你自己的插件如果有jsp页面也可以把jsp页面先编译好,放到classes根目录下。? 或者打包成jar文件放到lib下。Openfire源码提供了的build文件,可以帮助你自动打

包,并且自动帮你在web.xml文件中映射这些servlet。

?

五、实现自己的插件plugin类

?你的plugin可以走四条路:

1.?????? 拦截器方式,在你的插件中添加包拦截器,在拦截器中实现你的功能。通过InterceptorManager.getInstance().addInterceptor()添加。

2.?????? component方式,在插件中添加component。通过ComponentManager.getInstance().addComponent()添加。

3.?????? Handler方式,通过XMPPServer.getInstance().getIQRouter().addHandler(yourHandler);

4.?????? PropertyEventListener方式:通过??????????????????????????????????????????

PropertyEventDispatcher.addListener(yourPropertyEventListner)添加。

简单拦截器方式示例:

public class ArtWeaverPlugin implements Plugin

{

??? private PacketInterceptor ic = null;

??? @Override

??? public void initializePlugin(PluginManager pluginManager, File pluginDirectory)

??? {

?????? ic = new PresenceSignatureInterceptor();

?????? InterceptorManager.getInstance().addInterceptor(ic);

??? }

??? @Override

??? public void destroyPlugin()

??? {

?????? if(ic != null)

?????? {

?????????? InterceptorManager.getInstance().removeInterceptor(ic);

?????? }

??? }

??? private class PresenceSignatureInterceptor implements PacketInterceptor

??? {

?????? @Override

?????? public void interceptPacket(Packet packet, Session session,

????????????? boolean incoming, boolean processed) throws PacketRejectedException

?????? {

?????????? if(!processed && packet instanceof Presence && incoming)

?????????? {

????????????? //在这添加你自己的对packet的处理

?????????? }

??? }

}

?

六、最后打包成jar或者war文件

?示例使用ant:

<target name = "release" depends="init,clean">

?????? <jar destfile="${target.plugin}/artweaver.jar"

?????????? basedir="work">

?????? </jar>

?????? <antcall target="clean-all"></antcall>

?????? <antcall target = "copy2openfire"/>

?????? <antcall target = "copyAll2openfirePlugin"/>

</target>

?解释一下:先把classes、plugin.xml、lib等一些东西copy到work文件夹下,jar后删掉work目录。然后把做好的jar文件copy到openfire的目录下。如果你的openfire是启动的开发模式,则openfire会马上把你插件解压,然后马上启动,不用重启服务器就能测试你的plugin了。

?

热点排行