`
redhacker
  • 浏览: 494307 次
  • 性别: 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

相关推荐

    openfire插件开发环境搭建

    4. **安装SDK**:Openfire提供了SDK,包含了开发插件所需的库和API文档。下载SDK后,将其添加到你的IDE中作为项目依赖。 5. **创建新插件项目**:在IDE中创建一个新的Java项目,根据Openfire的插件结构建立目录和...

    openfire插件开发(1)

    OpenFire插件开发系列的第一部分主要涉及如何搭建OpenFire的二次开发环境,为后续的插件开发工作做好准备。OpenFire是一款开源的即时通讯服务器,它基于Java技术,支持XMPP协议,允许开发者通过编写插件来扩展其功能...

    openfire服务器开发插件的简单demo

    本项目是一个关于在Openfire服务器上开发插件的简单示例,旨在帮助开发者快速理解和入门Openfire插件的开发流程。 首先,Openfire插件是扩展Openfire功能的一种方式,它们可以增加新的管理界面、实现自定义逻辑或...

    编写Openfire开发插件、部署源码

    开发者需要熟悉XMPP协议、Java编程和Web开发的相关知识,才能有效地利用Openfire的API进行插件开发。而部署源码则涉及到构建流程、依赖管理和服务器配置,确保插件能够在Openfire环境中正常运行。

    openfire 插件开发

    标题中的“openfire 插件开发”指的是Openfire系统中的插件开发技术。Openfire是一款开源的即时通讯(Instant Messaging, IM)服务器,基于XMPP协议,提供了丰富的API和插件扩展机制,允许开发者创建自定义功能来...

    OpenFire插件开发从入门到精通

    OpenFire是一款基于Java开发的实时通信(XMPP)服务器,广泛应用于企业级的即时通讯解决方案。...在这个过程中,持续学习和不断探索是提升技能的关键,希望本文能为你的OpenFire插件开发之旅提供有力的指导。

    Openfire插件开发 访问jsp servlet

    在这个“Openfire插件开发 访问jsp servlet”项目中,我们将探讨如何在Openfire环境中开发一个插件,同时利用JavaServer Pages(JSP)和Servlet技术来处理HTTP请求。 首先,让我们理解Openfire插件开发的基本流程:...

    openfire插件开发.pdf

    Openfire是一款开源的即时通讯...开发插件的过程中,开发者需要对这些知识点有充分的理解,并且需要具备相关的开发经验和调试技巧。只有这样,才能开发出高质量、稳定可靠的Openfire插件来满足各种即时通讯的需求。

    openfire插件开发人员指南

    Openfire 是一个基于XMPP协议的实时协作服务器,它的强大功能之一在于支持插件扩展。插件开发人员指南是为那些希望为Openfire增添新功能或定制化服务的开发者准备的资源。以下是对Openfire插件开发核心概念的详细...

    Openfire插件开发人员指南

    本文将深入探讨如何开发 Openfire 插件,以及插件的基本结构和配置。 首先,一个 Openfire 插件的核心组成部分是一个 `plugin.xml` 文件,它定义了插件的基本信息和行为。在这个文件中,开发者需要声明插件的主要类...

    第一个openfire插件源码及说明

    本教程将引导初学者了解如何开发第一个Openfire插件,从而深入理解Openfire的架构和插件开发流程。 1. **Openfire插件体系结构** Openfire插件是Java编写的独立模块,它们通过Openfire提供的API与核心服务交互。每...

    Openfire插件开发实例

    目的:主要是为了监控Openfire各类message,然后对message body做进一步...局限:因为时间有限,本插件并没有对Openfire message协议进行扩展,都是基于原生的xml协议,因此后续开发还需要进行更加深入的二次开发操作。

    openfire插件

    Openfire 插件是基于Java开发的开源即时通讯(IM)服务器——Openfire的扩展功能模块。Openfire是一款强大的、跨平台的企业级通讯解决方案,它使用XMPP协议,支持多种客户端,包括桌面应用和移动应用。Openfire插件...

    openfire简单插件

    通过以上步骤,你就可以开始你的Openfire插件开发之旅。记住,实践中遇到问题时,Openfire社区论坛和官方文档是获取帮助的重要资源。不断学习和实践,你将能够创建出满足各种需求的Openfire插件,丰富和拓展Openfire...

    openfire 插件简单示例

    本示例将带你走进Openfire插件开发的世界,通过一个简单的Servlet插件来介绍开发流程。 首先,我们需要理解Openfire插件的基本结构。一个Openfire插件通常包含以下几个部分: 1. **Plugin.java**:这是插件的核心...

    Openfire 及插件开发 . 国内没有中文资料.我自己手写

    Openfire 的插件开发对于扩展其功能至关重要。在国内,关于Openfire及其插件开发的中文资料较为稀缺,因此这篇资料显得尤为珍贵。 ### Openfire 的安装与配置 1. **下载**:首先需要从官方或者其他可靠的源获取...

    Openfire 的安装和配置、插件开发

    二、在 Eclipse 中部署可开发插件的 Openfire 为了开发 Openfire 插件,我们需要使用 Eclipse 和 Ant。下面是详细的步骤: 1. 下载 Openfire 源码,例如 openfire_src_3_9_3.zip。 2. 解压 Openfire 源码到 ...

    openfire shell插件

    openfire shell插件

    openfire插件开发

    openfire第一个插件开发以及源码说明,QQ群:28588322

Global site tag (gtag.js) - Google Analytics