You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by ti...@apache.org on 2021/09/07 16:17:35 UTC
[aries-typedevent] 01/01: Use the registering bundle to load the
event type
This is an automated email from the ASF dual-hosted git repository.
timothyjward pushed a commit to branch fix/caps
in repository https://gitbox.apache.org/repos/asf/aries-typedevent.git
commit f51b880bab8436cff9c66f34a98373efabdd4781
Author: Tim Ward <ti...@apache.org>
AuthorDate: Tue Sep 7 17:17:10 2021 +0100
Use the registering bundle to load the event type
---
.../bus/impl/TypedEventBusActivator.java | 7 ++-
.../typedevent/bus/impl/TypedEventBusImpl.java | 13 +++---
.../typedevent/bus/impl/TypedEventBusImplTest.java | 31 ++++++++-----
org.apache.aries.typedevent.bus/test.bndrun | 48 +++++++++----------
.../test.bndrun | 54 +++++++++++-----------
5 files changed, 82 insertions(+), 71 deletions(-)
diff --git a/org.apache.aries.typedevent.bus/src/main/java/org/apache/aries/typedevent/bus/impl/TypedEventBusActivator.java b/org.apache.aries.typedevent.bus/src/main/java/org/apache/aries/typedevent/bus/impl/TypedEventBusActivator.java
index 06bc1d3..43a7b04 100644
--- a/org.apache.aries.typedevent.bus/src/main/java/org/apache/aries/typedevent/bus/impl/TypedEventBusActivator.java
+++ b/org.apache.aries.typedevent.bus/src/main/java/org/apache/aries/typedevent/bus/impl/TypedEventBusActivator.java
@@ -93,18 +93,21 @@ public class TypedEventBusActivator implements BundleActivator {
serviceReferences(TypedEventHandler.class,
csr -> {
tebi.updatedTypedEventHandler(
+ csr.getServiceReference().getBundle(),
getServiceProps(csr.getServiceReference()));
return false;
})
.flatMap(csr -> service(csr)
.effects(
- handler -> tebi.addTypedEventHandler(handler,
+ handler -> tebi.addTypedEventHandler(
+ csr.getServiceReference().getBundle(),
+ handler,
getServiceProps(csr.getServiceReference())),
handler -> tebi.removeTypedEventHandler(handler,
getServiceProps(csr.getServiceReference())))),
serviceReferences(UntypedEventHandler.class,
csr -> {
- tebi.updatedTypedEventHandler(
+ tebi.updatedUntypedEventHandler(
getServiceProps(csr.getServiceReference()));
return false;
})
diff --git a/org.apache.aries.typedevent.bus/src/main/java/org/apache/aries/typedevent/bus/impl/TypedEventBusImpl.java b/org.apache.aries.typedevent.bus/src/main/java/org/apache/aries/typedevent/bus/impl/TypedEventBusImpl.java
index 4cb74e6..f7c5729 100644
--- a/org.apache.aries.typedevent.bus/src/main/java/org/apache/aries/typedevent/bus/impl/TypedEventBusImpl.java
+++ b/org.apache.aries.typedevent.bus/src/main/java/org/apache/aries/typedevent/bus/impl/TypedEventBusImpl.java
@@ -41,6 +41,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Stream;
import org.osgi.annotation.bundle.Capability;
+import org.osgi.framework.Bundle;
import org.osgi.framework.Constants;
import org.osgi.framework.Filter;
import org.osgi.framework.FrameworkUtil;
@@ -118,20 +119,20 @@ public class TypedEventBusImpl implements TypedEventBus {
this.monitorImpl = monitorImpl;
}
- void addTypedEventHandler(TypedEventHandler<?> handler, Map<String, Object> properties) {
- Class<?> clazz = discoverTypeForTypedHandler(handler, properties);
+ void addTypedEventHandler(Bundle registeringBundle, TypedEventHandler<?> handler, Map<String, Object> properties) {
+ Class<?> clazz = discoverTypeForTypedHandler(registeringBundle, handler, properties);
String defaultTopic = clazz == null ? null : clazz.getName().replace(".", "/");
doAddEventHandler(topicsToTypedHandlers, knownTypedHandlers, handler, defaultTopic, properties);
}
- private Class<?> discoverTypeForTypedHandler(TypedEventHandler<?> handler, Map<String, Object> properties) {
+ private Class<?> discoverTypeForTypedHandler(Bundle registeringBundle, TypedEventHandler<?> handler, Map<String, Object> properties) {
Class<?> clazz = null;
Object type = properties.get(TypedEventConstants.TYPED_EVENT_TYPE);
if (type != null) {
try {
- clazz = handler.getClass().getClassLoader().loadClass(String.valueOf(type));
+ clazz = registeringBundle.loadClass(String.valueOf(type));
} catch (ClassNotFoundException e) {
// TODO Blow up
e.printStackTrace();
@@ -293,14 +294,14 @@ public class TypedEventBusImpl implements TypedEventBus {
}
}
- void updatedTypedEventHandler(Map<String, Object> properties) {
+ void updatedTypedEventHandler(Bundle registeringBundle, Map<String, Object> properties) {
Long serviceId = getServiceId(properties);
TypedEventHandler<?> handler;
synchronized (lock) {
handler = knownTypedHandlers.get(serviceId);
}
- Class<?> clazz = discoverTypeForTypedHandler(handler, properties);
+ Class<?> clazz = discoverTypeForTypedHandler(registeringBundle, handler, properties);
String defaultTopic = clazz == null ? null : clazz.getName().replace(".", "/");
diff --git a/org.apache.aries.typedevent.bus/src/test/java/org/apache/aries/typedevent/bus/impl/TypedEventBusImplTest.java b/org.apache.aries.typedevent.bus/src/test/java/org/apache/aries/typedevent/bus/impl/TypedEventBusImplTest.java
index 7372c7c..9566b6d 100644
--- a/org.apache.aries.typedevent.bus/src/test/java/org/apache/aries/typedevent/bus/impl/TypedEventBusImplTest.java
+++ b/org.apache.aries.typedevent.bus/src/test/java/org/apache/aries/typedevent/bus/impl/TypedEventBusImplTest.java
@@ -39,6 +39,7 @@ import org.mockito.ArgumentMatcher;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
+import org.osgi.framework.Bundle;
import org.osgi.framework.Constants;
import org.osgi.service.typedevent.TypedEventHandler;
import org.osgi.service.typedevent.UnhandledEventHandler;
@@ -63,6 +64,9 @@ public class TypedEventBusImplTest {
}
@Mock(lenient = true)
+ Bundle registeringBundle;
+
+ @Mock(lenient = true)
TypedEventHandler<Object> handlerA, handlerB;
@Mock(lenient = true)
@@ -80,10 +84,13 @@ public class TypedEventBusImplTest {
private AutoCloseable mocks;
@BeforeEach
- public void start() {
+ public void start() throws ClassNotFoundException {
mocks = MockitoAnnotations.openMocks(this);
+ Mockito.doAnswer(i -> TestEvent.class.getClassLoader().loadClass(i.getArgument(0, String.class)))
+ .when(registeringBundle).loadClass(Mockito.anyString());
+
Mockito.doAnswer(i -> {
semA.release();
return null;
@@ -139,7 +146,7 @@ public class TypedEventBusImplTest {
serviceProperties.put(TYPED_EVENT_TYPE, TestEvent.class.getName());
serviceProperties.put(SERVICE_ID, 42L);
- impl.addTypedEventHandler(handlerA, serviceProperties);
+ impl.addTypedEventHandler(registeringBundle, handlerA, serviceProperties);
serviceProperties = new HashMap<>();
@@ -147,7 +154,7 @@ public class TypedEventBusImplTest {
serviceProperties.put(TYPED_EVENT_TYPE, TestEvent2.class.getName());
serviceProperties.put(SERVICE_ID, 43L);
- impl.addTypedEventHandler(handlerB, serviceProperties);
+ impl.addTypedEventHandler(registeringBundle, handlerB, serviceProperties);
serviceProperties = new HashMap<>();
@@ -211,20 +218,20 @@ public class TypedEventBusImplTest {
Map<String, Object> serviceProperties = new HashMap<>();
serviceProperties.put(SERVICE_ID, 42L);
- impl.addTypedEventHandler(handler, serviceProperties);
+ impl.addTypedEventHandler(registeringBundle, handler, serviceProperties);
serviceProperties = new HashMap<>();
serviceProperties.put(TYPED_EVENT_TYPE, SpecialTestEvent.class.getName());
serviceProperties.put(SERVICE_ID, 43L);
- impl.addTypedEventHandler(handler2, serviceProperties);
+ impl.addTypedEventHandler(registeringBundle, handler2, serviceProperties);
serviceProperties = new HashMap<>();
serviceProperties.put(SERVICE_ID, 44L);
- impl.addTypedEventHandler(handler3, serviceProperties);
+ impl.addTypedEventHandler(registeringBundle, handler3, serviceProperties);
impl.deliver(event);
@@ -265,7 +272,7 @@ public class TypedEventBusImplTest {
serviceProperties.put(TYPED_EVENT_TYPE, TestEvent.class.getName());
serviceProperties.put(SERVICE_ID, 42L);
- impl.addTypedEventHandler(handlerA, serviceProperties);
+ impl.addTypedEventHandler(registeringBundle, handlerA, serviceProperties);
serviceProperties = new HashMap<>();
@@ -273,7 +280,7 @@ public class TypedEventBusImplTest {
serviceProperties.put(TYPED_EVENT_TYPE, TestEvent2.class.getName());
serviceProperties.put(SERVICE_ID, 43L);
- impl.addTypedEventHandler(handlerB, serviceProperties);
+ impl.addTypedEventHandler(registeringBundle, handlerB, serviceProperties);
serviceProperties = new HashMap<>();
@@ -322,7 +329,7 @@ public class TypedEventBusImplTest {
serviceProperties.put(TYPED_EVENT_FILTER, "(message=foo)");
serviceProperties.put(SERVICE_ID, 42L);
- impl.addTypedEventHandler(handlerA, serviceProperties);
+ impl.addTypedEventHandler(registeringBundle, handlerA, serviceProperties);
serviceProperties = new HashMap<>();
@@ -331,7 +338,7 @@ public class TypedEventBusImplTest {
serviceProperties.put(TYPED_EVENT_FILTER, "(message=bar)");
serviceProperties.put(SERVICE_ID, 43L);
- impl.addTypedEventHandler(handlerB, serviceProperties);
+ impl.addTypedEventHandler(registeringBundle, handlerB, serviceProperties);
serviceProperties = new HashMap<>();
@@ -403,7 +410,7 @@ public class TypedEventBusImplTest {
serviceProperties.put(TYPED_EVENT_FILTER, "");
serviceProperties.put(SERVICE_ID, 42L);
- impl.addTypedEventHandler(handlerA, serviceProperties);
+ impl.addTypedEventHandler(registeringBundle, handlerA, serviceProperties);
TestEvent event = new TestEvent();
event.message = "foo";
@@ -428,7 +435,7 @@ public class TypedEventBusImplTest {
serviceProperties.put(TYPED_EVENT_FILTER, "(message=foo)");
serviceProperties.put(SERVICE_ID, 42L);
- impl.addTypedEventHandler(handlerA, serviceProperties);
+ impl.addTypedEventHandler(registeringBundle, handlerA, serviceProperties);
serviceProperties = new HashMap<>();
diff --git a/org.apache.aries.typedevent.bus/test.bndrun b/org.apache.aries.typedevent.bus/test.bndrun
index 6735898..30c45fb 100644
--- a/org.apache.aries.typedevent.bus/test.bndrun
+++ b/org.apache.aries.typedevent.bus/test.bndrun
@@ -27,27 +27,27 @@
-resolve.effective: active
-runbundles: \
- ch.qos.logback.classic;version='[1.2.3,1.2.4)',\
- ch.qos.logback.core;version='[1.2.3,1.2.4)',\
- org.apache.aries.component-dsl.component-dsl;version='[1.2.2,1.2.3)',\
- org.apache.aries.typedevent.bus;version='[0.0.1,0.0.2)',\
- org.apache.felix.configadmin;version='[1.9.18,1.9.19)',\
- org.apache.felix.converter;version='[1.0.14,1.0.15)',\
- org.osgi.service.typedevent;version='[1.0.0,1.0.1)',\
- org.osgi.util.function;version='[1.1.0,1.1.1)',\
- org.osgi.util.promise;version='[1.1.1,1.1.2)',\
- org.osgi.util.pushstream;version='[1.0.1,1.0.2)',\
- slf4j.api;version='[1.7.30,1.7.31)',\
- junit-jupiter-api;version='[5.6.2,5.6.3)',\
- junit-platform-commons;version='[1.6.2,1.6.3)',\
- net.bytebuddy.byte-buddy;version='[1.10.13,1.10.14)',\
- net.bytebuddy.byte-buddy-agent;version='[1.10.13,1.10.14)',\
- org.apache.aries.typedevent.bus-tests;version='[0.0.1,0.0.2)',\
- org.mockito.mockito-core;version='[3.5.10,3.5.11)',\
- org.objenesis;version='[3.1.0,3.1.1)',\
- org.opentest4j;version='[1.2.0,1.2.1)',\
- org.osgi.test.common;version='[0.9.0,0.9.1)',\
- org.osgi.test.junit5;version='[0.9.0,0.9.1)',\
- junit-platform-engine;version='[1.6.2,1.6.3)',\
- junit-platform-launcher;version='[1.6.2,1.6.3)',\
- junit-jupiter-engine;version='[5.6.2,5.6.3)'
\ No newline at end of file
+ ch.qos.logback.classic;version='[1.2.3,1.2.4)',\
+ ch.qos.logback.core;version='[1.2.3,1.2.4)',\
+ org.apache.aries.component-dsl.component-dsl;version='[1.2.2,1.2.3)',\
+ org.apache.aries.typedevent.bus;version='[0.0.1,0.0.2)',\
+ org.apache.felix.configadmin;version='[1.9.18,1.9.19)',\
+ org.apache.felix.converter;version='[1.0.14,1.0.15)',\
+ org.osgi.service.typedevent;version='[1.0.0,1.0.1)',\
+ org.osgi.util.function;version='[1.1.0,1.1.1)',\
+ org.osgi.util.promise;version='[1.1.1,1.1.2)',\
+ org.osgi.util.pushstream;version='[1.0.1,1.0.2)',\
+ slf4j.api;version='[1.7.30,1.7.31)',\
+ junit-jupiter-api;version='[5.6.2,5.6.3)',\
+ junit-platform-commons;version='[1.6.2,1.6.3)',\
+ net.bytebuddy.byte-buddy;version='[1.10.13,1.10.14)',\
+ net.bytebuddy.byte-buddy-agent;version='[1.10.13,1.10.14)',\
+ org.apache.aries.typedevent.bus-tests;version='[0.0.1,0.0.2)',\
+ org.mockito.mockito-core;version='[3.5.10,3.5.11)',\
+ org.objenesis;version='[3.1.0,3.1.1)',\
+ org.opentest4j;version='[1.2.0,1.2.1)',\
+ org.osgi.test.common;version='[0.9.0,0.9.1)',\
+ org.osgi.test.junit5;version='[0.9.0,0.9.1)',\
+ junit-platform-engine;version='[1.6.2,1.6.3)',\
+ junit-platform-launcher;version='[1.6.2,1.6.3)',\
+ junit-jupiter-engine;version='[5.6.2,5.6.3)'
\ No newline at end of file
diff --git a/org.apache.aries.typedevent.remote/org.apache.aries.typedevent.remote.remoteservices/test.bndrun b/org.apache.aries.typedevent.remote/org.apache.aries.typedevent.remote.remoteservices/test.bndrun
index 704e7b4..9729e07 100644
--- a/org.apache.aries.typedevent.remote/org.apache.aries.typedevent.remote.remoteservices/test.bndrun
+++ b/org.apache.aries.typedevent.remote/org.apache.aries.typedevent.remote.remoteservices/test.bndrun
@@ -27,30 +27,30 @@
-resolve.effective: active
-runbundles: \
- ch.qos.logback.classic;version='[1.2.3,1.2.4)',\
- ch.qos.logback.core;version='[1.2.3,1.2.4)',\
- org.apache.aries.component-dsl.component-dsl;version='[1.2.2,1.2.3)',\
- org.apache.felix.configadmin;version='[1.9.18,1.9.19)',\
- org.apache.felix.converter;version='[1.0.14,1.0.15)',\
- org.osgi.service.typedevent;version='[1.0.0,1.0.1)',\
- org.osgi.util.function;version='[1.1.0,1.1.1)',\
- org.osgi.util.promise;version='[1.1.1,1.1.2)',\
- org.osgi.util.pushstream;version='[1.0.1,1.0.2)',\
- slf4j.api;version='[1.7.30,1.7.31)',\
- junit-jupiter-api;version='[5.6.2,5.6.3)',\
- junit-platform-commons;version='[1.6.2,1.6.3)',\
- net.bytebuddy.byte-buddy;version='[1.10.13,1.10.14)',\
- net.bytebuddy.byte-buddy-agent;version='[1.10.13,1.10.14)',\
- org.mockito.mockito-core;version='[3.5.10,3.5.11)',\
- org.objenesis;version='[3.1.0,3.1.1)',\
- org.opentest4j;version='[1.2.0,1.2.1)',\
- org.osgi.test.common;version='[0.9.0,0.9.1)',\
- org.osgi.test.junit5;version='[0.9.0,0.9.1)',\
- junit-platform-engine;version='[1.6.2,1.6.3)',\
- junit-platform-launcher;version='[1.6.2,1.6.3)',\
- junit-jupiter-engine;version='[5.6.2,5.6.3)',\
- org.apache.aries.typedevent.remote.api;version='[0.0.1,0.0.2)',\
- org.apache.aries.typedevent.remote.remoteservices;version='[0.0.1,0.0.2)',\
- org.apache.aries.typedevent.remote.remoteservices-tests;version='[0.0.1,0.0.2)',\
- org.apache.aries.typedevent.remote.spi;version='[0.0.1,0.0.2)',\
- org.apache.aries.typedevent.bus;version='[0.0.1,0.0.2)'
+ ch.qos.logback.classic;version='[1.2.3,1.2.4)',\
+ ch.qos.logback.core;version='[1.2.3,1.2.4)',\
+ org.apache.aries.component-dsl.component-dsl;version='[1.2.2,1.2.3)',\
+ org.apache.felix.configadmin;version='[1.9.18,1.9.19)',\
+ org.apache.felix.converter;version='[1.0.14,1.0.15)',\
+ org.osgi.service.typedevent;version='[1.0.0,1.0.1)',\
+ org.osgi.util.function;version='[1.1.0,1.1.1)',\
+ org.osgi.util.promise;version='[1.1.1,1.1.2)',\
+ org.osgi.util.pushstream;version='[1.0.1,1.0.2)',\
+ slf4j.api;version='[1.7.30,1.7.31)',\
+ junit-jupiter-api;version='[5.6.2,5.6.3)',\
+ junit-platform-commons;version='[1.6.2,1.6.3)',\
+ net.bytebuddy.byte-buddy;version='[1.10.13,1.10.14)',\
+ net.bytebuddy.byte-buddy-agent;version='[1.10.13,1.10.14)',\
+ org.mockito.mockito-core;version='[3.5.10,3.5.11)',\
+ org.objenesis;version='[3.1.0,3.1.1)',\
+ org.opentest4j;version='[1.2.0,1.2.1)',\
+ org.osgi.test.common;version='[0.9.0,0.9.1)',\
+ org.osgi.test.junit5;version='[0.9.0,0.9.1)',\
+ junit-platform-engine;version='[1.6.2,1.6.3)',\
+ junit-platform-launcher;version='[1.6.2,1.6.3)',\
+ junit-jupiter-engine;version='[5.6.2,5.6.3)',\
+ org.apache.aries.typedevent.remote.api;version='[0.0.1,0.0.2)',\
+ org.apache.aries.typedevent.remote.remoteservices;version='[0.0.1,0.0.2)',\
+ org.apache.aries.typedevent.remote.remoteservices-tests;version='[0.0.1,0.0.2)',\
+ org.apache.aries.typedevent.remote.spi;version='[0.0.1,0.0.2)',\
+ org.apache.aries.typedevent.bus;version='[0.0.1,0.0.2)'