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: value
- 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.