openfire 整合好友關系列表


  openfire是一個擴張性比較好的xmpp服務器框架,最近公司准備用這個做移動端im,然后就研究了下用戶數據庫的整合...

用戶整合是比較簡單的...網上很多資料...在系統屬性里添加個用戶數據庫的連接,再加幾個基本的查詢用戶的sql,定義一些用戶字段的映射,基本就ok了,不用寫寫什么代碼..

然后就是整合好友列表,一般不太會有這個需求,因為差不多只用這個當im,好友列表都走自己的接口,但是像spark這樣的客戶端是走的openfire自帶的好友關系,所以要讓這個里邊顯示自己用戶系統中的好友列表的話,就需要整合好友列表..然后去網上找這個..沒找到有關資料..

 

接下來就用jd看了下openfire反編譯后的源碼...

包的結構和清晰,按模塊分包.

發現好友關系模塊(包名org.jivesoftware.openfire.roster)里邊值有一個DefaultRosterItemProvider 並沒有像用戶模塊一樣有JDBCProvider的擴展..

所有我們就得自己來實現這個東西了...

但是怎么讓openfire用我們自己實現的模塊有事個問題...開始想過自己實現一個直接覆蓋jar包里的class,但始終感覺不妥..

然后就找它的根....

發現在 RosterManager 這個類里邊實例化 RosterItemProvider 的時候會在系統屬性里找 provider.roster.className 這個屬性....驚喜中~~~

如果有這個屬性他會把這個屬性所指向的類作為好友管理類.. 你只用實現 RosterItemProvider 接口

 1 package org.jivesoftware.openfire.roster;
 2 
 3 import java.util.Iterator;
 4 import org.jivesoftware.openfire.user.UserAlreadyExistsException;
 5 import org.jivesoftware.openfire.user.UserNotFoundException;
 6 
 7 public abstract interface RosterItemProvider
 8 {
 9   public abstract RosterItem createItem(String paramString, RosterItem paramRosterItem)
10     throws UserAlreadyExistsException;
11 
12   public abstract void updateItem(String paramString, RosterItem paramRosterItem)
13     throws UserNotFoundException;
14 
15   public abstract void deleteItem(String paramString, long paramLong);
16 
17   public abstract Iterator<String> getUsernames(String paramString);
18 
19   public abstract int getItemCount(String paramString);
20 
21   public abstract Iterator<RosterItem> getItems(String paramString);
22 }

然后更加自己的用戶系統結構給查接口中需要的數據(具體可以參考 DefaultRosterItemProvider 的實現)

 

openfire好友關系表字段解釋可參考 http://hi.baidu.com/wangguoqingsll/item/77cec2f1fce2bc7d3d198b81

下邊是我用的幾個字段的值(寫死了,因為我們是sns用戶系統,單向好友關系)

//substate 2
//askstatus -1
//recvstatus -1

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM