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