引用 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了。
?