I'm adding in "Chat support" to our application. One aspect that I decided on pretty early was using Openfire as the XMPP server on the back-end. It's going to be completely locked down (127.0.0.1) and only our application will be able to talk to it. I got this all working just as I'd like and now I'm tasking myself with scripting the install. After reading some of the documentation (openfire.xml, etc) it seemed straight forward:
- Install RPM
- Copy desired plugins to plugins/ folder
- edit openfire.xml to include all my properties that I'd like bootstrapped in
- Using this style: <prop><sub><sub2>value</sub2></sub></prop>
- edit openfire.xml to have my DB connection information
- edit /etc/sysconfig/openfire for things like "run as" user, etc
This seems very straight forward. The problem is, the vast majority of the properties that I defined in openfire.xml did NOT get bootstrapped into the database. I have no idea why. There's no apparent rhyme or reason. Take this block (pardon the formatting, it's not copying well):
<jive> ... normal stuff, db connection info, etc ... <provider> <auth> <className>org.jivesoftware.openfire.auth.JDBCAuthProvider</className> </auth> <group> <className>org.jivesoftware.openfire.group.JDBCGroupProvider</className> </group> <user> <className>org.jivesoftware.openfire.user.JDBCUserProvider</className> </user> </provider> <admin> <authorizedUsernames>securelink</authorizedUsernames> </admin> <jdbcAuthProvider> <passwordSQL>SELECT MD5(passwd) FROM cfg_user WHERE userid=?</passwordSQL> <passwordType>plain</passwordType> </jdbcAuthProvider> <jdbcGroupProvider> <groupCountSQL>SELECT count(*) FROM cfg_user_group</groupCountSQL> <allGroupsSQL>SELECT name FROM cfg_user_group</allGroupsSQL> <userGroupsSQL>SELECT ug.name FROM cfg_user_group ug JOIN cfg_usergroup_bind ugb ON ugb.groupid=ug.groupid WHERE ugb.userid=?</userGroupsSQL> <descriptionSQL>SELECT description FROM cfg_user_group WHERE name=?</descriptionSQL> <loadMembersSQL>SELECT ugb.userid FROM cfg_user_group ug JOIN cfg_usergroup_bind ugb ON ugb.groupid=ug.groupid WHERE ugb.adminuser=0 AND ug.name=?</loadMembersSQL> <loadAdminsSQL>SELECT ugb.userid FROM cfg_user_group ug JOIN cfg_usergroup_bind ugb ON ugb.groupid=ug.groupid WHERE ugb.adminuser=1 AND ug.name=?</loadAdminsSQL> <useConnectionProvider>true</useConnectionProvider> </jdbcGroupProvider> <jdbcUserProvider> <loadUserSQL>SELECT name,email FROM cfg_user WHERE userid=? and status=0</loadUserSQL> <userCountSQL>SELECT COUNT(*) FROM cfg_user WHERE status=0</userCountSQL> <allUsersSQL>SELECT userid FROM cfg_user WHERE status=0</allUsersSQL> <searchSQL>SELECT userid FROM cfg_user WHERE status=0</searchSQL> <usernameField>userid</usernameField> <nameField>name</nameField> <emailField>email</emailField> <useConnectionProvider>true</useConnectionProvider> </jdbcUserProvider></jive>
Upon the first startup, only some ofthe values are imported into the database while others are left alone:
<provider> <group> <className>org.jivesoftware.openfire.group.JDBCGroupProvider</className> </group> </provider> <jdbcGroupProvider> <groupCountSQL>SELECT count(*) FROM cfg_user_group</groupCountSQL> <allGroupsSQL>SELECT name FROM cfg_user_group</allGroupsSQL> <userGroupsSQL>SELECT ug.name FROM cfg_user_group ug JOIN cfg_usergroup_bind ugb ON ugb.groupid=ug.groupid WHERE ugb.userid=?</userGroupsSQL> <descriptionSQL>SELECT description FROM cfg_user_group WHERE name=?</descriptionSQL> <loadMembersSQL>SELECT ugb.userid FROM cfg_user_group ug JOIN cfg_usergroup_bind ugb ON ugb.groupid=ug.groupid WHERE ugb.adminuser=0 AND ug.name=?</loadMembersSQL> <loadAdminsSQL>SELECT ugb.userid FROM cfg_user_group ug JOIN cfg_usergroup_bind ugb ON ugb.groupid=ug.groupid WHERE ugb.adminuser=1 AND ug.name=?</loadAdminsSQL> <useConnectionProvider>true</useConnectionProvider> </jdbcGroupProvider> <jdbcUserProvider> <useConnectionProvider>true</useConnectionProvider> </jdbcUserProvider>
It's almost like the .xml values have a "well, maybe we'll bootstrap" configuration setting. How is a user supposed to handle this? Where can I figure out which properties can be bootstrapped and which can not be? Should I just simply do a .sql dump instead of attempting to use the openfire.xml injection? (PS, I've tried this and it doesn't appear this work - again, no rhyme or reason - values were taken from a working system)
Any help or direction is appreciated. Thanks in advance.