Add listener for unloading of plugins

Change-Id: Ib5d65f15c6bda9ec3bee8f43dd20a7e9f40f5013
Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
This commit is contained in:
Edwin Kempin
2014-05-26 10:49:48 +02:00
parent c646a8c5ed
commit dd52c72af9
3 changed files with 36 additions and 0 deletions

View File

@@ -75,6 +75,7 @@ public class PluginGuiceEnvironment {
private final CopyConfigModule copyConfigModule;
private final Set<Key<?>> copyConfigKeys;
private final List<StartPluginListener> onStart;
private final List<StopPluginListener> onStop;
private final List<ReloadPluginListener> onReload;
private Module sysModule;
@@ -111,6 +112,9 @@ public class PluginGuiceEnvironment {
onStart = new CopyOnWriteArrayList<>();
onStart.addAll(listeners(sysInjector, StartPluginListener.class));
onStop = new CopyOnWriteArrayList<>();
onStop.addAll(listeners(sysInjector, StopPluginListener.class));
onReload = new CopyOnWriteArrayList<>();
onReload.addAll(listeners(sysInjector, ReloadPluginListener.class));
@@ -165,6 +169,7 @@ public class PluginGuiceEnvironment {
sshSets = dynamicSetsOf(injector);
sshMaps = dynamicMapsOf(injector);
onStart.addAll(listeners(injector, StartPluginListener.class));
onStop.addAll(listeners(injector, StopPluginListener.class));
onReload.addAll(listeners(injector, ReloadPluginListener.class));
}
@@ -187,6 +192,7 @@ public class PluginGuiceEnvironment {
httpSets = dynamicSetsOf(injector);
httpMaps = dynamicMapsOf(injector);
onStart.addAll(listeners(injector, StartPluginListener.class));
onStop.addAll(listeners(injector, StopPluginListener.class));
onReload.addAll(listeners(injector, ReloadPluginListener.class));
}
@@ -233,6 +239,12 @@ public class PluginGuiceEnvironment {
}
}
void onStopPlugin(Plugin plugin) {
for (StopPluginListener l : onStop) {
l.onStopPlugin(plugin);
}
}
private void attachItem(Map<TypeLiteral<?>, DynamicItem<?>> items,
@Nullable Injector src,
Plugin plugin) {
@@ -545,6 +557,9 @@ public class PluginGuiceEnvironment {
if (StartPluginListener.class.isAssignableFrom(type)) {
return false;
}
if (StopPluginListener.class.isAssignableFrom(type)) {
return false;
}
if (type.getName().startsWith("com.google.inject.")) {
return false;