It's not the same without you

Join the community to find out what other Atlassian users are discussing, debating and creating.

Atlassian Community Hero Image Collage

How to handle the uninstall event from within a plugin?

marc raiser Sep 08, 2011

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

3 answers

3 votes

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();

}

});

}

marc raiser Sep 11, 2011

Thank you Igor, I'll give that a try.

0 votes
JamieA Sep 08, 2011

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.

0 votes
Raju Kadam Community Leader Nov 02, 2011

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

Suggest an answer

Log in or Sign up to answer
This widget could not be displayed.
This widget could not be displayed.
Community showcase
Posted in United States

Topic Tuesday: Agile

Another week, another Topic Tuesday!  Agile has been on my mind a lot lately because I've seen good implementations and bad implementations, but now as a Jira admin it matters more to me whether...

11 views 0 0
View post

Community Events

Connect with like-minded Atlassian users at free events near you!

Find an event

Connect with like-minded Atlassian users at free events near you!

Unfortunately there are no Community Events near you at the moment.

Host an event

You're one step closer to meeting fellow Atlassian users at your local event. Learn more about Community Events

Events near you