The new SystemProperty implementation, that is used to better structure the properties that are used, does not play well with plugins. Plugins tend to be unloaded/reloaded/updated, which causes SystemProperties to be 're-initialized'. This leads to exceptions like these:
Note; the method `SystemProperty.removePropertiesForPlugin(final String plugin)` is present for this purpose; it should be called when the plugin is unloaded in the destroyPlugin() method of the plugin.
D'oh! I didn't know that existed
Did that resolve your problem? I think it should have done. If so, not sure if this ticket is valid?
The intent of the exception was to stop two different parts of the code base trying to accidentally instantiate the same property for two different purposes - i.e. it's necessary to reach out to the specific SystemProperty singleton.
If people/you aren't keen on this behaviour, I"m happy to change it!
So, https://github.com/igniterealtime/Openfire/pull/1550 now unloads a plugins properties with the plugin. Based on a string match of the plugin name (from plugin.xml) and the "plugin" property of a SystemProperty.