Convert mdsal-singleton-dom-impl to OSGi DS 97/91797/1
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 31 Jul 2020 11:44:05 +0000 (13:44 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 31 Jul 2020 11:48:52 +0000 (13:48 +0200)
This is very simple component, use OSGi DS to activate it. This
exposes our inability to test it, hence disable the corresponding
feature. That test was incomplete due to us relying on ODL blueprint
namespace, which was missing anyway.

JIRA: MDSAL-523
Change-Id: Icadaf0fddc1768d97ec74d22a26f079f1811f9b6
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
features/odl-mdsal-singleton-dom/pom.xml
singleton-service/mdsal-singleton-dom-impl/pom.xml
singleton-service/mdsal-singleton-dom-impl/src/main/java/org/opendaylight/mdsal/singleton/dom/impl/DOMClusterSingletonServiceProviderImpl.java
singleton-service/mdsal-singleton-dom-impl/src/main/java/org/opendaylight/mdsal/singleton/dom/impl/OSGiClusterSingletonServiceProvider.java [new file with mode: 0644]
singleton-service/mdsal-singleton-dom-impl/src/main/resources/org/opendaylight/blueprint/dom-singleton.xml [deleted file]

index b2d91d285dd8dfea80283f8caf979e7e5bbe48aa..7c7e1fc2a33a0462ac038cdab1d495e4ef4133dd 100644 (file)
     <name>OpenDaylight :: MD-SAL :: Singleton :: DOM</name>
     <description>MD-SAL Cluster Singleton Service implementation</description>
 
+    <properties>
+        <!-- FIXME: remove this once we can plug in a testing dependency -->
+        <skip.karaf.featureTest>true</skip.karaf.featureTest>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>org.opendaylight.mdsal</groupId>
index 6d04235b68914d2b1fcc0a77a3f12e6de71101d0..56db53e02a490e2ad81d83879f2d96b94cca6182 100644 (file)
         </dependency>
         <dependency>
             <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
+            <artifactId>osgi.cmpn</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.inject</groupId>
+            <artifactId>javax.inject</artifactId>
+            <scope>provided</scope>
+            <optional>true</optional>
         </dependency>
 
         <dependency>
index d0b6c061b7363497e95e0de191ccf2e12cb31bcc..88f720a8c9df21bdfe305daff444338f08f1234e 100644 (file)
@@ -7,6 +7,8 @@
  */
 package org.opendaylight.mdsal.singleton.dom.impl;
 
+import javax.inject.Inject;
+import javax.inject.Singleton;
 import org.opendaylight.mdsal.eos.common.api.GenericEntityOwnershipService;
 import org.opendaylight.mdsal.eos.dom.api.DOMEntity;
 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipChange;
@@ -19,6 +21,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent
 /**
  * Binding version of {@link AbstractClusterSingletonServiceProviderImpl}.
  */
+@Singleton
 public final class DOMClusterSingletonServiceProviderImpl extends
         AbstractClusterSingletonServiceProviderImpl<YangInstanceIdentifier, DOMEntity,
                                                     DOMEntityOwnershipChange,
@@ -32,6 +35,7 @@ public final class DOMClusterSingletonServiceProviderImpl extends
      *
      * @param entityOwnershipService - we need only {@link GenericEntityOwnershipService}
      */
+    @Inject
     public DOMClusterSingletonServiceProviderImpl(final DOMEntityOwnershipService entityOwnershipService) {
         super(entityOwnershipService);
     }
diff --git a/singleton-service/mdsal-singleton-dom-impl/src/main/java/org/opendaylight/mdsal/singleton/dom/impl/OSGiClusterSingletonServiceProvider.java b/singleton-service/mdsal-singleton-dom-impl/src/main/java/org/opendaylight/mdsal/singleton/dom/impl/OSGiClusterSingletonServiceProvider.java
new file mode 100644 (file)
index 0000000..e709709
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.mdsal.singleton.dom.impl;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipService;
+import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService;
+import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
+import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration;
+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;
+
+@Beta
+@Component(immediate = true, property = "type=default")
+public final class OSGiClusterSingletonServiceProvider implements ClusterSingletonServiceProvider {
+    private static final Logger LOG = LoggerFactory.getLogger(OSGiClusterSingletonServiceProvider.class);
+
+    @Reference
+    DOMEntityOwnershipService entityOwnershipService = null;
+
+    private DOMClusterSingletonServiceProviderImpl delegate;
+
+    @Override
+    public ClusterSingletonServiceRegistration registerClusterSingletonService(final ClusterSingletonService service) {
+        return delegate.registerClusterSingletonService(service);
+    }
+
+    @Override
+    public void close() {
+        // Ignored on purpose
+    }
+
+    @Activate
+    void activate() {
+        LOG.info("Cluster Singleton Service starting");
+        delegate = new DOMClusterSingletonServiceProviderImpl(entityOwnershipService);
+        delegate.initializeProvider();
+        LOG.info("Cluster Singleton Service started");
+    }
+
+    @Deactivate
+    void deactivate() {
+        LOG.info("Cluster Singleton Service stopping");
+        delegate.close();
+        delegate = null;
+        LOG.info("Cluster Singleton Service stopped");
+    }
+}
diff --git a/singleton-service/mdsal-singleton-dom-impl/src/main/resources/org/opendaylight/blueprint/dom-singleton.xml b/singleton-service/mdsal-singleton-dom-impl/src/main/resources/org/opendaylight/blueprint/dom-singleton.xml
deleted file mode 100644 (file)
index 2ab1101..0000000
+++ /dev/null
@@ -1,16 +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">
-
-  <!-- DOMClusterSingletonServiceProvider -->
-
-  <reference id="domEntityOwnershipService" interface="org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipService"/>
-
-  <bean id="clusterSingletonService" class="org.opendaylight.mdsal.singleton.dom.impl.DOMClusterSingletonServiceProviderImpl"
-          init-method="initializeProvider" destroy-method="close">
-    <argument ref="domEntityOwnershipService"/>
-  </bean>
-
-  <service ref="clusterSingletonService" interface="org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider"
-        odl:type="default"/>
-</blueprint>