openfire本地环境搭建和openfire插件开发实例
2014-06-09 11:52
405 查看
首先
学习新的东西之前我们的知道它到底能给我们带来什么
1.openfire的介绍和通信协议
Openfire采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议。
您可以使用它轻易的构建高效率的即时通信服务器.
Openfire安装和使用都非常简单,并利用Web进行管理。单台服务器可支持上万并发用户。
由于是采用开放的XMPP协议,您可以使用各种支持XMPP协议的IM客户端软件登陆服务.
2.最新版本
3.9.1--Feb6,2014
2014年5月6日,Openfire3.9.3hasbeenreleased
3.下载openfire源码,在本地搭建openfire环境
注:此处的默认路径为openfire_src文件夹的绝对路径
上文转自:http://blog.csdn.net/ares1201/article/details/7737872(尊重原著版权)
4.自定义自己的一个简单插件
新建一个自己的javaproject工程,添加的jar包如下:
将jasper-compiler.jar、jasper-runtime.jar、servlet.jar添加到新建的工程中。如果没有jar先不要急,看下面的步骤:
下载后的openfire源码目录是这样的
如果你有ant工具可以用dos命令行的方式,直接运行build目录中的ant脚本,运行脚本后,你会发现有一个target的目录。该目录如下:
在lib目录中可以找到我们需要的jar文件了,将openfire.jar也添加到你的工程中。
如果你没有安装ant你可以用MyEclipse,将openfire源码中的build、documentation、resources目录复制到一个JavaProject中,然后在MyEclipse中运行src中的build.xmlant脚本就会出现和上面一样的文件目录。
建议将你的MyEclipse中的openfire源码工程目录设置成这样的
其中,src/plugins/tree是我自己写的插件,现在暂时可以无视。而target就是我们需要的,里面存放了openfire的配置和需要的jar包。Work是工作目录,是一个完整的openfire服务器。如果你还没有下载openfire服务器的话,可以用这个服务器。
了解openfire源码中的插件
我们找一个插件目录看看,主要看看里面的结构,目录结构很重要。因为我们将写好的插件打成jar包后,打包的jar的目录有一定规范结构,不能随便建立其他目录。
这是一个userservice的插件,在src/java中是我们的插件源代码;web目录中则是前端的页面,其中web-custom.xml是配置当前插件UserServiceServlet配置;changelog.html是修改日志;logo_small.gif是插件图标;plugin.xml是我们配置插件的文件,这个很重要(在这里先提示下);
工程现在的目录机构如下
1、建立自己的插件类,SamplePlugin.java,里面简单的写点内容。
学习新的东西之前我们的知道它到底能给我们带来什么
1.openfire的介绍和通信协议
Openfire采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议。
您可以使用它轻易的构建高效率的
Openfire安装和使用都非常简单,并利用Web进行管理。单台服务器可支持上万并发用户。
由于是采用开放的XMPP协议,您可以使用各种支持XMPP协议的IM客户端软件登陆服务.
2.最新版本
3.9.1--Feb6,2014
2014年5月6日,Openfire3.9.3hasbeenreleased
3.下载openfire源码,在本地搭建openfire环境
下载源代码:http://www.igniterealtime.org/downloads/source.jsp
2、把源代码解压出的openfire_src文件夹放至eclipseworkplace(注意:若是变更了解压出来的文件名,则接下来所有用到文件名的地方都要作出相应更改,否则会报错!)
3、把openfire_src文件夹里的三个无用的html文件删除
4、打开eclipse,新建一个名为openfire_src的JavaProject,然后finish
注:此处的默认路径为openfire_src文件夹的绝对路径
5、项目建好后如图所示,其中有几个目录报错,是由于缺少3个jar包:coherence.jar、coherence-work.jar、tangosol.jar
6、下载这几个jar包,然后复制到/openfire_src/build/lib目录下,下载地址
7、选中3个新添加的jar包,点击右键,选择BuildPath->AddtoBuildPath
8、把jar包编译后还是会有报错,如图,解决办法是直接找到java源文件SipCommRouter.java和SipManager.java,使用eclipse的自动修复,把错误修复,一般是没有实现抽象方法和没有处理异常。
9、点击Window->ShowView->Ant,在Ant中选择AddBuildfiles,将build目录下的build.xml选中,然后ok
10、把JavaJDK的lib目录下的tools.jar包拷贝到JavaJRE的lib目录下
11、运行选中的文件
12、运行成功后,刷新工程,目录多出两个文件夹
13、将target/lib目录下的所有jar包选中,单击右键,选择BuildPath–>AddtoBuildPath(和步骤7相似)
14、选中项目,点击run->runconfigurations
15、选择runconfigurations左边的JavaApplication,单击右键,选择New
16、选中Main选项卡,点击Browse选择openfire_src项目;单击Search选择ServerStarter-org.jivesoftware.openfire.starter,结果如下
17、选中Arguments选项卡,在VMarguments中填入-DopenfireHome="${workspace_loc:openfire_src}/target/openfire"
18、选中Classpath选项卡,选中UserEntries,点击右边的Advanced按钮
19、在弹出的框中选中AddFolders,选中src/i18n文件夹,点击ok
20、重复上一步骤把src/resources选中添加,结果如下:UserEntries下多了两个文件夹
21、选中Common选项卡,将Debug和Run打钩,然后点击apply,再点击run
22、成功运行结果
23、在浏览器中输入上图的地址http://127.0.0.1:9090
24、选择中文,然后继续。服务器设置可直接跳过。数据库设置选择标准数据库连接,点击继续
25、在数据库设置-标准连接设置界面,选择数据库驱动mysql,更改数据库url,其中需要更改的有服务器ip地址,还有数据库名,建议单独建立一个名为openfire的数据库。输入数据库管理员的账号和密码,下一步。
26、数据库连接成功后界面,直接点击继续。
27、管理员账户设置界面,输入管理员的邮箱地址,还有管理员的账号的密码,初始账号为admin。
28、完成设置,登录到管理控制台,初始账户名admin密码为上一步设置的密码。
29、登陆成功后显示
30、检测服务器是否配置成功,到http://www.igniterealtime.org/downloads/index.jsp下载Spark
31、安装Spark,一路next,然后finish。运行Spark,创建Spark账号
32、使用创建的账号登陆Spark,登陆成功可在Openfire管理控制台的用户组看到新注册的用户和在线状态
上文转自:http://blog.csdn.net/ares1201/article/details/7737872(尊重原著版权)
4.自定义自己的一个简单插件
新建一个自己的javaproject工程,添加的jar包如下:
将jasper-compiler.jar、jasper-runtime.jar、servlet.jar添加到新建的工程中。如果没有jar先不要急,看下面的步骤:
下载后的openfire源码目录是这样的
如果你有ant工具可以用dos命令行的方式,直接运行build目录中的ant脚本,运行脚本后,你会发现有一个target的目录。该目录如下:
在lib目录中可以找到我们需要的jar文件了,将openfire.jar也添加到你的工程中。
如果你没有安装ant你可以用MyEclipse,将openfire源码中的build、documentation、resources目录复制到一个JavaProject中,然后在MyEclipse中运行src中的build.xmlant脚本就会出现和上面一样的文件目录。
建议将你的MyEclipse中的openfire源码工程目录设置成这样的
其中,src/plugins/tree是我自己写的插件,现在暂时可以无视。而target就是我们需要的,里面存放了openfire的配置和需要的jar包。Work是工作目录,是一个完整的openfire服务器。如果你还没有下载openfire服务器的话,可以用这个服务器。
了解openfire源码中的插件
我们找一个插件目录看看,主要看看里面的结构,目录结构很重要。因为我们将写好的插件打成jar包后,打包的jar的目录有一定规范结构,不能随便建立其他目录。
这是一个userservice的插件,在src/java中是我们的插件源代码;web目录中则是前端的页面,其中web-custom.xml是配置当前插件UserServiceServlet配置;changelog.html是修改日志;logo_small.gif是插件图标;plugin.xml是我们配置插件的文件,这个很重要(在这里先提示下);
二、开发简单插件
工程现在的目录机构如下1、建立自己的插件类,SamplePlugin.java,里面简单的写点内容。
packagecom.hoo.server.plugin;
importjava.io.File;
importorg.jivesoftware.openfire.XMPPServer;
importorg.jivesoftware.openfire.container.Plugin;
importorg.jivesoftware.openfire.container.PluginManager;
/**
*<b>function:</b>openfireserverpluginsample
*@authorhoojo
*@createDate2013-2-28下午05:48:22
*@fileSamplePlugin.java
*@packagecom.hoo.server.plugin
*@projectOpenfirePlugin
*@blog'target='_blank'>http://blog.csdn.net/IBM_hoojo[/code] *@emailhoojo_@126.com*@version1.0*/publicclassSamplePluginimplementsPlugin{privateXMPPServerserver;@OverridepublicvoidinitializePlugin(PluginManagermanager,FilepluginDirectory){server=XMPPServer.getInstance();System.out.println("初始化……安装插件!");System.out.println(server.getServerInfo());}@OverridepublicvoiddestroyPlugin(){System.out.println("服务器停止,销毁插件!");}}
比较简单,如果你将插件安装在openfire服务器上的时候,启动服务器一个可以看到初始化的内容,关闭服务器可以看到销毁的内容。
2、配置插件<?xmlversion="1.0"encoding="UTF-8"?><plugin><!--Mainpluginclass这里是最重要滴,就是你的插件的全路径--><class>com.hoo.server.plugin.SamplePlugin</class><!--Pluginmeta-data--><name>SimplePlugin</name><description>Thisisthemysampleplugin.</description><author>hoojo</author><version>1.0</version><date>28/02/2013</date><url>http://localhost:9090/openfire/plugins.jsp</url><minServerVersion>3.4.1</minServerVersion><licenseType>gpl</licenseType><adminconsole></adminconsole></plugin>
注意上面的class的配置,那个配置是最为重要的,配置的是插件的全路径;name是插件的名称,安装后的插件名称;author是插件作者;lincenseType是协议;adminconsole是配置插件关联的页面的;稍后再讲!
3、可部署的插件包jar的目录结构
这个很重要,目录结构将决定你插件发布的成败。
在编写命令之前,我们可以看看openfire服务器中已经安装的插件的jar包的目录结构,到时候我们也要打包成那样的结构才行的。必须打包成这样的目录结构,否则哼哼……后果很严重的!声明!
在我机器中的openfire服务器中,插件目录在C:\ProgramFiles\openfire\plugins,里面有一个search.jar插件。提示:当你将一个可以安装的jar安装在openfire后,会被openfire解压成目录结构。就向JavaEE中的war包发布的应用服务器中的效果一样的。
打成可部署的插件jar包(相当于发布的应用服务器的目录结构)的search.jar目录结构如下:
首先看看文件命名,search.jar就是我们打包的插件的名称,而国际化的配置文件就是以插件名称开头_118n.properties或插件名称开头_118n_language.properties;而lib目录中的是插件的src目录的class打成的jar包;带有*-jspc.jar是web目录下的jsp编译成servlet后的class打成的包文件,都是以插件名称开头;WEB-INF/web.xml配置的是*-jspc.jar中的class文件;web/images是图片文件,需要用到的图片都放置在这个目录即可;plugin.xml文件名固定的,里面是配置插件的xml内容。
其中,118n国际化文件,它主要是我们在插件中的jsp和Java程序中的国际化配置。Web目录存放jsp、图片、web.xml内容;lib目录是存放插件的src目录的java代码编译后打包的jar,以及jsp编译成servlet的class打包后的jar;其他的文件都是根目录的;
对照上面插件包的jar,我们看看实际开发中的目录结构:
稍提醒下,如果你的插件中包含servlet,那你需要将它配置在web目录下的WEB-INF/web-custom.xml目录中;这个在以后会经常用到的,比如你提供一个接口给外部程序调用的情况下。目录结构参考:
UserServiceServlet配置在web-custom.xml目录中。
4、编写ant命令,打可部署jar包。如果你不懂ant命令也没关系,你总知道java的基本常用的dos命令。只不过ant就是将dos转换成一个可重复多次调用的命令行。
在工程的根目录中新建一个build目录,新建
build.xml<projectname="WebappPrecompilation"default="openfire-plugins"basedir="."><propertyfile="build.properties"/><!--javaservlet相关文件编译jar存放位置--><propertyname="java.jar.dir"value="${webapp.path}/java-dist"/><!--jspservlet编译后jar存放位置--><propertyname="jsp.jar.dir"value="${webapp.path}/jsp-dist/lib"/><!--定义javaservlet和jspservlet的jar包名称--><propertyname="java.jar"value="${java.jar.dir}/plugin-${plugin.name}.jar"/><propertyname="jsp.jar"value="${jsp.jar.dir}/plugin-${plugin.name}-jsp.jar"/><!--jspservlet配置到web.xml中--><propertyname="plugin.web.xml"value="${webapp.path}/jsp-dist/web.xml"/><!--编译jsp并生成相关jar、xml文件--><targetname="jspc"><taskdefclassname="org.apache.jasper.JspC"name="jasper2"><classpathid="jspc.classpath"><pathelementlocation="${java.home}/../lib/tools.jar"/><filesetdir="${tomcat.home}/bin"><includename="*.jar"/></fileset><filesetdir="${tomcat.home}/server/lib"><includename="*.jar"/></fileset><filesetdir="${tomcat.home}/common/lib"><includename="*.jar"/></fileset><!--<filesetdir="D:/Workspace/openfire/build/lib"><includename="**/*.jar"/></fileset--></classpath></taskdef><!--编译jsp->servletclass--><jasper2javaEncoding="UTF-8"validateXml="false"uriroot="${plugin.path}/web"outputDir="${webapp.path}/jsp-dist/src"package="com.hoo.openfire.plugin.${plugin.name}"/><!--编译后的servletclass配置到web.xml文件中--><jasper2validateXml="false"uriroot="${plugin.path}/web"outputDir="${webapp.path}/jsp-dist/src"package="com.hoo.openfire.plugin.${plugin.name}"webXml="${plugin.web.xml}"/></target><!--编译jsp并将其打jar包--><targetname="compile"><mkdirdir="${webapp.path}/jsp-dist/classes"/><mkdirdir="${webapp.path}/jsp-dist/lib"/><mkdirdir="${webapp.path}/jsp-dist/src"/><javacdestdir="${webapp.path}/jsp-dist/classes"optimize="off"encoding="UTF-8"debug="on"failonerror="false"srcdir="${webapp.path}/jsp-dist/src"excludes="**/*.smap"><classpath><pathelementlocation="${webapp.path}/jsp-dist/classes"/><filesetdir="${webapp.path}/jsp-dist/lib"><includename="*.jar"/></fileset><pathelementlocation="${tomcat.home}/common/classes"/><filesetdir="${tomcat.home}/common/lib"><includename="*.jar"/></fileset><pathelementlocation="${tomcat.home}/shared/classes"/><filesetdir="${tomcat.home}/shared/lib"><includename="*.jar"/></fileset><filesetdir="${tomcat.home}/bin"><includename="*.jar"/></fileset></classpath><includename="**"/><excludename="tags/**"/></javac><jarjarfile="${jsp.jar}"basedir="${webapp.path}/jsp-dist/classes"/></target><!--将javaservlet打包成jar--><targetname="java-jar"><mkdirdir="${java.jar.dir}"/><jarjarfile="${java.jar}"><filesetdir="${webapp.path}/bin"includes="**/*.class"/></jar></target><!--生成可部署的插件包--><targetname="plug-jar"><!--插件插件包相关lib、web目录--><mkdirdir="${webapp.path}/${plugin.name}/lib"/><mkdirdir="${webapp.path}/${plugin.name}/web/WEB-INF"/><!--复制jspservlet的jar和javaservlet的相关jar包到插件包的lib目录下--><copyfile="${java.jar}"todir="${webapp.path}/${plugin.name}/lib"/><copyfile="${jsp.jar}"todir="${webapp.path}/${plugin.name}/lib"/><!--将相关的图片、帮助文档、修改日志等文件复制到插件目录下--><copytodir="${webapp.path}/${plugin.name}"><filesetdir="${plugin.path}"includes="*.*"/></copy><copytodir="${webapp.path}/${plugin.name}/web"><filesetdir="${plugin.path}/web"><includename="*"/><includename="**/*.*"/><excludename="**/*.xml"/><excludename="**/*.jsp"/></fileset></copy><!--jspservlet的web复制到插件目录下--><copyfile="${plugin.web.xml}"todir="${webapp.path}/${plugin.name}/web/WEB-INF"/><copytodir="${webapp.path}/${plugin.name}/web"><filesetdir="${plugin.path}/web"includes="**/*.xml"/></copy><!--将国际化相关资源文件复制到插件目录下<copyfile="${webapp.path}/bin/i18n"todir="${webapp.path}/${plugin.name}"/>--><!--产生可部署插件包--><jarjarfile="${webapp.path}/${plugin.name}.jar"><filesetdir="${webapp.path}/${plugin.name}"includes="**/**"/></jar></target><!--生成没有Web资源的可部署插件包--><targetname="java-plug-jar"><!--插件插件包相关lib、web目录--><mkdirdir="${webapp.path}/${plugin.name}/lib"/><!--复制javaservlet的相关jar包到插件包的lib目录下--><copyfile="${java.jar}"todir="${webapp.path}/${plugin.name}/lib"/><!--将相关的图片、帮助文档、修改日志等文件复制到插件目录下--><copytodir="${webapp.path}/${plugin.name}"><filesetdir="${plugin.path}"includes="*.*"/></copy><!--产生可部署插件包--><jarjarfile="${webapp.path}/${plugin.name}.jar"><filesetdir="${webapp.path}/${plugin.name}"includes="**/**"/></jar></target><!--清理生成的文件--><targetname="clean"><deletefile="${webapp.path}/${plugin.name}.jar"/><deletedir="${webapp.path}/${plugin.name}"/><deletedir="${webapp.path}/jsp-dist"/><deletedir="${webapp.path}/java-dist"/></target><targetname="all"depends="clean,jspc,compile"/><targetname="openfire-plugin"depends="jspc,java-jar"/><targetname="openfire-plugins"depends="all,java-jar,plug-jar"/><targetname="openfire-plugin-java"depends="clean,java-jar,java-plug-jar"/></project>
build.properties文件内容#tomcathometomcat.home=D:/tomcat-5.0.28/tomcat-5.0.28webapp.path=D:/Workspace/OpenfirePluginplugin.name=sampleplugin.path=D\:/Workspace/OpenfirePlugin/src/plugins/sample
注意:这里我没有编写编译java代码到class的步骤,我是直接使用MyEclipse自动编译的bin/class的。如果你没有用MyEclipse或Eclipse,那么你需要将src中的Java代码编译class。
这里需要配置tomcat的目录,我这里是5.0.28的版本。我用tomcat6有些问题,这里主要是用tomcat中的lib库,帮助我们编译jsp。还需要配置你当前工程的所在目录,也就是工程在Eclipse中的目录位置。最后你需要配置插件的名称和插件在工程中的所在目录,这个是在打包的时候,需要将其他的html、image、xml等资源导入的jar内。
因为这里的插件是不带jsp的,所以我们执行clean、java-jar、java-plugin-jar。也就是openfire-plugin-java这个命令即可。执行命令后,你可以看到工作空间的工程目录下多了目录和文件。见图:
java-dist目录里面的就是src/plugin/sample目录中的java代码打成的jar包。具体你可以用zip打开看看。
sample就是我们的插件目录,和sample.jar中的内容是一模一样的。
sample.jar就是将sample目录打成jar包。
5、发布插件
发布插件有2种方式
第一种:直接将插件放置在openfire服务器的plugins目录下。我的是在:C:\ProgramFiles\openfire\plugins目录。重起openfire后你可以看到控制台输出我们插件中输出的内容,并且在C:\ProgramFiles\openfire\plugins目录中可以看到该目录下多了一个sample的目录(openfire可以自动解压jar包)。
当你在关闭服务器的瞬间,也会打印销毁插件的消息。
第二种:在openfire启动的情况下,访问http://localhost:9090/plugin-admin.jsp页面,点击页面下方的upload
plugin完成插件上传操作。
插件按照成功后,访问http://localhost:9090/plugin-admin.jsp页面你就可以看到安装好的插件了。
至此,不带jsp页面的简单插件就编写部署成功了。有些插件是单纯的继承Plugin或Handler什么的,但有些是需要jsp页面和Servlet的。下面我们就来开发带jsp和servlet的插件。
三、开发带jsp、PluginServlet的插件
在之前的目录下添加文件,目录结构如下:
1、首先建立一个SampleServlet的文件,内容如下packagecom.hoo.server.plugin;importjava.io.IOException;importjava.io.PrintWriter;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;/***<b>function:</b>sampleservlet*@authorhoojo*@createDate2013-3-4下午04:15:20*@fileSampleServlet.java*@packagecom.hoo.server.plugin*@projectOpenfirePlugin*@blog'target='_blank'>http://blog.csdn.net/IBM_hoojo[/code] *@emailhoojo_@126.com*@version1.0*/publicclassSampleServletextendsHttpServlet{privatestaticfinallongserialVersionUID=-5404916983906926869L;@Overridepublicvoidinit()throwsServletException{super.init();}@OverrideprotectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{super.doGet(request,response);response.setContentType("text/plain");PrintWriterout=response.getWriter();System.out.println("请求SampleServletGETMethod");out.print("请求SampleServletGETMethod");out.flush();}@OverrideprotectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{super.doPost(request,response);response.setContentType("text/plain");PrintWriterout=response.getWriter();System.out.println("请求SampleServletGETMethod");out.print("请求SampleServletPOSTMethod");out.flush();}@Overridepublicvoiddestroy(){super.destroy();}}
2、在当前插件根目录添加web目录,在目录下建立WEB-INF目录,添加web-custom.xml文件(文件名应该是固定的)。在里面配置我们的servlet。<?xmlversion="1.0"encoding="ISO-8859-1"?><!DOCTYPEweb-appPUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd"><web-app><servlet><servlet-class>com.hoo.server.plugin.SampleServlet</servlet-class><servlet-name>SampleServlet</servlet-name></servlet><servlet-mapping><servlet-name>SampleServlet</servlet-name><url-pattern>/servlet</url-pattern></servlet-mapping></web-app>
当插件发布后你可以通过用:http://127.0.0.1:9090/plugins/sample/servlet就可以访问到这个servlet了。但我发现我们只需用 http://127.0.0.1:9090/plugins/sample也是可以访问到的。好像openfire会自动找到我们插件目录下的servlet配置。
注意:这里的http://127.0.0.1:9090/plugins/是固定的,至少plugins是固定的。所有的插件都在plugins目录下访问的。如果你想知道为什么,你可以看看openfire源码下的web.xml,具体目录路径在/openfire/src/web/WEB-INF/web.xml。里面有一个PluginServlet是过来plugin的配置的。
3、在web目录下添加jsp文件,文件名是插件名称-自定义名称.jsp(建议规范命名)<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>helloworld:你好openfire</title><metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"><metaname="pageID"content="sample-service"/></head><body><h3>helloworldjsp!!<ahref="/plugins/sample/servlet">SampleServlet</a></h3><divclass="jive-contentBoxHeader">jive-contentBoxHeader</div><divclass="jive-contentBox">jive-contentBox</div><divclass="jive-table"><tablecellpadding="0"cellspacing="0"border="0"width="100%"><thead><tr><th> sss</th><thnowrap>a</th><thnowrap>b</th></tr></thead><tbody><tr><tdalign="center">asdf</td><tdalign="center">asdf</td><tdalign="center">asdf</td></tr><trclass="jive-even"><tdalign="center">asdf</td><tdalign="center">asdf</td><tdalign="center">asdf</td></tr><trclass="jive-odd"><tdalign="center">asdf</td><tdalign="center">asdf</td><tdalign="center">asdf</td></tr></tbody></table></div></body></html>
其中最重要的一点就是:<metaname="pageID"content="sample-service"/>这个pageID。这里的是固定的,后面的content对应我们plugin.xml的内容(等下看看plguin.xml的配置)。然后可以适当的看下里面table的属性和样式,因为很多时候会在jsp中显示内容,且用table布局的。
4、改下之前的plugin.xml的配置,配置组件在openfire管理员控制台的哪个地方显示,以及显示的页面。<?xmlversion="1.0"encoding="UTF-8"?><plugin><!--Mainpluginclass这里是最重要滴,就是你的插件的全路径--><class>com.hoo.server.plugin.SamplePlugin</class><!--Pluginmeta-data--><name>SimplePlugin</name><description>Thisisthemysampleplugin.</description><author>hoojo</author><version>1.0</version><date>28/02/2013</date><url>http://localhost:9090/openfire/plugins.jsp</url><minServerVersion>3.4.1</minServerVersion><licenseType>gpl</licenseType><adminconsole><tabid="tab-server"><sidebarid="sidebar-server-settings"><itemid="sample-service"name="SampleService"url="sample-service.jsp"description="Clickistriggersampleplugin"/></sidebar></tab></adminconsole></plugin>
这里主要就是adminconsole这里面的配置。首先tab-server应该是在管理员控制台页面的服务器菜单中显示;sidebar中的的id配置固定这样写即可;item中的id(sample-service)对应的就是上面的sample-service.jsp的<metaname="pageID"content="sample-service"/>的content内容;item的url对应的是我们写的jsp页面;name是插件的菜单名称。也就是说在管理员控制台页面中的服务器菜单下增加一个sample
service的菜单,打开的页面是sample-service.jsp页面。
5、运行ant脚本,打包发布插件。在上一章节有完整ant脚本的,运行build.xml中的这个openfire-plugins命令即可打包。然后将打好包的sample.jar发布到openfire的plugins目录下即可。
打包后的jar插件目录结构如下:
启动openfire后,在openfire管理员控制台页面的服务器->服务器设置中就可以看到SampleService插件了。
点击SampleServlet就可以看到openfire控制台打印请求的文字信息。
上文转自:http://www.cnblogs.com/hoojo/archive/2013/03/07/2947502.html(尊重原著版权)
5.openfire(2)协议插件开发
昨天说了怎么配置openfire的开发环境。今天写一点openfire的插件开发。我这里做了一个例子主要是针对于XMPP的通信。后边会说一点smack和openfire通信的实现。
注:这里的例子中的注释纯属个人理解。
在openfire的源码里有很多插件。我这里实际就是拷贝了其中的一个插件。重名了一下名字。目录结构如下:
貌似图片传不上来了。如果看不到图,就看看源码中的其他插件的例子。跟其他插件的目录结构是一样一样的。
在这些文件里最重要的就是plugin.xml文件。因为有这个文件openfire才认识这个插件。在这个文件里会配置插件的入口类。我这里简单写了一个plugin.xml.示例如下。
Java代码
<?xmlversion="1.0"encoding="UTF-8"?>
<plugin>
<class>org.yangzc.testplugin.TestPlugin</class>
<name>testPlugin</name>
<description>testPlugindescript</description>
<author>yangzc</author>
<version>1.0.0</version>
<date>20/6/2011</date>
<minServerVersion>3.7.0</minServerVersion>
<databaseKey>testPlugin</databaseKey>
<databaseVersion>0</databaseVersion>
<adminconsole>
</adminconsole>
</plugin>
class部分就是插件的实现类。气的名字什么的就不用说了,根据英文基本可以猜个差不多。
具体TestPlugin的实现。这里也有一个例子:
Java代码
packageorg.yangzc.testplugin;
importjava.io.File;
importorg.dom4j.Element;
importorg.jivesoftware.openfire.IQHandlerInfo;
importorg.jivesoftware.openfire.XMPPServer;
importorg.jivesoftware.openfire.auth.UnauthorizedException;
importorg.jivesoftware.openfire.container.Plugin;
importorg.jivesoftware.openfire.container.PluginManager;
importorg.jivesoftware.openfire.handler.IQHandler;
importorg.xmpp.packet.IQ;
importorg.xmpp.packet.PacketError;
publicclassTestPluginimplementsPlugin{
@Override
publicvoiddestroyPlugin(){
}
@Override
publicvoidinitializePlugin(PluginManagermanager,FilepluginDirectory){
XMPPServerservice=XMPPServer.getInstance();
service.getIQRouter().addHandler(newMyIQHandler());
}
classMyIQHandlerextendsIQHandler{
publicstaticfinalStringmoduleName="testPlugin";
privateIQHandlerInfoinfo;
publicMyIQHandler(){
super(moduleName);
info=newIQHandlerInfo("group","com:im:group");//设置监听的命名空间
}
@Override
publicIQHandlerInfogetInfo(){
returninfo;//取得指定监听命名空间的IQHandeler
}
@Override
publicIQhandleIQ(IQpacket)throwsUnauthorizedException{
IQreply=IQ.createResultIQ(packet);
Elementgroups=packet.getChildElement();//取得客户端发送过来的xml
if(!IQ.Type.get.equals(packet.getType())){
System.out.println("非法的请求类型");
reply.setChildElement(groups.createCopy());
reply.setError(PacketError.Condition.bad_request);
returnreply;
}
//StringuserName=StringUtils.substringBefore(packet.getFrom().toString(),"@");
//GroupManager.getInstance().initElement(groups,userName);
//reply.setChildElement(groups.createCopy());//2
//System.out.println("返回的最终XML"reply.toXML());
returnreply;
}
}
}
在这个实现类中需要实现接口plugin。这个接口包含两个方法。一个是初始化插件,一个是销毁插件动作。
这个例子里在初始化插件的时候通过service添加了一个监听。这里我理解为监听。这个监听可以监听指定命名空间的消息。这个例子里代码很简单。
上文转自:http://yangzc106.iteye.com/blog/1100226尊重原著版权
相关文章推荐
- openfire本地环境搭建和openfire插件开发实例
- openfire插件开发环境搭建
- windows本地sparkstreaming开发环境搭建及简单实例
- 搭建OpenFire服务器Fastpath插件安装及webchat源码开发环境安装
- openfire插件开发环境搭建
- Openfire和Spark本地开发环境搭建记要
- openfire插件开发环境搭建
- 最详细的openfire3.7.1 插件开发环境搭建
- (3)-openfire-MyEclipse插件开发环境搭建
- 最详细的openfire3.7.1 插件开发环境搭建
- JIRA开发(二):插件本地开发环境搭建手册
- 最详细的openfire3.7.1 插件开发环境搭建
- 最详细的openfire3.7.1 插件开发环境搭建
- Hadoop2.x实战:Eclipse本地开发环境搭建与本地运行wordcount实例
- 利用jQuery及其插件搭建Web应用程序前台开发环境
- java开发各种环境搭建及插件安装
- openfire插件开发简单实例
- Eclipse+php插件+Xdebug搭建PHP完美开发/调试环境指南
- Eclipse+php插件+Xdebug搭建PHP完美开发/调试环境指南