Remove blueprint from clustering-test-app 47/103147/13
authormatus.matok <matus.matok@pantheon.tech>
Mon, 28 Nov 2022 07:28:35 +0000 (08:28 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Sun, 4 Dec 2022 20:04:02 +0000 (21:04 +0100)
Replace bluprint wiring with explicit MD-SAL registration and OSGi
Declarative Services.

JIRA: CONTROLLER-2002
Change-Id: Ibbc7129062224b666d04ec76a04b2779f2662a6e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Signed-off-by: matusmatok <matus.matok@pantheon.tech>
14 files changed:
features/odl-clustering-test-app/pom.xml
opendaylight/md-sal/samples/clustering-test-app/provider/pom.xml
opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/listener/PeopleCarListener.java
opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/BasicRpcTestProvider.java
opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarDataTreeChangeListener.java
opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarEntryDataTreeCommitCohort.java
opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarProvider.java
opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/MdsalLowLevelTestProvider.java
opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/PeopleProvider.java
opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/PurchaseCarProvider.java
opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/IdIntsListener.java
opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/PublishNotificationsTask.java
opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/SingletonGetConstantService.java
opendaylight/md-sal/samples/clustering-test-app/provider/src/main/resources/OSGI-INF/blueprint/cluster-test-app.xml [deleted file]

index f883a58033e8e6c1eda32eaa7d72caa18a7989f0..f3d258ef95848d0f64b1910dba46fa35d5654a2f 100644 (file)
             <type>xml</type>
             <classifier>features</classifier>
         </dependency>
-        <dependency>
-            <groupId>org.opendaylight.controller</groupId>
-            <artifactId>odl-controller-blueprint</artifactId>
-            <type>xml</type>
-            <classifier>features</classifier>
-        </dependency>
         <dependency>
             <groupId>org.opendaylight.controller.samples</groupId>
             <artifactId>clustering-it-model</artifactId>
index 43fa11a3c9f28723ba716219094e26331c76d27a..cfcbf7be867426042e7c4a3ec9ead1f142ef11f4 100644 (file)
             <groupId>org.opendaylight.mdsal</groupId>
             <artifactId>mdsal-binding-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.mdsal</groupId>
+            <artifactId>mdsal-dom-api</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.opendaylight.mdsal</groupId>
             <artifactId>mdsal-common-api</artifactId>
             <groupId>org.opendaylight.controller</groupId>
             <artifactId>sal-distributed-datastore</artifactId>
         </dependency>
+        <dependency>
+            <groupId>jakarta.annotation</groupId>
+            <artifactId>jakarta.annotation-api</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.service.component.annotations</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.guicedee.services</groupId>
+            <artifactId>javax.inject</artifactId>
+            <optional>true</optional>
+        </dependency>
     </dependencies>
 </project>
index 59dbd6990ce2ec62353d457c6970fc58eb564828..8ae92a5c6b94199731f94f7645fac6bc2ea89b20 100644 (file)
@@ -7,9 +7,15 @@
  */
 package org.opendaylight.controller.clustering.it.listener;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.MoreExecutors;
+import javax.annotation.PreDestroy;
+import javax.inject.Inject;
+import javax.inject.Singleton;
 import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.NotificationService;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
@@ -19,28 +25,43 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controll
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.people.rev140818.car.people.CarPersonKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.purchase.rev140818.CarBought;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.purchase.rev140818.CarPurchaseListener;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class PeopleCarListener implements CarPurchaseListener {
+@Singleton
+@Component(service = { })
+public final class PeopleCarListener implements CarPurchaseListener {
     private static final Logger LOG = LoggerFactory.getLogger(PeopleCarListener.class);
 
-    private DataBroker dataProvider;
+    private final DataBroker dataProvider;
+    private final Registration reg;
+
+    @Inject
+    @Activate
+    public PeopleCarListener(@Reference final DataBroker dataProvider,
+            @Reference final NotificationService notifService) {
+        this.dataProvider = requireNonNull(dataProvider);
+        reg = notifService.registerNotificationListener(this);
+    }
 
-    public void setDataProvider(final DataBroker salDataProvider) {
-        this.dataProvider = salDataProvider;
+    @PreDestroy
+    @Deactivate
+    public void close() {
+        reg.close();
     }
 
     @Override
     public void onCarBought(final CarBought notification) {
 
-        final CarPersonBuilder carPersonBuilder = new CarPersonBuilder();
-        carPersonBuilder.setCarId(notification.getCarId());
-        carPersonBuilder.setPersonId(notification.getPersonId());
-        CarPersonKey key = new CarPersonKey(notification.getCarId(), notification.getPersonId());
-        carPersonBuilder.withKey(key);
-        final CarPerson carPerson = carPersonBuilder.build();
+        final CarPerson carPerson = new CarPersonBuilder()
+            .withKey(new CarPersonKey(notification.getCarId(), notification.getPersonId()))
+            .build();
 
         LOG.info("Car bought, adding car-person entry: [{}]", carPerson);
 
index 21d3a8c57abdedc9c0e0add5a4cf09fda8c249c1..b04b5175799e574fd7eff78dde4c9762bb695a58 100644 (file)
@@ -9,6 +9,9 @@ package org.opendaylight.controller.clustering.it.provider;
 
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
+import javax.annotation.PreDestroy;
+import javax.inject.Inject;
+import javax.inject.Singleton;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService;
 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
@@ -18,26 +21,39 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.controller.basic.rpc.test.r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.controller.basic.rpc.test.rev160120.BasicGlobalOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.controller.basic.rpc.test.rev160120.BasicRpcTestService;
 import org.opendaylight.yangtools.concepts.ObjectRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+@Singleton
+@Component(service = { })
 public final class BasicRpcTestProvider implements ClusterSingletonService, BasicRpcTestService {
     private static final Logger LOG = LoggerFactory.getLogger(BasicRpcTestProvider.class);
     private static final ServiceGroupIdentifier IDENTIFIER = ServiceGroupIdentifier.create("Basic-rpc-test");
 
     private final RpcProviderService rpcProviderRegistry;
-    private final ClusterSingletonServiceProvider singletonService;
+    private final Registration singletonRegistration;
 
     private ObjectRegistration<?> rpcRegistration;
 
-    public BasicRpcTestProvider(final RpcProviderService rpcProviderRegistry,
-                                final ClusterSingletonServiceProvider singletonService) {
+    @Inject
+    @Activate
+    public BasicRpcTestProvider(@Reference final RpcProviderService rpcProviderRegistry,
+                                @Reference final ClusterSingletonServiceProvider singletonService) {
         this.rpcProviderRegistry = rpcProviderRegistry;
-        this.singletonService = singletonService;
+        singletonRegistration = singletonService.registerClusterSingletonService(this);
+    }
 
-        singletonService.registerClusterSingletonService(this);
+    @PreDestroy
+    @Deactivate
+    public void close() {
+        singletonRegistration.close();
     }
 
     @Override
index 6acf6744a0a57d0141de5d2f30b17acb075874ce..3ae202b06a768ca7f24d27e382e2f588c69a155c 100644 (file)
@@ -22,10 +22,10 @@ import org.slf4j.LoggerFactory;
  *
  * @author Ryan Goulding (ryandgoulding@gmail.com)
  */
-public class CarDataTreeChangeListener implements DataTreeChangeListener<Cars> {
+public final class CarDataTreeChangeListener implements DataTreeChangeListener<Cars> {
     private static final Logger LOG = LoggerFactory.getLogger(CarDataTreeChangeListener.class);
 
-    @java.lang.Override
+    @Override
     public void onDataTreeChanged(final java.util.Collection<DataTreeModification<Cars>> changes) {
         if (LOG.isTraceEnabled()) {
             for (DataTreeModification<Cars> change : changes) {
index 0d442c1b432afc535023185aa713270b193750fd..a7ca35ed52e070042aaaff554a96e4b37894a6a9 100644 (file)
@@ -33,7 +33,7 @@ import org.slf4j.LoggerFactory;
  *
  * @author Thomas Pantelis
  */
-public class CarEntryDataTreeCommitCohort implements DOMDataTreeCommitCohort {
+public final class CarEntryDataTreeCommitCohort implements DOMDataTreeCommitCohort {
     private static final Logger LOG = LoggerFactory.getLogger(CarEntryDataTreeCommitCohort.class);
 
     private static final QName YEAR_QNAME = QName.create(Cars.QNAME, "year").intern();
index 9a3bbe9d4a2f6cb4b297ca647d308f2fee1e9570..e4b70d2277474ab2697e887dcc3b6c35672beabf 100644 (file)
@@ -13,6 +13,7 @@ import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.MoreExecutors;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+import java.util.HashSet;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ExecutionException;
@@ -21,8 +22,12 @@ import java.util.concurrent.TimeoutException;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.concurrent.atomic.AtomicReference;
+import javax.annotation.PreDestroy;
+import javax.inject.Inject;
+import javax.inject.Singleton;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
+import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
@@ -66,12 +71,17 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controll
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.rev140818.cars.CarEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.rev140818.cars.CarEntryBuilder;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.ObjectRegistration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.ErrorType;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -80,8 +90,10 @@ import org.slf4j.LoggerFactory;
  *
  * @author Thomas Pantelis
  */
+@Singleton
+@Component(service = { })
 @SuppressFBWarnings("SLF4J_ILLEGAL_PASSED_CLASS")
-public class CarProvider implements CarService {
+public final class CarProvider implements CarService {
     private static final Logger LOG_PURCHASE_CAR = LoggerFactory.getLogger(PurchaseCarProvider.class);
 
     private static final Logger LOG_CAR_PROVIDER = LoggerFactory.getLogger(CarProvider.class);
@@ -101,6 +113,8 @@ public class CarProvider implements CarService {
     private final AtomicBoolean registeredListener = new AtomicBoolean();
 
     private final Set<ListenerRegistration<?>> carsDclRegistrations = ConcurrentHashMap.newKeySet();
+
+    private final Set<ObjectRegistration<?>> regs = new HashSet<>();
     private final Set<ListenerRegistration<CarDataTreeChangeListener>> carsDtclRegistrations =
             ConcurrentHashMap.newKeySet();
 
@@ -109,16 +123,24 @@ public class CarProvider implements CarService {
     private final AtomicReference<DOMDataTreeCommitCohortRegistration<CarEntryDataTreeCommitCohort>> commitCohortReg =
             new AtomicReference<>();
 
-    public CarProvider(final DataBroker dataProvider, final EntityOwnershipService ownershipService,
-            final DOMDataBroker domDataBroker) {
+    @Inject
+    @Activate
+    public CarProvider(@Reference final DataBroker dataProvider,
+            @Reference final EntityOwnershipService ownershipService, @Reference final DOMDataBroker domDataBroker,
+            @Reference final RpcProviderService rpcProviderService) {
         this.dataProvider = dataProvider;
         this.ownershipService = ownershipService;
         this.domDataBroker = domDataBroker;
+        regs.add(rpcProviderService.registerRpcImplementation(CarService.class, this));
     }
 
+    @PreDestroy
+    @Deactivate
     public void close() {
         stopThread();
         closeCommitCohortRegistration();
+        regs.forEach(ObjectRegistration::close);
+        regs.clear();
     }
 
     private void stopThread() {
index 27c698da174b43b81a5903a8ef34727aef60a1f8..9770a18d264c25fe8ac6e10825c6ceef241696a4 100644 (file)
@@ -20,7 +20,9 @@ import java.util.Optional;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
-import org.opendaylight.controller.cluster.ActorSystemProvider;
+import javax.annotation.PreDestroy;
+import javax.inject.Inject;
+import javax.inject.Singleton;
 import org.opendaylight.controller.cluster.datastore.DistributedDataStoreInterface;
 import org.opendaylight.controller.cluster.datastore.utils.ActorUtils;
 import org.opendaylight.controller.cluster.raft.client.messages.Shutdown;
@@ -109,21 +111,27 @@ import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.l
 import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.WriteTransactionsInput;
 import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.WriteTransactionsOutput;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.concepts.ObjectRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.ErrorTag;
 import org.opendaylight.yangtools.yang.common.ErrorType;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import scala.concurrent.duration.FiniteDuration;
 
+@Singleton
+@Component(service = {})
 public final class MdsalLowLevelTestProvider implements OdlMdsalLowlevelControlService {
     private static final Logger LOG = LoggerFactory.getLogger(MdsalLowLevelTestProvider.class);
 
-    private final ObjectRegistration<OdlMdsalLowlevelControlService> registration;
+    private final Registration registration;
     private final DistributedDataStoreInterface configDataStore;
     private final BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer;
     private final DOMDataBroker domDataBroker;
@@ -145,20 +153,18 @@ public final class MdsalLowLevelTestProvider implements OdlMdsalLowlevelControlS
     private IdIntsListener idIntsListener;
     private final Map<String, PublishNotificationsTask> publishNotificationsTasks = new HashMap<>();
 
+    @Inject
+    @Activate
     public MdsalLowLevelTestProvider(
-                                     // FIXME: do not depend on this service
-                                     final RpcProviderService rpcRegistry,
-                                     final DOMRpcProviderService domRpcService,
-                                     final ClusterSingletonServiceProvider singletonService,
-                                     // FIXME: do not depend on this service
-                                     final DOMSchemaService schemaService,
-                                     final BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer,
-                                     final NotificationPublishService notificationPublishService,
-                                     final NotificationService notificationService,
-                                     final DOMDataBroker domDataBroker,
-                                     final DistributedDataStoreInterface configDataStore,
-                                     // FIXME: do not depend on this service
-                                     final ActorSystemProvider actorSystemProvider) {
+            @Reference final RpcProviderService rpcRegistry,
+            @Reference final DOMRpcProviderService domRpcService,
+            @Reference final ClusterSingletonServiceProvider singletonService,
+            @Reference final DOMSchemaService schemaService,
+            @Reference final BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer,
+            @Reference final NotificationPublishService notificationPublishService,
+            @Reference final NotificationService notificationService,
+            @Reference final DOMDataBroker domDataBroker,
+            @Reference final DistributedDataStoreInterface configDataStore) {
         this.domRpcService = domRpcService;
         this.singletonService = singletonService;
         this.bindingNormalizedNodeSerializer = bindingNormalizedNodeSerializer;
@@ -172,6 +178,12 @@ public final class MdsalLowLevelTestProvider implements OdlMdsalLowlevelControlS
         registration = rpcRegistry.registerRpcImplementation(OdlMdsalLowlevelControlService.class, this);
     }
 
+    @PreDestroy
+    @Deactivate
+    public void close() {
+        registration.close();
+    }
+
     @Override
     @SuppressWarnings("checkstyle:IllegalCatch")
     public ListenableFuture<RpcResult<UnregisterSingletonConstantOutput>> unregisterSingletonConstant(
index 5780c5f836012df4d0b5cc3916044db7fc977215..9dbd3f69fa2e06c23dd795c8f487ffd64e2c1214 100644 (file)
@@ -16,6 +16,9 @@ import com.google.common.util.concurrent.MoreExecutors;
 import com.google.common.util.concurrent.SettableFuture;
 import java.util.HashSet;
 import java.util.Set;
+import javax.annotation.PreDestroy;
+import javax.inject.Inject;
+import javax.inject.Singleton;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
@@ -34,11 +37,16 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.ErrorType;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class PeopleProvider implements PeopleService, AutoCloseable {
-
+@Singleton
+@Component(service = { })
+public final class PeopleProvider implements PeopleService, AutoCloseable {
     private static final Logger LOG = LoggerFactory.getLogger(PeopleProvider.class);
 
     private final Set<ObjectRegistration<?>> regs = new HashSet<>();
@@ -46,8 +54,11 @@ public class PeopleProvider implements PeopleService, AutoCloseable {
     private final RpcProviderService rpcProviderService;
     private final CarPurchaseService rpcImplementation;
 
-    public PeopleProvider(final DataBroker dataProvider, final RpcProviderService rpcProviderService,
-            final CarPurchaseService rpcImplementation) {
+    @Inject
+    @Activate
+    public PeopleProvider(@Reference final DataBroker dataProvider,
+            @Reference final RpcProviderService rpcProviderService,
+            @Reference final CarPurchaseService rpcImplementation) {
         this.dataProvider = requireNonNull(dataProvider);
         this.rpcProviderService = requireNonNull(rpcProviderService);
         this.rpcImplementation = requireNonNull(rpcImplementation);
@@ -91,6 +102,8 @@ public class PeopleProvider implements PeopleService, AutoCloseable {
         return futureResult;
     }
 
+    @PreDestroy
+    @Deactivate
     @Override
     public void close() {
         regs.forEach(ObjectRegistration::close);
index 055dc6ac62acbfc5d017217abff5ee2ec119409b..c9f2918bd2e6cdb4de86c61026394de1b0608405 100644 (file)
@@ -12,6 +12,8 @@ import static java.util.Objects.requireNonNull;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.MoreExecutors;
+import javax.inject.Inject;
+import javax.inject.Singleton;
 import org.opendaylight.mdsal.binding.api.NotificationPublishService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.purchase.rev140818.BuyCarInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.purchase.rev140818.BuyCarOutput;
@@ -20,15 +22,22 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controll
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.purchase.rev140818.CarPurchaseService;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class PurchaseCarProvider implements CarPurchaseService, AutoCloseable {
+@Singleton
+@Component(service = CarPurchaseService.class)
+public final class PurchaseCarProvider implements CarPurchaseService {
     private static final Logger LOG = LoggerFactory.getLogger(PurchaseCarProvider.class);
 
     private final NotificationPublishService notificationProvider;
 
-    public PurchaseCarProvider(final NotificationPublishService notificationProvider) {
+    @Inject
+    @Activate
+    public PurchaseCarProvider(@Reference final NotificationPublishService notificationProvider) {
         this.notificationProvider = requireNonNull(notificationProvider);
     }
 
@@ -43,9 +52,4 @@ public class PurchaseCarProvider implements CarPurchaseService, AutoCloseable {
             result -> RpcResultBuilder.success(new BuyCarOutputBuilder().build()).build(),
             MoreExecutors.directExecutor());
     }
-
-    @Override
-    public void close() {
-
-    }
 }
index ccc7a8a868db69741beec08a531babdbe4fea5e9..91f622dba971c535d955b538aa68950b2d74f182 100644 (file)
@@ -31,7 +31,7 @@ import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class IdIntsListener implements ClusteredDOMDataTreeChangeListener {
+public final class IdIntsListener implements ClusteredDOMDataTreeChangeListener {
     private static final Logger LOG = LoggerFactory.getLogger(IdIntsListener.class);
     private static final long SECOND_AS_NANO = 1000000000;
 
index 79250b6dd08056ea959de75104459b0e9695b21e..043325fea285b2bbbf78db62c98e4545862683e9 100644 (file)
@@ -20,10 +20,9 @@ import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.l
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class PublishNotificationsTask implements Runnable {
-
+public final class PublishNotificationsTask implements Runnable {
     private static final Logger LOG = LoggerFactory.getLogger(PublishNotificationsTask.class);
-    private static final int SECOND_AS_NANO = 1000000000;
+    private static final int SECOND_AS_NANO = 1_000_000_000;
 
     private final NotificationPublishService notificationPublishService;
     private final String notificationId;
@@ -44,9 +43,9 @@ public class PublishNotificationsTask implements Runnable {
         this.notificationPublishService = requireNonNull(notificationPublishService);
         this.notificationId = requireNonNull(notificationId);
         checkArgument(secondsToTake > 0);
-        this.timeToTake = secondsToTake * SECOND_AS_NANO;
+        timeToTake = secondsToTake * SECOND_AS_NANO;
         checkArgument(maxPerSecond > 0);
-        this.delay = SECOND_AS_NANO / maxPerSecond;
+        delay = SECOND_AS_NANO / maxPerSecond;
 
         LOG.debug("Delay : {}", delay);
     }
index 577981f4fc855172bc57ae0c84e6f66d4d76028c..6cda13b8ff0df231ad44c6c55ab35a8712b448f1 100644 (file)
@@ -32,7 +32,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public final class SingletonGetConstantService implements DOMRpcImplementation, ClusterSingletonService {
-
     private static final Logger LOG = LoggerFactory.getLogger(SingletonGetConstantService.class);
 
     private static final QNameModule MODULE = QNameModule.create(
diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/resources/OSGI-INF/blueprint/cluster-test-app.xml b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/resources/OSGI-INF/blueprint/cluster-test-app.xml
deleted file mode 100644 (file)
index aa7d403..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0"
-           xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
-    odl:use-default-for-reference-types="true">
-
-  <reference id="dataBroker" interface="org.opendaylight.mdsal.binding.api.DataBroker"/>
-  <reference id="entityOwnershipService" interface="org.opendaylight.mdsal.eos.binding.api.EntityOwnershipService"/>
-  <reference id="bindingRpcRegistry" interface="org.opendaylight.mdsal.binding.api.RpcProviderService"/>
-  <reference id="domRpcProviderService" interface="org.opendaylight.mdsal.dom.api.DOMRpcProviderService"/>
-  <reference id="clusterSingletonService" interface="org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider"/>
-  <reference id="domDataBroker" interface="org.opendaylight.mdsal.dom.api.DOMDataBroker"/>
-  <reference id="schemaService" interface="org.opendaylight.mdsal.dom.api.DOMSchemaService"/>
-  <reference id="normalizedNodeSerializer" interface="org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer"/>
-  <reference id="notificationPublishService" interface="org.opendaylight.mdsal.binding.api.NotificationPublishService" />
-  <reference id="notificationListenerService" interface="org.opendaylight.mdsal.binding.api.NotificationService" />
-  <reference id="configDatastore" interface="org.opendaylight.controller.cluster.datastore.DistributedDataStoreInterface"
-             odl:type="distributed-config"/>
-  <reference id="actorSystemProvider" interface="org.opendaylight.controller.cluster.ActorSystemProvider"/>
-
-
-  <bean id="purchaseCarProvider" class="org.opendaylight.controller.clustering.it.provider.PurchaseCarProvider" >
-    <argument ref="notificationPublishService"/>
-  </bean>
-
-  <bean id="peopleProvider" class="org.opendaylight.controller.clustering.it.provider.PeopleProvider"
-        destroy-method="close">
-    <argument ref="dataBroker"/>
-    <argument ref="bindingRpcRegistry"/>
-    <argument ref="purchaseCarProvider"/>
-  </bean>
-
-  <bean id="carProvider" class="org.opendaylight.controller.clustering.it.provider.CarProvider"
-        destroy-method="close">
-    <argument ref="dataBroker"/>
-    <argument ref="entityOwnershipService"/>
-    <argument ref="domDataBroker"/>
-  </bean>
-
-  <odl:rpc-implementation ref="carProvider"/>
-  <odl:rpc-implementation ref="peopleProvider"/>
-
-  <bean id="peopleCarListener" class="org.opendaylight.controller.clustering.it.listener.PeopleCarListener" >
-    <property name="dataProvider" ref="dataBroker"/>
-  </bean>
-
-  <odl:notification-listener ref="peopleCarListener"/>
-
-  <bean id="basicTestProvider" class="org.opendaylight.controller.clustering.it.provider.BasicRpcTestProvider">
-    <argument ref="bindingRpcRegistry"/>
-    <argument ref="clusterSingletonService"/>
-  </bean>
-
-  <bean id="lowLevelTestProvider" class="org.opendaylight.controller.clustering.it.provider.MdsalLowLevelTestProvider">
-    <argument ref="bindingRpcRegistry"/>
-    <argument ref="domRpcProviderService"/>
-    <argument ref="clusterSingletonService"/>
-    <argument ref="schemaService"/>
-    <argument ref="normalizedNodeSerializer"/>
-    <argument ref="notificationPublishService"/>
-    <argument ref="notificationListenerService"/>
-    <argument ref="domDataBroker"/>
-    <argument ref="configDatastore"/>
-    <argument ref="actorSystemProvider"/>
-  </bean>
-
-</blueprint>