1.openfire運行配置
1) 點擊Run\Open Debug Dialog...,出現"Run"窗口
2) 選擇"Java Application",右鍵點擊"New"按鈕.
3) 在"Main"標籤頁,將New_configuration換成openfire.
4) 點擊Project\Browse按鈕,選擇openfire,再點OK.
5) 點擊Main class\Search按鈕,選擇main所在的類ServerStarter再點擊OK, 建議勾選Stop in main.
6) Arguments頁面。在VM arguments中加下內容
-DopenfireHome="${workspace_loc:Openfire}/target/openfire"。
7) 點擊Classpath標籤頁,選擇User Entries ,使得Advanced..按鈕變的可用.點擊Advanced按鈕.在彈出來的Advanced Options窗口,選擇Add Folders,再點OK,在Folder Selection窗口選擇Openfire/src/i18n文件夾,同樣的方式選擇Openfire/src/resources/jar文件夾,點擊OK。
8) 選擇Common標籤頁,勾選Debug,Run前面的框
9) 點擊Apply,再點擊Close
2.編譯
將Openfire/src/i18n文件夾下的openfire_i18n_en.properties文件及Openfire/src/resources/jar文件夾下的admin-sidebar.xml文件拷貝到src\bin目錄下,打開ANT面板,選擇openfire【default】任務執行。
3.運行
運行openfire,控制檯界面出現如下信息:
Openfire 3.6.4 [Mar 15, 2010 8:49:33 AM]
Admin console listening at http://127.0.0.1:9090
在瀏覽器中打開上面顯示的地址,可進行openfire的管理配置。
二、插件開發的目錄結構
插件開發的目錄位於src\plugins\下面。如本例新建camacus文件夾用於開發camacus插件。
先說文件:
changelog.html。這個是插件的修改記錄,是一個網頁而已,開發員可修改。其主要的用途就是在使用WEB瀏覽器(如IE)登錄openfire服務器的時候,顯示的插件的更改記錄。
logo_large.png、logo_small.png。這是2個圖標文件,分別在使用WEB瀏覽器(如IE)登錄openfire服務器的時候顯示插件的圖標。分別是32*32和16*16大小的。
Plugin.xml。這個文件描述了插件重要的一些信息,在配置Openfire插件的時候至關重要。
Readme.html。這個和上面的那個一樣一個網頁而已。開發員可自行修改裏面的內容。
這裏要舉例說明一下plugin.xml的寫法:
<?xml version="1.0" encoding="UTF-8"?>
<plugin>
<class>cama.Camaplugin</class>
<name>Camacus Plugin</name>
<description>The customization plugin for openfire.</description>
<author>CDSoft</author>
<version>1.0.0</version>
<date>10/8/2012</date>
<minServerVersion>3.0.0</minServerVersion>
<adminconsole>
<tab id="tab-server">
<sidebar id="sidebar-server-manager">
<item id="camacus" name="Camacus Plugin"
url="camacus.jsp"
description="The customization plugin for openfire." />
</sidebar>
</tab>
</adminconsole>
</plugin>
主要配置如下:
class。表示插件的類。
Name。表示插件的名稱。
Description。一些描述信息,可以自定義寫。
Author。作者。
Version。插件版本。
Date。發佈日期。
minServerVersion。需要最低的服務器版本。
Adminconsole。這裏是配置在web上訪問Openfire服務器的時候左側邊欄加入的條目。如果不想加入,可以在adminconsole的子項都去掉。我這裏是配置了一個頁面camacus.jsp。這個頁面在src的web目錄下。
三、插件開發的種類
1. 註冊一個插件作爲一個組成部分 。組件接收所有數據包給某一特定子網域。例如,test_component.example.com。因此,數據包發送到joe@test_component.example.com將交付給該組件。請注意,子域定義爲組件無關的DNS條目的子域。所有的XMPP協議路由在套接字級別是使用主服務器域( example.com在上面的例子) ;子域僅用於路由的XMPP協議的服務器。
2. 註冊一個插件作爲IQHandler 。IQHandler處理特別元素的名稱和命名空間的IQ包。下面的代碼片斷演示瞭如何註冊一個IQHandler :
IQHandler myHandler = new MyIQHander();
IQRouter iqRouter = XMPPServer.getInstance().getIQRouter();
iqRouter.addHandler(myHandler);
3. 註冊一個插件作爲PacketInterceptor,接收所有通過該系統的數據包,並有選擇地予以拒絕。例如,一個攔截可以拒絕所有的郵件或載褻瀆國旗他們審查的管理員。
4. 您可以使用Openfire屬性來儲存持續插件設置:JiveGlobals.getProperty(String)和JiveGlobals.setProperty(String,String)的方法。讓您的插件監聽屬性變化,使用org.jivesoftware.util.PropertyEventListener方法。您可以使用PropertyEventDispatcher.addListener ( PropertyEventListener
)方法把您的插件作爲一個監聽者。注意你一定要在您的插件的destroyPlugin()反註冊監聽器。
本篇開發是PacketInterceptor的插件開發小結。從頭到尾都詳細介紹瞭如何開發一個PacketInterceptor插件實現消息的攔截和處理。
四、開發一個PacketInterceptor插件吧。
首先,從接口Plugin開發一個自定義的插件類。類名稱之前的Plugin.xml裏面已經配置了,就是用那個名稱Camaplugin。
然後,實例化Plugin接口的initializePlugin和destroyPlugin兩個方法。其中主要是initializePlugin。後面start()方法是後來啓動webservice,如果不涉及webservice可以去掉這個方法調用代碼如下:
/**
* 插件載入
*/
public void initializePlugin(PluginManager manager, File pluginDirectory)
{
System.out.println("載入Openfire的門戶集成插件包!");
cpi = new CamaPacketInterceptor();
InterceptorManager.getInstance().addInterceptor(cpi);
start();
}
/**
* 插件註銷
*/
public void destroyPlugin()
{
if(cpi != null)
{
InterceptorManager.getInstance().removeInterceptor(cpi);
}
}
其中可以看到CamaPacketInterceptor。這個是我手工編寫的一個類,這個類實現了PacketInterceptor這個接口。這個接口需要實例化的方法只有一個,就是這個包攔截方法。
public void interceptPacket(Packet packet, Session session,
boolean incoming, boolean processed) throws PacketRejectedException
{
if(!processed && packet instanceof Message && incoming)
{//對packet的處理Message進行處理
}
}
這裏packet是instanceof Message的。Packet還可以是其他種類。IQ, Message, Presence, Route。一共這4種。
接下來。如果想要丟棄被攔截的包。則通過拋出PacketRejectedException實現。
五、總結。
插件開發好以後編譯完成就可以運行了。啓動Openfire服務器。然後服務器會自動加載這個開發的插件。也可以通過登錄Web來進行Openfire的插件配置。