Hi,
Was wondering how to catch the uninstall event so that the plugin could clean up after itself (like remove plugin specific properties etc...)
Had a brief look around but didn't find anything, so appologies if this has already been dealt with elsewhere.
Cheers
Community moderators have prevented the ability to post new answers.
Here's a utility class we use for this purpose:
public final class StopListener {
private final PluginEventManager myPluginEventManager;
private final String myModuleKey;
private final Runnable myStop;
private StopListener(PluginEventManager pluginEventManager, String moduleKey, Runnable stop) {
myPluginEventManager = pluginEventManager;
myModuleKey = moduleKey;
myStop = stop;
}
public static void install(PluginEventManager pluginEventManager, String moduleKey, Runnable stop) {
pluginEventManager.register(new StopListener(pluginEventManager, moduleKey, stop));
}
public void stop() {
myPluginEventManager.unregister(this);
if (myStop != null) myStop.run();
}
@PluginEventListener
public void onShutdown(PluginFrameworkShutdownEvent event) {
stop();
}
@PluginEventListener
public void onPluginDisabled(PluginDisabledEvent event) {
if (event == null) return;
stopIfMe(event.getPlugin());
}
@PluginEventListener
public void onFrameworkRestarting(PluginFrameworkWarmRestartingEvent event) {
stop();
}
@PluginEventListener
public void onModuleDisabled(PluginModuleDisabledEvent event) {
if (event == null) return;
ModuleDescriptor module = event.getModule();
if (module == null) return;
Plugin plugin = module.getPlugin();
if (plugin == null) return;
if (Util.STRUCTURE_PLUGIN_KEY.equals(plugin.getKey()) && myModuleKey.equals(module.getKey())) {
stop();
}
}
@PluginEventListener
public void onPluginUninstalledEvent(PluginUninstalledEvent event) {
if (event == null) return;
stopIfMe(event.getPlugin());
}
@PluginEventListener
public void onPluginRefreshedEvent(PluginRefreshedEvent event) {
if (event == null) return;
stopIfMe(event.getPlugin());
}
protected void stopIfMe(Plugin plugin) {
if (plugin == null) return;
if (Util.STRUCTURE_PLUGIN_KEY.equals(plugin.getKey())) {
stop();
}
}
}
Replace Util.STRUCTURE_PLUGIN_KEY with your own plugin key.
Typical use of the class:
public MyComponent(PluginEventManager pluginEventManager, ....) {
initStuff();
StopListener.install(pluginEventManager, "my-module-key", new Runnable() {
public void run() {
cleanupStuff();
}
});
}
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You can define a compoent in your plugin which implements DisposableBean interface.
method destroy() from this interface gets called when plugin is disabled or removed.
hope this helps,
Raju
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Not an answer because of course this is not authoritative, but I don't think this is possible. You can catch enabled and disabled events but that's it. I don't think it's possible to reliably know when a plugin is installed, eg it could be removed from installed-plugins and .osgi-plugins and then jira restarted.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Community moderators have prevented the ability to post new answers.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.