mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-10-17 10:21:52 +02:00
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
This commit is contained in:
parent
0932ac5e56
commit
b14461bf48
@ -29,9 +29,7 @@ import org.onosproject.incubator.net.virtual.VnetService;
|
||||
*/
|
||||
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 @@ public abstract class AbstractVirtualListenerManager
|
||||
|
||||
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 abstract class AbstractVirtualListenerManager
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -72,8 +72,10 @@ public final class VirtualListenerRegistryManager
|
||||
|
||||
ListenerRegistry listenerRegistry =
|
||||
listenerMapByNetwork.get(networkId).get(originalEvent.getClass());
|
||||
listenerRegistry.process(originalEvent);
|
||||
lastStart = listenerRegistry;
|
||||
if (listenerRegistry != null) {
|
||||
listenerRegistry.process(originalEvent);
|
||||
lastStart = listenerRegistry;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -38,6 +38,7 @@ import org.onosproject.incubator.net.virtual.VirtualNetworkListener;
|
||||
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 @@ import static org.junit.Assert.*;
|
||||
*/
|
||||
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 @@ public class AbstractVirtualListenerManagerTest {
|
||||
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 @@ public class AbstractVirtualListenerManagerTest {
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -61,7 +61,7 @@ public class VirtualNetworkDeviceManager
|
||||
*/
|
||||
public VirtualNetworkDeviceManager(VirtualNetworkService virtualNetworkManager,
|
||||
NetworkId networkId) {
|
||||
super(virtualNetworkManager, networkId);
|
||||
super(virtualNetworkManager, networkId, DeviceEvent.class);
|
||||
manager.addListener(virtualNetworkListener);
|
||||
}
|
||||
|
||||
|
@ -112,7 +112,7 @@ public class VirtualNetworkFlowRuleManager
|
||||
*/
|
||||
public VirtualNetworkFlowRuleManager(VirtualNetworkService virtualNetworkManager,
|
||||
NetworkId networkId) {
|
||||
super(virtualNetworkManager, networkId);
|
||||
super(virtualNetworkManager, networkId, FlowRuleEvent.class);
|
||||
|
||||
store = serviceDirectory.get(VirtualNetworkFlowRuleStore.class);
|
||||
|
||||
|
@ -67,7 +67,7 @@ public class VirtualNetworkGroupManager
|
||||
private boolean purgeOnDisconnection = false;
|
||||
|
||||
public VirtualNetworkGroupManager(VirtualNetworkService manager, NetworkId networkId) {
|
||||
super(manager, networkId);
|
||||
super(manager, networkId, GroupEvent.class);
|
||||
|
||||
store = serviceDirectory.get(VirtualNetworkGroupStore.class);
|
||||
deviceService = manager.get(networkId, DeviceService.class);
|
||||
|
@ -57,7 +57,7 @@ public class VirtualNetworkHostManager
|
||||
*/
|
||||
public VirtualNetworkHostManager(VirtualNetworkService virtualNetworkManager,
|
||||
NetworkId networkId) {
|
||||
super(virtualNetworkManager, networkId);
|
||||
super(virtualNetworkManager, networkId, HostEvent.class);
|
||||
}
|
||||
|
||||
|
||||
|
@ -75,7 +75,7 @@ public class VirtualNetworkIntentManager
|
||||
public VirtualNetworkIntentManager(VirtualNetworkService virtualNetworkManager,
|
||||
NetworkId networkId) {
|
||||
|
||||
super(virtualNetworkManager, networkId);
|
||||
super(virtualNetworkManager, networkId, IntentEvent.class);
|
||||
|
||||
this.store = serviceDirectory.get(VirtualNetworkStore.class);
|
||||
this.intentService = serviceDirectory.get(IntentService.class);
|
||||
|
@ -51,7 +51,7 @@ public class VirtualNetworkLinkManager
|
||||
*/
|
||||
public VirtualNetworkLinkManager(VirtualNetworkService virtualNetworkManager,
|
||||
NetworkId networkId) {
|
||||
super(virtualNetworkManager, networkId);
|
||||
super(virtualNetworkManager, networkId, LinkEvent.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -142,10 +142,10 @@ public class VirtualNetworkManager
|
||||
|
||||
@Activate
|
||||
public void activate() {
|
||||
store.setDelegate(delegate);
|
||||
eventDispatcher.addSink(VirtualNetworkEvent.class, listenerRegistry);
|
||||
eventDispatcher.addSink(VirtualEvent.class,
|
||||
VirtualListenerRegistryManager.getInstance());
|
||||
store.setDelegate(delegate);
|
||||
intentService.addListener(intentListener);
|
||||
appId = coreService.registerApplication(VIRTUAL_NETWORK_APP_ID_STRING);
|
||||
log.info("Started");
|
||||
@ -364,6 +364,7 @@ public class VirtualNetworkManager
|
||||
private final Map<ServiceKey, VnetService> networkServices = Maps.newConcurrentMap();
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T> T get(NetworkId networkId, Class<T> serviceClass) {
|
||||
checkNotNull(networkId, NETWORK_NULL);
|
||||
ServiceKey serviceKey = networkServiceKey(networkId, serviceClass);
|
||||
@ -453,7 +454,7 @@ public class VirtualNetworkManager
|
||||
* @param networkId network identifier
|
||||
* @param serviceClass service class
|
||||
*/
|
||||
public ServiceKey(NetworkId networkId, Class serviceClass) {
|
||||
ServiceKey(NetworkId networkId, Class serviceClass) {
|
||||
|
||||
checkNotNull(networkId, NETWORK_NULL);
|
||||
this.networkId = networkId;
|
||||
|
@ -68,7 +68,7 @@ public class VirtualNetworkTopologyManager
|
||||
*/
|
||||
public VirtualNetworkTopologyManager(VirtualNetworkService virtualNetworkManager,
|
||||
NetworkId networkId) {
|
||||
super(virtualNetworkManager, networkId);
|
||||
super(virtualNetworkManager, networkId, TopologyEvent.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Loading…
x
Reference in New Issue
Block a user