import org.opendaylight.controller.md.sal.common.api.data.DataModification;
import org.opendaylight.controller.sal.binding.api.data.DataChangeListener;
import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
-import org.opendaylight.protocol.concepts.ListenerRegistration;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.LocRib;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.Tables;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.TablesKey;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.osgi.framework.BundleContext;
final class LocRIBListenerSubscriptionTracker extends ServiceTracker<LocRIBListeners.Subscribtion, ListenerRegistration<LocRIBListener>> {
private static final InstanceIdentifier<LocRib> locRIBPath = InstanceIdentifier.builder().node(LocRib.class).toInstance();
- private static final Logger logger = LoggerFactory.getLogger(LocRIBListenerSubscriptionTracker.class);
+ private static final Logger LOG = LoggerFactory.getLogger(LocRIBListenerSubscriptionTracker.class);
private final DataProviderService dps;
LocRIBListenerSubscriptionTracker(final BundleContext context, final DataProviderService dps) {
public ListenerRegistration<LocRIBListener> addingService(final ServiceReference<LocRIBListeners.Subscribtion> reference) {
final LocRIBListeners.Subscribtion service = context.getService(reference);
if (service == null) {
- logger.trace("Service for reference {} disappeared", reference);
+ LOG.trace("Service for reference {} disappeared", reference);
return null;
}
@Override
public void onDataChanged(final DataChangeEvent<InstanceIdentifier<?>, DataObject> change) {
- final DataModification trans = dps.beginTransaction();
+ final DataModification<?, ?> trans = dps.beginTransaction();
try {
listener.onLocRIBChange(trans, change);
} catch (Exception e) {
- logger.info("Data change {} was not completely propagated to listener {}", change, listener, e);
+ LOG.info("Data change {} was not completely propagated to listener {}", change, listener, e);
}
// FIXME: abort the transaction if it's not committing
}
};
- dps.registerChangeListener(path, dcl);
+ final ListenerRegistration<DataChangeListener> reg = dps.registerDataChangeListener(path, dcl);
- return new ListenerRegistration<LocRIBListener>(listener) {
+ return new ListenerRegistration<LocRIBListener>() {
@Override
- protected void removeRegistration() {
- dps.unregisterChangeListener(path, dcl);
+ public void close() throws Exception {
+ reg.close();
+ }
+
+ @Override
+ public LocRIBListener getInstance() {
+ return listener;
}
};
}
@Override
public void removedService(final ServiceReference<LocRIBListeners.Subscribtion> reference, final ListenerRegistration<LocRIBListener> service) {
- service.close();
+ try {
+ service.close();
+ } catch (Exception e) {
+ LOG.error("Failed to unregister service {}", e);
+ }
context.ungetService(reference);
}
}