openfire 及其原始碼的開發和部署
一、openfire的Eclipse環境搭配
2、Eclipse環境(包括JavaSE),Openfire的原始碼包(例如:openfire_src_3_3_2.zip,可到jivesoftware官方網站下載),Mysql資料庫V5以上(當然可以用其他資料庫,但在此例中選用Mysql作為Openfire的後臺資料庫)。
3、將openfire_src_3_3_2.zip的原始碼包解壓到一個目錄裡(包含四個子資料夾)
4、 其中有個 src目錄:這個src資料夾就是我們想要的Openfire原始碼了
5、在Eclipse中將此Java資料夾當成原始碼資料夾新建工程,建立新工程後觀察Openfire所import的包,發現Openfire用了許多開源工具,而這些庫都在上文提到的Build目錄的lib目錄下(也可以到網上下載),將Openfire用到的庫都新增到這個新建工程的Referenced Libraries中。或者如果這樣一個一個新增比較麻煩的話還有一個方法就是從你安裝好的Openfire伺服器目錄下的lib目錄中(例如:”D:/Program Files/Openfire/lib”或 “/usr/local/openfire/lib”)找到openfire.jar,開啟後將裡面的org/jivesoftware刪除,重新打包成jar並新增到這個新建工程的Referenced Libraries中,這樣省去了很多工作。
6、openfire的起始類為org.jivesoftware.openfire.starter.ServerStarter.java 但是直接執行此類卻有問題,因為此類是針對Openfire安裝包而設計的,此類的功能是將所用到的Jar檔案解壓並將class檔案載入到虛擬機器中,而我們要用的卻是原始碼中我們自己編譯好的class檔案,所以我們需要一個新的啟動類,一個簡單的實現如下(當然最好是與ServerStarter.java中的方法一樣,用自定義的ClassLoader來將XMPPServer.class載入到虛擬機器中):
package org.jivesoftware.openfire.starter;
import org.jivesoftware.openfire.XMPPServer;
public class StandaloneStarter {
public static void main(String[] args) {
XMPPServer server = new XMPPServer();
}}
7、還有一個關鍵的一步是Openfire的Home設定
在XMPPServer類中有一個locateOpenfire方法,這個方法就是設定openfireHome屬性。
-
具體修改如下:
// and just look for home in a standard sub-dir location and verify
// by looking for the config file
if (openfireHome == null) {
try {
//修改的是下面的程式碼,將".."替換為其他路徑了
openfireHome = verifyHome("C://Program Files//Openfire", jiveConfigName).getCanonicalFile();
}
catch (FileNotFoundException fe) {
// Ignore.
}
catch (IOException ie) {
// Ignore.
}
}這部分預設是找當前路徑,你可以修改它為你安裝Openfire的路徑,這樣問題就解決了
二、openfire的svn原始碼下載
1、下載路徑:
2、結點類包
起點 org.jivesoftware.openfire.starter.ServerStarter
伺服器 org.jivesoftware.openfire.XMPPServer
使用者驗證包 裡面有AuthProvier介面、幾個實現類。。。
org.jivesoftware.openfire.auth
使用者 org.jivesoftware.openfire.user
組 org.jivesoftware.openfire.group
好友列表org.jivesoftware.openfire.roster
開發外掛會用到的介面和包
org.jivesoftware.openfire.container.Plugins
org.xmpp.component.Component
org.jivesoftware.openfire.event
org.jivesoftware.openfire.handler
攔截器
org.jivesoftware.openfire.interceptor、
三、openfire的Eclipse詳細配置和編譯
1. 從現有資源新建專案
(1) File->New->Java Project
(2) 在彈出的New Java Project對話方塊中輸入工程名:openfire_src
(3) 選擇Create project from existing source項,單擊Browe,找到之前的解壓目錄 openfire_src
2. 編譯工程
openfire是用ant構建的,所以要先設定使得eclipse中每次編譯都使用內建的ant工具,保證編譯的正確執行。同時,要在Eclipse中設定為使用JDK作為JVM,如果使用JRE作為JVM,編譯就會失敗。
因為openfire在Windows下是使用install4j打包成.exe格式的安裝檔案的,所以需要安裝install4j。否則,在使用ant 進行編譯的時候,在ant檢視中可能會出現警告如下資訊:taskdef class com.install4j.install4jtask cannot found。這主要是要安裝用來打包Java應用程式的install4j.exe程式,而且將要安裝到其預設的安裝路徑C:/Program Files/install4j下。
(1) 在eclipse中點選Window->Show View->Ant,開啟Ant視窗
(2) 在Ant 檢視中,單擊右鍵,在彈出的快捷選單中選擇Add Buildfiles..
(3) 在彈出的對話方塊中,展開openfire_src/build資料夾,選擇build目錄下的build.xml,點選OK
(4) 在Ant檢視中, 展開Openfire XMPP Server,雙擊 openfire_src(default)編譯工程
(4) 如果在Console檢視中顯示“BUILD SUCCESSFUL”就表示編譯成功
3. 建立專案Builder
(1) 在eclipse的選單欄中,選擇Run->Open Run Dialog...,在彈出的對話方塊左側的樹形結構中選擇Java Application,單擊右鍵,選擇New建立啟動配置
(2) 在Run視窗的Main選項卡中, 修改Name文字框中的值,改成包含要啟動的類的工程名openfire_src
(3) 在Run視窗的Main選項卡中,點Browse按鈕,選擇openfire_src
(4) 在Run視窗的Main選項卡中,點Search按鈕,選擇Main class為org.jivesoftware.openfire.starter.ServerStarter,單擊Apply按鈕。(這是 openfire的啟動類)
(5) 點選進入Arguments選項卡,在VM arguments文字框中輸入
-DopenfireHome="${workspace_loc:openfire}/target/openfire"
單擊Apply按鈕。
這個是用於eclipse執行java命令時傳遞的引數,這樣openfire程式可以通過 System.getProperty(“openfireHome”)得到openfire的本地位置。
(6) 點選進入Classpath選項卡,選中User Entries,這樣Advanced...就處於可用狀態;點選Advanced...按鈕,在Advanced Options頁面,選擇Add Folders, 單擊OK。(預設情況下,已經將工程openfire新增到了這裡,而不需要進行該項操作,如果有多個工程的時候才需要執行該項操作。)選擇 openfire_src/src/i18n, 點OK按鈕將這個資料夾加入到Classpath選項卡中;同樣的方式把openfire_src/src/resources/jar目錄也加到
Classpath選項卡中。
(7) 在Common選項卡中,勾選Run複選框,單擊Apply按鈕。
設定完畢,這樣以後在run這個工程的時候就會按照正確的配置進行了,debug的設定和run的設定類似,不用多說。
4. 執行並測試編譯結果(openfire伺服器)
(1) 在Eclipse選單中,單擊Run->Run(或快捷方式Ctrl+F11),在Console試圖中出現如下所示的資訊。
(2) 在Web瀏覽器中,輸入http://127.0.0.1:9090/,如果可以出現配置的openfire的頁面,就表示openfire編譯、執行成功。
5. 自己定製openfire伺服器時,在Eclipse對openfire原始碼進行部署
openfire 的起始類為org.jivesoftware.openfire.starter.ServerStarter.java,但是直接執行此類卻有問題,因為此類是針對Openfire安裝包而設計的,此類的功能是將所用到的JAR檔案解壓並將class檔案載入到虛擬機器中,而我們要用的卻是原始碼中我們自己編譯好的class檔案。所以,我們需要一個新的啟動類。
package org.jivesoftware.openfire.starter;
import org.jivesoftware.openfire.XMPPServer;
public class StandaloneStarter {
public static void main(String[] args) {
XMPPServer server = new XMPPServer();
}
}
這樣程式就可以跑起來了,最後的問題就是配置檔案路徑的問題。
a) 在StandaloneStarter類的啟動選項(VM arguments)中加入-DopenfireHome="${workspace_loc:openfire}/target/openfire",具體方法參見上文。
b) 點選進入Classpath選項卡,選中User Entries,這樣Advanced...就處於可用狀態;點選Advanced...按鈕,在Advanced Options頁面,選擇Add Folders, 單擊OK。(預設情況下,已經將工程openfire新增到了這裡,而不需要進行該項操作,如果有多個工程的時候才需要執行該項操作。)選擇 openfire_src/src/i18n, 點OK按鈕將這個資料夾加入到Classpath選項卡中;同樣的方式把openfire_src/src/resources/jar目錄也加到
Classpath選項卡中。
-------------------------------------------------------------------
另:
使用Eclipse的版本控制外掛SVN獲取(檢出為),具體步驟為:
1. 在eclipse中,選擇Windows->Open Perspective->Other
2. 在彈出的視窗中,選擇SVN Repository Exploring, 然後點OK
3. 在SVN Repositories 檢視中單擊右鍵,選擇 New->Repository Location...
4. 在彈出的New Repository Location對話方塊的輸入URL文字框中輸入:http://svn.igniterealtime.org/svn/repos/openfire /trunk,然後,單擊Finish.。你將會看到頁面中出現URL地址。
5. 展開URL地址與openfire樹形結構
6. 在trunk上點選右鍵,選擇Check Out(檢出為),即可將原始碼儲存到您所指定的目錄下。
7. 用Create project from existing source新建工程,注意工程名要用openfire。
如果您是做二次開發,為了定製自己的伺服器端,就可以採用這樣方法:
1. 新建工程:File->New->Project->Java Project,單擊Next,在Project name文字框中輸入工程名:openfire,單擊Finish
2. 解壓後得到的openfire_src/src目錄下所有內容複製到新建的工程目錄workspace/openfire下
3. 在Package Explorer檢視中,右擊openfire工程,選擇Properties,在彈出的對話方塊中選擇Libraries->Add JARs..,把openfire_src/build/lib目錄下的*.jar類庫全部新增進來;選擇Source標籤頁,Add Folder..,選中src/java目錄前的複選框,點選OK按鈕。(在Eclipse中將此Java資料夾當成原始碼資料夾新建工程,建立新工程後觀察Openfire所import的包,發現Openfire用了許多開源工具,而這些庫都在上文提到的Build目錄的lib
目錄下,將Openfire用到的庫都新增到這個新建工程的Referenced Libraries中。或者如果這樣一個一個新增比較麻煩的話還有一個方法就是從你安裝好的Openfire伺服器目錄下的lib目錄中(例如:"C:/Program Files/Openfire/lib"或"/usr/local/openfire/lib")找到openfire.jar,開啟後將裡面的org /jivesoftware刪除,重新打包成jar並新增到這個新建工程的Referenced Libraries中,這樣就可以省去了很多類似的工作。)但是這樣新建的openfire專案沒有打包部署,需要開發者自己完成相應的工作。
注意:新建工程之後,可能會出現一些警告資訊,下面對此予以說明:對於警告資訊,是沒有關係的。因為這些警告資訊是使用1.5以上版本JDK時候才出現的,使用JDK1.4是不會出現這些警告資訊的。因為這些程式碼中的有些是使用JDK 1.4編寫的,而JDK1.4不支援泛型,而JDK 1.5和JDK1.6是支援泛型的。這些警告資訊主要是提示將這些非泛型的程式碼修改為更加高階的方法——泛型,所以這些警告資訊是不影響程式碼結果的。如果需要修改為泛型也是可以,使用泛型來處理相關的集合類。
四、Java-monitor可以監控Openfire XMPP伺服器了!
Java-monitor是一個自由的中央式監控工具, 可以用來線上監控諸如Tomcat, JBoss, Jetty, SpringSource
DM Server等J2EE伺服器, 它通過在應用伺服器的JVM上安裝Probe來獲取統計資訊,而使用者可在web browser甚至iPhone上瀏覽這些資訊. 現在, 它又將Openfire的XMPP伺服器納入服務物件.
Jive Software的Openfire是一個GPL的實時通訊軟體, 使用唯一被廣泛採納的開放即時訊息協議--XMPP(又稱Jabber).使用Java-monitor,你可以看到客戶執行緒池和資料庫連線池的負荷,以及訊息包的數量,
當然, 如果伺服器癱瘓了, 你會收到一份郵件.
更多: Java-monitor live demo.
五、參考文獻:
9、