[WIP] Upgrade ONOS to karaf version 4.2.1
Change-Id: I7cd40c995bdf1c80f94b1895fb3344e32404c7fa
diff --git a/core/net/src/main/java/org/onosproject/component/impl/ComponentManager.java b/core/net/src/main/java/org/onosproject/component/impl/ComponentManager.java
index abe8e0b..56486ec 100644
--- a/core/net/src/main/java/org/onosproject/component/impl/ComponentManager.java
+++ b/core/net/src/main/java/org/onosproject/component/impl/ComponentManager.java
@@ -16,42 +16,41 @@
package org.onosproject.component.impl;
-import org.apache.felix.scr.ScrService;
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Deactivate;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.apache.felix.scr.annotations.Service;
-import org.onosproject.core.ApplicationId;
import org.onosproject.component.ComponentService;
+import org.onosproject.core.ApplicationId;
+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.osgi.service.component.annotations.ReferenceCardinality;
+import org.osgi.service.component.runtime.ServiceComponentRuntime;
+import org.osgi.service.component.runtime.dto.ComponentDescriptionDTO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Collections;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
+import static java.util.concurrent.Executors.newScheduledThreadPool;
import static org.onlab.util.Tools.groupedThreads;
/**
* Manages OSGi components.
*/
-@Service
-@Component(immediate = true)
+@Component(immediate = true, service = ComponentService.class)
public class ComponentManager implements ComponentService {
private final Logger log = LoggerFactory.getLogger(getClass());
+ private static final long TIMEOUT = 3000;
private static final int POLLING_PERIOD_MS = 500;
-
private static final int NUM_THREADS = 1;
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected ScrService scrService;
+ @Reference(cardinality = ReferenceCardinality.MANDATORY)
+ protected ServiceComponentRuntime scrService;
private Set<String> components;
@@ -61,19 +60,15 @@
private void activate() {
components = Collections.newSetFromMap(new ConcurrentHashMap<>());
- executor = Executors.newScheduledThreadPool(NUM_THREADS,
- groupedThreads("onos/component", "%d", log));
-
+ executor = newScheduledThreadPool(NUM_THREADS, groupedThreads("onos/component", "%d", log));
executor.scheduleAtFixedRate(() -> components.forEach(this::enableComponent),
- 0, POLLING_PERIOD_MS, TimeUnit.MILLISECONDS);
-
+ 0, POLLING_PERIOD_MS, TimeUnit.MILLISECONDS);
log.info("Started");
}
@Deactivate
private void deactivate() {
executor.shutdownNow();
-
log.info("Stopped");
}
@@ -89,30 +84,36 @@
disableComponent(name);
}
- private void enableComponent(String name) {
- org.apache.felix.scr.Component[] components = scrService.getComponents(name);
-
- if (components == null || components.length == 0) {
- return;
+ private ComponentDescriptionDTO getComponent(String name) {
+ for (ComponentDescriptionDTO component : scrService.getComponentDescriptionDTOs()) {
+ if (component.name.equals(name)) {
+ return component;
+ }
}
+ return null;
+ }
- org.apache.felix.scr.Component component = components[0];
-
- if (component.getState() == org.apache.felix.scr.Component.STATE_DISABLED) {
+ private void enableComponent(String name) {
+ ComponentDescriptionDTO component = getComponent(name);
+ if (component != null && !scrService.isComponentEnabled(component)) {
log.info("Enabling component {}", name);
- component.enable();
+ try {
+ scrService.enableComponent(component).timeout(TIMEOUT);
+ } catch (Exception e) {
+ throw new IllegalStateException("Unable to start component " + name, e);
+ }
}
}
private void disableComponent(String name) {
- org.apache.felix.scr.Component[] components = scrService.getComponents(name);
-
- if (components == null || components.length == 0) {
- return;
+ ComponentDescriptionDTO component = getComponent(name);
+ if (component != null && scrService.isComponentEnabled(component)) {
+ log.info("Disabling component {}", name);
+ try {
+ scrService.disableComponent(component).timeout(TIMEOUT);
+ } catch (Exception e) {
+ throw new IllegalStateException("Unable to start component " + name, e);
+ }
}
-
- log.info("Disabling component {}", name);
-
- components[0].disable();
}
}