openfire集成已有數據庫

0問題場景

    假如咱們有一個網站而且已經有了上百萬的註冊用戶,如今要集成一個IM即時聊天功能,假如咱們使用開源的xmpp服務器,都會自動生成默認的數據庫以及表結構,用已有數據庫的用戶表去初始化IM服務器的用戶表,不只麻煩並且涉及到同步問題。因此xmpp服務器都提供了集成數據庫的功能。咱們能夠經過配置修改,把登陸認證,用戶查詢,用戶分組等信息,從IM服務器的默認數據庫剝離出來。tigase目前只支持mysql,pgsql,derby三種數據庫集成,openfire支持的比較多。本文講的是openfire集成oracle。
html

1官方文檔

官方文檔:Custom Database Integration Guidemysql

2問題解決

問題一:

<jdbcProvider>
    <driver>com.mysql.jdbc.Driver</driver>
    <connectionString>jdbc:mysql://localhost/dbname?user=username&amp;password=secret</connectionString>
  </jdbcProvider>

文檔中只提供了mysql的外接數據庫鏈接方式,若是是oracle的數據庫就要注意了,按照上面的那種拼接時錯誤的sql

Oracle的connectionString的字符串應該是 jdbc:oracle:thin:username/password@ip:1521:dbname數據庫

driver:oracle.jdbc.driver.OracleDriver 還有須要把oracle鏈接的jar放在lib目錄下  好比ojdbc14.jar(用於oracle9)服務器

問題二:

<provider>
    <auth>
      <className>org.jivesoftware.openfire.auth.JDBCAuthProvider</className>
    </auth>
    <user>
      <className>org.jivesoftware.openfire.user.JDBCUserProvider</className>
    </user>
  </provider>
  <jdbcAuthProvider>
     <passwordSQL>SELECT password FROM user_account WHERE username=?</passwordSQL>
     <passwordType>plain</passwordType>
  </jdbcAuthProvider>
  <jdbcUserProvider>
     <loadUserSQL>SELECT name,email FROM myUser WHERE username=?</loadUserSQL>
     <userCountSQL>SELECT COUNT(*) FROM myUser</userCountSQL>
     <allUsersSQL>SELECT username FROM myUser</allUsersSQL>
     <searchSQL>SELECT username FROM myUser WHERE</searchSQL>
     <usernameField>username</usernameField>
     <nameField>name</nameField>
     <emailField>email</emailField>
  </jdbcUserProvider>

第一次配置時,只配置了auth認證,以及auth查詢的sql(<auth><jdbcAuthProvider>)oracle

結果一直登陸不上   後來才知道auth認證和user查詢必須同時修改ide

文檔中有寫If you enable user integration you must also enable authentication integration (see above).性能

若是使用user的集成,必須使用auth認證,但是沒說auth認證必須也要配置user查詢網站

問題三:

 conf/openfire.xml 下的配置,實際上是在admin管理頁的系統屬性中也能夠配置ui

最後做用於默認數據庫的opproperty表

在xml中修改了auth.JDBCAuthProvider和 user.JDBCUserProvider  可是重啓後沒有起做用

在系統屬性中仍是DefaultAuthProvider和DefaultUserProvider 須要在系統屬性頁再進行修改

參考博文:http://blog.csdn.net/duotiger/article/details/24307607

問題四:

 <admin>
        ...
        <authorizedUsernames>joe, jane</authorizedUsernames>
      </admin>

 文檔中For example, to let the usersnames "joe" and "jane" login to the admin console:

 這裏實際上是配置了兩個管理員username,這兩個帳號必須在本地數據庫的user表中存在

問題五:

group配置成功後,能夠在後臺 用戶/組 查詢中看見組,可是具體某個組的詳情頁卻沒法打開

同時客戶端用戶登陸後也沒法查看到對應組的信息

經過查詢比對後發現,組好比開啓共享屬性,用戶才能再客戶端查看

集成的用戶組,默認不是共享的,因此沒法看到,這裏應該是openfire的一個bug

須要ofgroupprop表 添加組的共享信息 

好比集成數據庫有個分組 叫作公司,顯示在客戶端,用戶的分組名稱同事

而且只有組內的成員才能看見組  只有這三條記錄存在 集成數據庫的組信息 才能看到

3總結

按照配置,用戶認證,用戶信息,用戶分組能夠經過配置的數據庫鏈接和查詢sql,使用已有的數據庫信息

IM的相關邏輯和程序都不用發生變化,這也正好知足咱們的項目須要  可是openfire的性能可能有點問題

因此在實際應用中,要綜合考慮,選擇適用的一個xmpp服務器

相關文章
相關標籤/搜索