Convert mdsal-singleton-dom-impl to OSGi DS 01/91801/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 13:47:57 +0000 (15:47 +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>
(cherry picked from commit 8d15ccd6a7e51ee0106f2a8f0a6a85a67786240f)

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 5da82b4405d81d6d5678e45085916b0e4b8f13a2..8e5e6b29e6b42a29ea7cdd0c7651da23862f99af 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 ec2c2a8a1794ec662e0951716c8d9fa93cd9d3c8..8a88a545ff021b9f70fe2587093449a305aa9035 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>