Ich lösen mein Problem mit einem anderen Zuhörer
public class PluginManager implements BundleContextAware,OsgiBundleApplicationContextListener {
private BundleContext bundleContext;
@Override
public void setBundleContext(BundleContext bundleContext) {
this.bundleContext = bundleContext;
bundleContext.addBundleListener(this);
}
@Override
public void bundleChanged(BundleEvent event) {
Bundle bundle = event.getBundle();
//NOW use this method to receive destroy event
}
@Override
public void onOsgiApplicationEvent(OsgiBundleApplicationContextEvent event) {
Bundle bundle = event.getBundle();
PluginBundleDescriptor pluginBundleDescriptor = new PluginBundleDescriptor();
pluginBundleDescriptor.setId(bundle.getBundleId());
pluginBundleDescriptor.setName(bundle.getSymbolicName());
pluginBundleDescriptor.setApplicationContext(event
.getApplicationContext());
} }
und veröffentlichen Sie den Dienst mit einer Schnittstelle OsgibundleApplicationContextListener (dies ist wichtig)
<osgi:service id="bundleContextTrackerOSGi" ref="coreModuleManager"
interface="org.springframework.osgi.context.event.OsgiBundleApplicationContextListener" />