fix: (vNet) class load issues for OSGi bundle.
Problem.
1. Inside incubator package, class loader can't search classes defined
in the other bundles such as onos-core
Solution
1. Added a method to return bundle context, and obtain class loader.
Change-Id: If5ee4cb1a5b9ef5ab7d7e3bbc70408ea8257baea
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/event/AbstractVirtualListenerManager.java b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/event/AbstractVirtualListenerManager.java
index e87876c..866e845 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/event/AbstractVirtualListenerManager.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/event/AbstractVirtualListenerManager.java
@@ -29,9 +29,7 @@
*/
public abstract class AbstractVirtualListenerManager
<E extends Event, L extends EventListener<E>>
- implements ListenerService<E, L>, VnetService {
-
- private static final String NETWORK_NULL = "Network ID cannot be null";
+ implements ListenerService<E, L>, VnetService {
protected final NetworkId networkId;
protected final VirtualNetworkService manager;
@@ -39,29 +37,34 @@
protected EventDeliveryService eventDispatcher;
- VirtualListenerRegistryManager listenerManager =
+ private VirtualListenerRegistryManager listenerManager =
VirtualListenerRegistryManager.getInstance();
+ private Class<? extends Event> eventClass;
+
public AbstractVirtualListenerManager(VirtualNetworkService manager,
- NetworkId networkId) {
+ NetworkId networkId,
+ Class<? extends Event> eventClass) {
this.manager = manager;
this.networkId = networkId;
this.serviceDirectory = manager.getServiceDirectory();
+ this.eventClass = eventClass;
+
//Set default event delivery service by default
this.eventDispatcher = serviceDirectory.get(EventDeliveryService.class);
}
@Override
+ @SuppressWarnings("unchecked")
public void addListener(L listener) {
- listenerManager.getRegistry(networkId, getEventClass())
- .addListener(listener);
+ listenerManager.getRegistry(networkId, eventClass).addListener(listener);
}
@Override
+ @SuppressWarnings("unchecked")
public void removeListener(L listener) {
- listenerManager.getRegistry(networkId, getEventClass())
- .removeListener(listener);
+ listenerManager.getRegistry(networkId, eventClass).removeListener(listener);
}
/**
@@ -83,23 +86,4 @@
public NetworkId networkId() {
return this.networkId;
}
-
- /**
- * Returns the class type of parameter type.
- * More specifically, it returns the class type of event class.
- *
- * @return the class type of provider service of the service
- */
- public Class getEventClass() {
- String className = this.getClass().getGenericSuperclass().toString();
- String pramType = className.split("<")[1].split(",")[0];
-
- try {
- return Class.forName(pramType);
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
-
- return null;
- }
}
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/event/VirtualListenerRegistryManager.java b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/event/VirtualListenerRegistryManager.java
index 9d01a00..252d466 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/event/VirtualListenerRegistryManager.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/event/VirtualListenerRegistryManager.java
@@ -72,8 +72,10 @@
ListenerRegistry listenerRegistry =
listenerMapByNetwork.get(networkId).get(originalEvent.getClass());
- listenerRegistry.process(originalEvent);
- lastStart = listenerRegistry;
+ if (listenerRegistry != null) {
+ listenerRegistry.process(originalEvent);
+ lastStart = listenerRegistry;
+ }
}
@Override
diff --git a/incubator/api/src/test/java/org/onosproject/incubator/net/virtual/event/AbstractVirtualListenerManagerTest.java b/incubator/api/src/test/java/org/onosproject/incubator/net/virtual/event/AbstractVirtualListenerManagerTest.java
index 23934b5..6614941 100644
--- a/incubator/api/src/test/java/org/onosproject/incubator/net/virtual/event/AbstractVirtualListenerManagerTest.java
+++ b/incubator/api/src/test/java/org/onosproject/incubator/net/virtual/event/AbstractVirtualListenerManagerTest.java
@@ -38,6 +38,7 @@
import org.onosproject.incubator.net.virtual.VirtualNetworkService;
import org.onosproject.incubator.net.virtual.VirtualPort;
import org.onosproject.net.DeviceId;
+import org.osgi.framework.BundleContext;
import java.util.ArrayList;
import java.util.List;
@@ -52,24 +53,22 @@
*/
public class AbstractVirtualListenerManagerTest {
- private VirtualNetworkService manager;
-
- TestEventDispatcher dispatcher = new TestEventDispatcher();
- VirtualListenerRegistryManager listenerRegistryManager =
+ private TestEventDispatcher dispatcher = new TestEventDispatcher();
+ private VirtualListenerRegistryManager listenerRegistryManager =
VirtualListenerRegistryManager.getInstance();
- PrickleManager prickleManager;
- PrickleListener prickleListener;
+ private PrickleManager prickleManager;
+ private PrickleListener prickleListener;
- GooManager gooManager;
- GooListener gooListener;
+ private GooManager gooManager;
+ private GooListener gooListener;
- BarManager barManager;
- BarListener barListener;
+ private BarManager barManager;
+ private BarListener barListener;
@Before
public void setUp() {
- manager = new TestVirtualNetworkManager();
+ VirtualNetworkService manager = new TestVirtualNetworkManager();
dispatcher.addSink(VirtualEvent.class, listenerRegistryManager);
@@ -153,25 +152,25 @@
private enum Type { FOO }
private static class Thing extends AbstractEvent<Type, String> {
- protected Thing(String subject) {
+ private Thing(String subject) {
super(Type.FOO, subject);
}
}
private static class Prickle extends Thing {
- protected Prickle(String subject) {
+ private Prickle(String subject) {
super(subject);
}
}
private static class Goo extends Thing {
- protected Goo(String subject) {
+ private Goo(String subject) {
super(subject);
}
}
private static class Bar extends Thing {
- protected Bar(String subject) {
+ private Bar(String subject) {
super(subject);
}
}
@@ -198,19 +197,19 @@
private class PrickleManager extends AbstractVirtualListenerManager<Prickle, PrickleListener> {
public PrickleManager(VirtualNetworkService service, NetworkId networkId) {
- super(service, networkId);
+ super(service, networkId, Prickle.class);
}
}
private class GooManager extends AbstractVirtualListenerManager<Goo, GooListener> {
public GooManager(VirtualNetworkService service, NetworkId networkId) {
- super(service, networkId);
+ super(service, networkId, Goo.class);
}
}
private class BarManager extends AbstractVirtualListenerManager<Bar, BarListener> {
public BarManager(VirtualNetworkService service, NetworkId networkId) {
- super(service, networkId);
+ super(service, networkId, Bar.class);
}
}