I have written a plugin to add/remove contacts via a web-interface. The plugin uses RosterItemProvider to do the add/remove part.
What I am seeing is that although the updates make it to the database fine - if a IM client logs in (e.g. via Spark) - their contact list hasn’'t been updated. Only after I restart openfire do the updates flow through to the client.
I am thinking this is due to the roster cache - but logic would tell me that if I am going via RosterItemProvider (and not directly to the database) that both the cache and db would get updated.