Switch to yangtools ListenerRegistration 37/2237/1
authorRobert Varga <rovarga@cisco.com>
Tue, 29 Oct 2013 10:47:05 +0000 (11:47 +0100)
committerRobert Varga <rovarga@cisco.com>
Tue, 29 Oct 2013 10:47:05 +0000 (11:47 +0100)
Change-Id: I9e6d60601da6b186fd42de1bafe3aa7543befdc8
Signed-off-by: Robert Varga <rovarga@cisco.com>
topology/provider-bgp/src/main/java/org/opendaylight/bgpcep/topology/provider/bgp/impl/LocRIBListenerSubscriptionTracker.java

index 054b5d6ecf512d49918b0d5018c051e3fe6ff2f7..0deee451098d858618878b3cb1e319ad38f522bb 100644 (file)
@@ -13,10 +13,10 @@ import org.opendaylight.controller.md.sal.common.api.data.DataChangeEvent;
 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;
@@ -29,7 +29,7 @@ import com.google.common.base.Preconditions;
 
 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) {
@@ -41,7 +41,7 @@ final class LocRIBListenerSubscriptionTracker extends ServiceTracker<LocRIBListe
        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;
                }
 
@@ -53,31 +53,40 @@ final class LocRIBListenerSubscriptionTracker extends ServiceTracker<LocRIBListe
 
                        @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);
        }
 }