假如咱們有一個網站而且已經有了上百萬的註冊用戶,如今要集成一個IM即時聊天功能,假如咱們使用開源的xmpp服務器,都會自動生成默認的數據庫以及表結構,用已有數據庫的用戶表去初始化IM服務器的用戶表,不只麻煩並且涉及到同步問題。因此xmpp服務器都提供了集成數據庫的功能。咱們能夠經過配置修改,把登陸認證,用戶查詢,用戶分組等信息,從IM服務器的默認數據庫剝離出來。tigase目前只支持mysql,pgsql,derby三種數據庫集成,openfire支持的比較多。本文講的是openfire集成oracle。
html
官方文檔:Custom Database Integration Guidemysql
<jdbcProvider> <driver>com.mysql.jdbc.Driver</driver> <connectionString>jdbc:mysql://localhost/dbname?user=username&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表 添加組的共享信息
好比集成數據庫有個分組 叫作公司,顯示在客戶端,用戶的分組名稱同事
而且只有組內的成員才能看見組 只有這三條記錄存在 集成數據庫的組信息 才能看到
按照配置,用戶認證,用戶信息,用戶分組能夠經過配置的數據庫鏈接和查詢sql,使用已有的數據庫信息
IM的相關邏輯和程序都不用發生變化,這也正好知足咱們的項目須要 可是openfire的性能可能有點問題
因此在實際應用中,要綜合考慮,選擇適用的一個xmpp服務器