import com.google.common.base.Optional;
import com.google.common.collect.Sets;
+
import java.util.Set;
+
import org.apache.karaf.features.Feature;
import org.apache.karaf.features.FeaturesListener;
import org.apache.karaf.features.FeaturesService;
import org.osgi.framework.ServiceReference;
import org.osgi.framework.ServiceRegistration;
import org.osgi.util.tracker.ServiceTrackerCustomizer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class FeatureServiceCustomizer implements ServiceTrackerCustomizer<FeaturesService, FeaturesService>, AutoCloseable {
+ private static final Logger LOG = LoggerFactory.getLogger(FeatureServiceCustomizer.class);
private ConfigPusher configPusher = null;
private ServiceRegistration<?> registration;
final FeaturesService featureService = bc.getService(reference);
final Optional<XmlFileStorageAdapter> currentPersister = XmlFileStorageAdapter.getInstance();
- if(XmlFileStorageAdapter.getInstance().isPresent()) {
+ if (XmlFileStorageAdapter.getInstance().isPresent()) {
final Set<String> installedFeatureIds = Sets.newHashSet();
- for (final Feature installedFeature : featureService.listInstalledFeatures()) {
- installedFeatureIds.add(installedFeature.getId());
+ try {
+ for (final Feature installedFeature : featureService.listInstalledFeatures()) {
+ installedFeatureIds.add(installedFeature.getId());
+ }
+ } catch (final Exception e) {
+ LOG.error("Error listing installed features", e);
}
currentPersister.get().setFeaturesService(() -> installedFeatureIds);
@Override
public void modifiedService(final ServiceReference<FeaturesService> reference,
- final FeaturesService service) {
+ final FeaturesService service) {
// we don't care if the properties change
}
@Override
public void removedService(final ServiceReference<FeaturesService> reference,
- final FeaturesService service) {
+ final FeaturesService service) {
close();
}
@Override
public void close() {
- if(registration != null) {
+ if (registration != null) {
registration.unregister();
registration = null;
}