From a67a54808dc67a28605a92792b3302595569d9c3 Mon Sep 17 00:00:00 2001 From: "matus.matok" Date: Mon, 28 Nov 2022 08:28:35 +0100 Subject: [PATCH] Remove blueprint from clustering-test-app Replace bluprint wiring with explicit MD-SAL registration and OSGi Declarative Services. JIRA: CONTROLLER-2002 Change-Id: Ibbc7129062224b666d04ec76a04b2779f2662a6e Signed-off-by: Robert Varga Signed-off-by: matusmatok --- features/odl-clustering-test-app/pom.xml | 6 -- .../clustering-test-app/provider/pom.xml | 18 +++++ .../it/listener/PeopleCarListener.java | 41 +++++++++--- .../it/provider/BasicRpcTestProvider.java | 26 +++++-- .../provider/CarDataTreeChangeListener.java | 4 +- .../CarEntryDataTreeCommitCohort.java | 2 +- .../clustering/it/provider/CarProvider.java | 28 +++++++- .../provider/MdsalLowLevelTestProvider.java | 44 +++++++----- .../it/provider/PeopleProvider.java | 21 ++++-- .../it/provider/PurchaseCarProvider.java | 18 +++-- .../it/provider/impl/IdIntsListener.java | 2 +- .../impl/PublishNotificationsTask.java | 9 ++- .../impl/SingletonGetConstantService.java | 1 - .../OSGI-INF/blueprint/cluster-test-app.xml | 67 ------------------- 14 files changed, 159 insertions(+), 128 deletions(-) delete mode 100644 opendaylight/md-sal/samples/clustering-test-app/provider/src/main/resources/OSGI-INF/blueprint/cluster-test-app.xml diff --git a/features/odl-clustering-test-app/pom.xml b/features/odl-clustering-test-app/pom.xml index f883a58033..f3d258ef95 100644 --- a/features/odl-clustering-test-app/pom.xml +++ b/features/odl-clustering-test-app/pom.xml @@ -31,12 +31,6 @@ xml features - - org.opendaylight.controller - odl-controller-blueprint - xml - features - org.opendaylight.controller.samples clustering-it-model diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/pom.xml b/opendaylight/md-sal/samples/clustering-test-app/provider/pom.xml index 43fa11a3c9..cfcbf7be86 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/pom.xml +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/pom.xml @@ -29,6 +29,10 @@ org.opendaylight.mdsal mdsal-binding-api + + org.opendaylight.mdsal + mdsal-dom-api + org.opendaylight.mdsal mdsal-common-api @@ -37,5 +41,19 @@ org.opendaylight.controller sal-distributed-datastore + + jakarta.annotation + jakarta.annotation-api + true + + + org.osgi + org.osgi.service.component.annotations + + + com.guicedee.services + javax.inject + true + diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/listener/PeopleCarListener.java b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/listener/PeopleCarListener.java index 59dbd6990c..8ae92a5c6b 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/listener/PeopleCarListener.java +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/listener/PeopleCarListener.java @@ -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); diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/BasicRpcTestProvider.java b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/BasicRpcTestProvider.java index 21d3a8c57a..b04b517579 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/BasicRpcTestProvider.java +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/BasicRpcTestProvider.java @@ -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 diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarDataTreeChangeListener.java b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarDataTreeChangeListener.java index 6acf6744a0..3ae202b06a 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarDataTreeChangeListener.java +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarDataTreeChangeListener.java @@ -22,10 +22,10 @@ import org.slf4j.LoggerFactory; * * @author Ryan Goulding (ryandgoulding@gmail.com) */ -public class CarDataTreeChangeListener implements DataTreeChangeListener { +public final class CarDataTreeChangeListener implements DataTreeChangeListener { private static final Logger LOG = LoggerFactory.getLogger(CarDataTreeChangeListener.class); - @java.lang.Override + @Override public void onDataTreeChanged(final java.util.Collection> changes) { if (LOG.isTraceEnabled()) { for (DataTreeModification change : changes) { diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarEntryDataTreeCommitCohort.java b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarEntryDataTreeCommitCohort.java index 0d442c1b43..a7ca35ed52 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarEntryDataTreeCommitCohort.java +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarEntryDataTreeCommitCohort.java @@ -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(); diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarProvider.java b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarProvider.java index 9a3bbe9d4a..e4b70d2277 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarProvider.java +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarProvider.java @@ -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> carsDclRegistrations = ConcurrentHashMap.newKeySet(); + + private final Set> regs = new HashSet<>(); private final Set> carsDtclRegistrations = ConcurrentHashMap.newKeySet(); @@ -109,16 +123,24 @@ public class CarProvider implements CarService { private final AtomicReference> 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() { diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/MdsalLowLevelTestProvider.java b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/MdsalLowLevelTestProvider.java index 27c698da17..9770a18d26 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/MdsalLowLevelTestProvider.java +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/MdsalLowLevelTestProvider.java @@ -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 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 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> unregisterSingletonConstant( diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/PeopleProvider.java b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/PeopleProvider.java index 5780c5f836..9dbd3f69fa 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/PeopleProvider.java +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/PeopleProvider.java @@ -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> 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); diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/PurchaseCarProvider.java b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/PurchaseCarProvider.java index 055dc6ac62..c9f2918bd2 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/PurchaseCarProvider.java +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/PurchaseCarProvider.java @@ -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() { - - } } diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/IdIntsListener.java b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/IdIntsListener.java index ccc7a8a868..91f622dba9 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/IdIntsListener.java +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/IdIntsListener.java @@ -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; diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/PublishNotificationsTask.java b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/PublishNotificationsTask.java index 79250b6dd0..043325fea2 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/PublishNotificationsTask.java +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/PublishNotificationsTask.java @@ -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); } diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/SingletonGetConstantService.java b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/SingletonGetConstantService.java index 577981f4fc..6cda13b8ff 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/SingletonGetConstantService.java +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/SingletonGetConstantService.java @@ -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 index aa7d4032a8..0000000000 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/resources/OSGI-INF/blueprint/cluster-test-app.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- 2.36.6