基于openfire源码开发插件
生活随笔
收集整理的這篇文章主要介紹了
基于openfire源码开发插件
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
【0】README
1)本文旨在 簡述如何 基于openfire源碼開發(fā)插件, 如何導(dǎo)入 openfire源碼到 eclipse,參見?http://blog.csdn.net/pacosonswjtu/article/details/51871622
2)also , you can checkout ?source code of the plugin from ?https://github.com/pacosonTang/MultimediaMessagingPlatform/tree/master/plugin_cluster/plugindemo/src
【1】開發(fā)openfire插件步驟 step1)建立插件目錄樹(插件名稱==plugindemo)
補(bǔ)充1)各個(gè)目錄樹的目錄項(xiàng)的意義:
補(bǔ)充2)目錄樹的縮略圖如下
step2)添加 java 根目錄到 source folder
step3)開發(fā)openfire插件,實(shí)現(xiàn) Plugin接口
package com.myplugin;import java.io.File;import org.jivesoftware.openfire.container.Plugin; import org.jivesoftware.openfire.container.PluginManager; import org.jivesoftware.openfire.interceptor.InterceptorManager; import org.jivesoftware.openfire.interceptor.PacketInterceptor; import org.jivesoftware.openfire.interceptor.PacketRejectedException; import org.jivesoftware.openfire.session.Session; import org.xmpp.packet.Packet;// 如果需要攔截消息,就必須實(shí)現(xiàn) PacketInterceptor public class PluginDemo implements PacketInterceptor, Plugin{private static PluginManager pluginManager;private InterceptorManager interceptorManager;public PluginDemo() {interceptorManager = InterceptorManager.getInstance();}@Overridepublic void interceptPacket(Packet packet, Session session,boolean incoming, boolean processed) throws PacketRejectedException {System.out.println("攔截消息以進(jìn)行邏輯處理" + "from =" + packet.getFrom() + ", to = " + packet.getTo() + ", incoming = " + incoming + ", proccessed = " + processed);System.out.println("\n=========================");}@Overridepublic void destroyPlugin() {interceptorManager.removeInterceptor(this);System.out.println("PluginDemo Plugin has been destroyed.");}@Overridepublic void initializePlugin(PluginManager manager, File pluginDirectory) {interceptorManager.addInterceptor(this);pluginManager = manager; System.out.println("PluginDemo Plugin has been installed successfully.");} } step4)可選的,如果你覺得有必要的話,還可以在插件中嵌入 servlet;
package com.myplugin.manager;import java.io.IOException; import java.io.PrintWriter;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class PluginDemoServlet extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/plain");PrintWriter out = response.getWriter();System.out.println("console info: 請求SampleServlet GET Method");out.println("GET Method: these info are transmitted into client.");out.flush();}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// super.doPost(request, response); // should be commented outresponse.setContentType("text/plain");PrintWriter out = response.getWriter();System.out.println("請求 PluginDemoServlet POST Method");out.print("請求 PluginDemoServlet POST Method");out.flush();}@Overridepublic void init() throws ServletException {System.out.println("servlet init successfully.");} } step4)補(bǔ)充: 添加servlet映射
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app><servlet> <servlet-name>SampleServlet</servlet-name> <servlet-class>com.myplugin.manager.PluginDemoServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>SampleServlet</servlet-name> <url-pattern>/myservlet</url-pattern> </servlet-mapping> </web-app> step5)可選的,你也可以開發(fā)一些jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><title>plugin demo page.</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta name="pageID" content="sample-service"/> <!-- 這個(gè)是必須的,同 plugin.xml 中引用的標(biāo)識符必須一樣. --></head><body><h3>hello world. <a href="<c:url value="/plugins/plugindemo/myservlet"/>">plugin demo servlet</a></h3><div class="jive-contentBoxHeader">jive-contentBoxHeader</div><div class="jive-contentBox">jive-contentBox</div><div class="jive-table"><table cellpadding="0" cellspacing="0" border="0" width="100%"><thead><tr><th>name</th><th>age</th><th>stuid</th></tr></thead><tbody><tr class="jive-odd"><td align="center">zhangsan</td><td align="center">35</td><td align="center">2014210541</td></tr><tr class="jive-even"><td align="center">lisi</td><td align="center">67</td><td align="center">2014110321</td></tr><tr class="jive-odd"><td align="center">wangwu</td><td align="center">12</td><td align="center">2015117891</td></tr></tbody></table></div></body> </html> step5)補(bǔ)充:在jsp中 請求 該 servlet <h3>hello world. <a href="<c:url value="/plugins/plugindemo/myservlet"/>">plugin demo servlet</a></h3> step6)編寫插件配置文件 plugin.xml <?xml version="1.0" encoding="UTF-8"?> <plugin><!-- Main plugin class 這里是最重要滴,就是你的插件的全路徑--><class>com.myplugin.PluginDemo</class><!-- Plugin meta-data --><name>plugindemo</name><description>This is the my plugindemo.</description><author>pacoson</author><version>1.0</version><date>29/07/2016</date> <minServerVersion>4.0.2</minServerVersion><licenseType>gpl</licenseType><adminconsole><tab id="tab-server"><sidebar id="sidebar-server-settings"><item id="plugindemo-service" name="my plugin demo" url="plugindemo-service.jsp"description="plugindemo-service plugin." /></sidebar></tab> </adminconsole> </plugin> 【2】編譯插件并打包為jar copy到 openfire 插件目錄下 1)編譯打包后的效果
2)通過ant 編譯插件的步驟(其實(shí)很簡單,因?yàn)?openfire 自帶 編譯模板,如果要自己寫的話,那就有點(diǎn)復(fù)雜了) step1)根目錄\build.properties, 填寫 插件名稱 到 合適位置
step2)右鍵build.xml -> run as -> ant build(有兩個(gè)ant build,選擇第2個(gè)),運(yùn)行 ant 腳本 編譯即可,編譯后的結(jié)果 在 本章節(jié)已經(jīng)說明了;
【3】查看訪問效果
【1】開發(fā)openfire插件步驟 step1)建立插件目錄樹(插件名稱==plugindemo)
補(bǔ)充1)各個(gè)目錄樹的目錄項(xiàng)的意義:
補(bǔ)充2)目錄樹的縮略圖如下
step2)添加 java 根目錄到 source folder
step3)開發(fā)openfire插件,實(shí)現(xiàn) Plugin接口
package com.myplugin;import java.io.File;import org.jivesoftware.openfire.container.Plugin; import org.jivesoftware.openfire.container.PluginManager; import org.jivesoftware.openfire.interceptor.InterceptorManager; import org.jivesoftware.openfire.interceptor.PacketInterceptor; import org.jivesoftware.openfire.interceptor.PacketRejectedException; import org.jivesoftware.openfire.session.Session; import org.xmpp.packet.Packet;// 如果需要攔截消息,就必須實(shí)現(xiàn) PacketInterceptor public class PluginDemo implements PacketInterceptor, Plugin{private static PluginManager pluginManager;private InterceptorManager interceptorManager;public PluginDemo() {interceptorManager = InterceptorManager.getInstance();}@Overridepublic void interceptPacket(Packet packet, Session session,boolean incoming, boolean processed) throws PacketRejectedException {System.out.println("攔截消息以進(jìn)行邏輯處理" + "from =" + packet.getFrom() + ", to = " + packet.getTo() + ", incoming = " + incoming + ", proccessed = " + processed);System.out.println("\n=========================");}@Overridepublic void destroyPlugin() {interceptorManager.removeInterceptor(this);System.out.println("PluginDemo Plugin has been destroyed.");}@Overridepublic void initializePlugin(PluginManager manager, File pluginDirectory) {interceptorManager.addInterceptor(this);pluginManager = manager; System.out.println("PluginDemo Plugin has been installed successfully.");} } step4)可選的,如果你覺得有必要的話,還可以在插件中嵌入 servlet;
package com.myplugin.manager;import java.io.IOException; import java.io.PrintWriter;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class PluginDemoServlet extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/plain");PrintWriter out = response.getWriter();System.out.println("console info: 請求SampleServlet GET Method");out.println("GET Method: these info are transmitted into client.");out.flush();}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// super.doPost(request, response); // should be commented outresponse.setContentType("text/plain");PrintWriter out = response.getWriter();System.out.println("請求 PluginDemoServlet POST Method");out.print("請求 PluginDemoServlet POST Method");out.flush();}@Overridepublic void init() throws ServletException {System.out.println("servlet init successfully.");} } step4)補(bǔ)充: 添加servlet映射
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app><servlet> <servlet-name>SampleServlet</servlet-name> <servlet-class>com.myplugin.manager.PluginDemoServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>SampleServlet</servlet-name> <url-pattern>/myservlet</url-pattern> </servlet-mapping> </web-app> step5)可選的,你也可以開發(fā)一些jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><title>plugin demo page.</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta name="pageID" content="sample-service"/> <!-- 這個(gè)是必須的,同 plugin.xml 中引用的標(biāo)識符必須一樣. --></head><body><h3>hello world. <a href="<c:url value="/plugins/plugindemo/myservlet"/>">plugin demo servlet</a></h3><div class="jive-contentBoxHeader">jive-contentBoxHeader</div><div class="jive-contentBox">jive-contentBox</div><div class="jive-table"><table cellpadding="0" cellspacing="0" border="0" width="100%"><thead><tr><th>name</th><th>age</th><th>stuid</th></tr></thead><tbody><tr class="jive-odd"><td align="center">zhangsan</td><td align="center">35</td><td align="center">2014210541</td></tr><tr class="jive-even"><td align="center">lisi</td><td align="center">67</td><td align="center">2014110321</td></tr><tr class="jive-odd"><td align="center">wangwu</td><td align="center">12</td><td align="center">2015117891</td></tr></tbody></table></div></body> </html> step5)補(bǔ)充:在jsp中 請求 該 servlet <h3>hello world. <a href="<c:url value="/plugins/plugindemo/myservlet"/>">plugin demo servlet</a></h3> step6)編寫插件配置文件 plugin.xml <?xml version="1.0" encoding="UTF-8"?> <plugin><!-- Main plugin class 這里是最重要滴,就是你的插件的全路徑--><class>com.myplugin.PluginDemo</class><!-- Plugin meta-data --><name>plugindemo</name><description>This is the my plugindemo.</description><author>pacoson</author><version>1.0</version><date>29/07/2016</date> <minServerVersion>4.0.2</minServerVersion><licenseType>gpl</licenseType><adminconsole><tab id="tab-server"><sidebar id="sidebar-server-settings"><item id="plugindemo-service" name="my plugin demo" url="plugindemo-service.jsp"description="plugindemo-service plugin." /></sidebar></tab> </adminconsole> </plugin> 【2】編譯插件并打包為jar copy到 openfire 插件目錄下 1)編譯打包后的效果
2)通過ant 編譯插件的步驟(其實(shí)很簡單,因?yàn)?openfire 自帶 編譯模板,如果要自己寫的話,那就有點(diǎn)復(fù)雜了) step1)根目錄\build.properties, 填寫 插件名稱 到 合適位置
step2)右鍵build.xml -> run as -> ant build(有兩個(gè)ant build,選擇第2個(gè)),運(yùn)行 ant 腳本 編譯即可,編譯后的結(jié)果 在 本章節(jié)已經(jīng)說明了;
【3】查看訪問效果
總結(jié)
以上是生活随笔為你收集整理的基于openfire源码开发插件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑防窥膜帖(电脑防窥膜效果)
- 下一篇: 如何在家免费制作好看的证件照如何在家免费