`
redhacker
  • 浏览: 489105 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

openfire插件开发之完美开发

 
阅读更多
一、说在前面

在继上篇Openfire3.8.2在eclipse中Debug方式启动最简单的方式后,我研究了openfire的插件开发,在研究过程中,参考了多位朋友的博客的内容,特别是csdn上这位同学的博客,里面有关于如何开发最简单的插件和聊天插件的内容,我按照博主的内容进行了插件开发,并改进了博主的插件打包脚本,自认为比较完美了,拿出来和大家分享一下。

二、示例插件的功能

这个插件很简单,就是在openfire Server启动时,和关闭时,在控制台打印出消息。

三、插件开发的目录结构设计

我们先看一下openfire源码的插件开发目录结构:



openfire自带的插件结构如下:



我们仿照openfire源码自己创建的插件项目目录结构如下(基本上保持和官方的一致)



四、插件程序

我们写了一个很简单的插件程序,如下所示:



五、插件打包及部署

看看我们插件的部署所要注意的事项:



打包脚本的位置及打包生成插件的位置:



进行打包:







打包成功的helloworld.jar部署到openfire服务器,部署很简单,只需要进行拷贝到特定的目录,如下所示:



这个插件测试很简单,只要启动openfire,就可以看到插件的运行结果如下:



结束语:

后续开发我们就按照这个标准的目录进行开发,不用再写任何打包脚本,打包脚本可以复用,只需要修改一个插件的名字,并将要打包的插件代码提升到源码目录就可以了(其他插件的源码路径必须移除),十分方便!我将代码传到博客,让我们一起开始openfire插件开发之旅吧!!

如果您觉得本文对您有益,请点击博文后的google广告或在博主微店(美鲜果店)订购一份水果以表感谢,对作者表示支持,谢谢!
  • 大小: 14.4 KB
  • 大小: 12.1 KB
  • 大小: 14.2 KB
  • 大小: 13 KB
  • 大小: 29.4 KB
  • 大小: 14.3 KB
  • 大小: 26.5 KB
  • 大小: 66.5 KB
  • 大小: 30.5 KB
  • 大小: 49.2 KB
  • 大小: 39.4 KB
分享到:
评论
18 楼 taoshengyijiu20008 2015-06-30  
写的真不错
17 楼 u013205518 2015-04-13  
u013205518 写道
您好,你给的例子似乎不带数据库开发的,本人新手,openfire大多数插件需支持数据库开发,能否给个例子,1371549332@qq.com

16 楼 u013205518 2015-04-13  
您好,你给的例子似乎不带数据库开发的,本人新手,openfire大多数插件需支持数据库开发,能否给个例子,13715493332@qq.com
15 楼 wellba 2014-07-02  
你好,我现在正在学习openfire开发,现在在开发带jsp、PluginServlet的插件遇到了一个问题,我按照网上的教程一步一步的弄下来,启动openfire源码进入管理控制台之后在服务器设置可以看到自己写的插件Sample Service,点击进去页面一片空白,后台报空指针异常,
java.lang.NullPointerException
	at org.jivesoftware.openfire.container.PluginServlet.handleDevJSP(PluginServlet.java:419)
	at org.jivesoftware.openfire.container.PluginServlet.service(PluginServlet.java:107)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:547)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1359)
	at org.jivesoftware.admin.PluginFilter.doFilter(PluginFilter.java:78)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1330)
	at org.jivesoftware.admin.AuthCheckFilter.doFilter(AuthCheckFilter.java:164)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1330)
	at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118)
	at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1330)
	at org.jivesoftware.util.LocaleFilter.doFilter(LocaleFilter.java:74)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1330)
	at org.jivesoftware.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:50)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1330)
	at org.jivesoftware.admin.PluginFilter.doFilter(PluginFilter.java:78)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1330)
	at org.jivesoftware.admin.AuthCheckFilter.doFilter(AuthCheckFilter.java:164)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1330)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:478)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:520)
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:941)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:409)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:186)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:875)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
	at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250)
	at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110)
	at org.eclipse.jetty.server.Server.handle(Server.java:349)
	at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:441)
	at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:919)
	at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:582)
	at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:218)
	at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:51)
	at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:586)
	at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:44)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:598)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:533)
	at java.lang.Thread.run(Thread.java:722)


打断点发现是进入PluginServlet中pluginManager为null值,在网上找了许久也没有找到解决方案,可否指教,QQ472750722,谢谢!
14 楼 batelei 2014-06-09  
fly_宇光十色 写道
fly_宇光十色 写道
jianjue123 写道
ant运行build.xml的时候提示这个是怎么回事呀?我的tomcat是7.0.47的!

F:\workSpace_test\MyOpenfirePluginDelevop\build\build.xml:30: E:\tomcat\apache-tomcat-7.0.47\server\lib does not exist.

第30行:<taskdef classname="org.apache.jasper.JspC" name="jasper2">。

我之前也遇到了你这样的问题。原因出在你ant编译的方式不对,按照楼主这样编译,运行的时候选择到openfire_plugin_java才行

不对。。如果编译带jsp的插件的时候,还是会报这个错。。。求解! 

这个问题的原因是因为你的tomcat版本不一样,里面的目录不一样!tomcat7只有一个lib下面的jar,没有什么server和common,所以,只需要修改一下build.xml里面的路径即可!
13 楼 batelei 2014-06-09  
ant运行build.xml的时候提示这个是怎么回事呀?我的tomcat是7.0.47的!

F:\workSpace_test\MyOpenfirePluginDelevop\build\build.xml:30: E:\tomcat\apache-tomcat-7.0.47\server\lib does not exist.

第30行:<taskdef classname="org.apache.jasper.JspC" name="jasper2">。

这个问题的原因是因为你的tomcat版本不一样,里面的目录不一样!tomcat7只有一个lib下面的jar,没有什么server和common,所以,只需要修改一下build.xml里面的路径即可!
12 楼 fly_宇光十色 2014-03-27  
fly_宇光十色 写道
jianjue123 写道
ant运行build.xml的时候提示这个是怎么回事呀?我的tomcat是7.0.47的!

F:\workSpace_test\MyOpenfirePluginDelevop\build\build.xml:30: E:\tomcat\apache-tomcat-7.0.47\server\lib does not exist.

第30行:<taskdef classname="org.apache.jasper.JspC" name="jasper2">。

我之前也遇到了你这样的问题。原因出在你ant编译的方式不对,按照楼主这样编译,运行的时候选择到openfire_plugin_java才行

不对。。如果编译带jsp的插件的时候,还是会报这个错。。。求解! 
11 楼 fly_宇光十色 2014-03-27  
jianjue123 写道
ant运行build.xml的时候提示这个是怎么回事呀?我的tomcat是7.0.47的!

F:\workSpace_test\MyOpenfirePluginDelevop\build\build.xml:30: E:\tomcat\apache-tomcat-7.0.47\server\lib does not exist.

第30行:<taskdef classname="org.apache.jasper.JspC" name="jasper2">。

我之前也遇到了你这样的问题。原因出在你ant编译的方式不对,按照楼主这样编译,运行的时候选择到openfire_plugin_java才行
10 楼 fiream 2014-02-27  
调试成功了,谢谢您的分享。一步一步做,很成功。还没搞定的同志们加油把~
9 楼 jianjue123 2014-01-20  
ant运行build.xml的时候提示这个是怎么回事呀?我的tomcat是7.0.47的!

F:\workSpace_test\MyOpenfirePluginDelevop\build\build.xml:30: E:\tomcat\apache-tomcat-7.0.47\server\lib does not exist.

第30行:<taskdef classname="org.apache.jasper.JspC" name="jasper2">。
8 楼 redhacker 2013-12-03  
beyondfox 写道
你好,我现在正准备开发一个openfire插件,看到你的文章,收获很大。
你的文章中,详细说明了插件的创建、编译和部署,可是不知道如果进行调试,也就是DEBUG。
这也是我比较不太理解的地方,网上很多地方都讲述了插件的创建、编译和部署的过程,但是调试过程都没有说,可否指教,QQ:43631700


调试可以采用远程debug的方式吧?具体参考:http://redhacker.iteye.com/blog/1567863
7 楼 bluecoyote 2013-12-02  
楼主你好,我按照你这个方法写简单的聊天插件后,无法建表,请问这和build文件有关系吗?谢谢。
6 楼 wll52 2013-10-16  
楼主你写得真好,实用,就是不知道如何通过URL来访问如:http://localhost:9090/plugins/hellower
5 楼 redhacker 2013-09-29  
beyondfox 写道
redhacker 写道
beyondfox 写道
你好,我现在正准备开发一个openfire插件,看到你的文章,收获很大。
你的文章中,详细说明了插件的创建、编译和部署,可是不知道如果进行调试,也就是DEBUG。
这也是我比较不太理解的地方,网上很多地方都讲述了插件的创建、编译和部署的过程,但是调试过程都没有说,可否指教,QQ:43631700


参考:http://redhacker.iteye.com/blog/1914619,直接到这个项目上开发插件!


你的意思是,我在开发插件的时候,不需要单独建立一个插件项目,而是在openfire_src工程下直接建立插件就可以吗?
建立的目录在src/plugins?


是的。
4 楼 beyondfox 2013-09-28  
redhacker 写道
beyondfox 写道
你好,我现在正准备开发一个openfire插件,看到你的文章,收获很大。
你的文章中,详细说明了插件的创建、编译和部署,可是不知道如果进行调试,也就是DEBUG。
这也是我比较不太理解的地方,网上很多地方都讲述了插件的创建、编译和部署的过程,但是调试过程都没有说,可否指教,QQ:43631700


参考:http://redhacker.iteye.com/blog/1914619,直接到这个项目上开发插件!


你的意思是,我在开发插件的时候,不需要单独建立一个插件项目,而是在openfire_src工程下直接建立插件就可以吗?
建立的目录在src/plugins?
3 楼 redhacker 2013-09-22  
beyondfox 写道
你好,我现在正准备开发一个openfire插件,看到你的文章,收获很大。
你的文章中,详细说明了插件的创建、编译和部署,可是不知道如果进行调试,也就是DEBUG。
这也是我比较不太理解的地方,网上很多地方都讲述了插件的创建、编译和部署的过程,但是调试过程都没有说,可否指教,QQ:43631700


参考:http://redhacker.iteye.com/blog/1914619,直接到这个项目上开发插件!
2 楼 redhacker 2013-09-22  
beyondfox 写道
你好,我现在正准备开发一个openfire插件,看到你的文章,收获很大。
你的文章中,详细说明了插件的创建、编译和部署,可是不知道如果进行调试,也就是DEBUG。
这也是我比较不太理解的地方,网上很多地方都讲述了插件的创建、编译和部署的过程,但是调试过程都没有说,可否指教,QQ:43631700


这个是单独进行插件开发的示例,你可以直接在openfire_src上开发,使用debug方式启动项目,进行断点调试。
1 楼 beyondfox 2013-09-22  
你好,我现在正准备开发一个openfire插件,看到你的文章,收获很大。
你的文章中,详细说明了插件的创建、编译和部署,可是不知道如果进行调试,也就是DEBUG。
这也是我比较不太理解的地方,网上很多地方都讲述了插件的创建、编译和部署的过程,但是调试过程都没有说,可否指教,QQ:43631700

相关推荐

Global site tag (gtag.js) - Google Analytics