You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by ro...@apache.org on 2019/12/04 22:00:30 UTC

[aries-cdi] branch master updated: jndi test

This is an automated email from the ASF dual-hosted git repository.

rotty3000 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git


The following commit(s) were added to refs/heads/master by this push:
     new ccf2123  jndi test
     new 2fa289a  Merge pull request #18 from rotty3000/fix.tests
ccf2123 is described below

commit ccf212302b8c032aa580f3526e282ab1f1fb5182
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Tue Dec 3 11:43:38 2019 -0500

    jndi test
    
    Signed-off-by: Raymond Augé <ro...@apache.org>
---
 cdi-bom/pom.xml                                    |   2 +-
 .../internal/container/ContainerState.java         |   5 +
 .../internal/phase/ExtensionPhaseTest.java         |  10 +-
 cdi-itests/bnd.bnd                                 |   3 +-
 cdi-itests/bnd/tb21.bnd                            |  13 +++
 .../apache/aries/cdi/test/beans/package-info.java  |   6 -
 .../aries/cdi/test/cases/JndiExtensionTests.java   |  28 +++--
 .../apache/aries/cdi/test/cases/Test152_3_1_1.java | 128 ++++++++++++---------
 .../test/{beans/package-info.java => tb21/A.java}  |  27 ++++-
 9 files changed, 143 insertions(+), 79 deletions(-)

diff --git a/cdi-bom/pom.xml b/cdi-bom/pom.xml
index f1b0a15..489acb7 100644
--- a/cdi-bom/pom.xml
+++ b/cdi-bom/pom.xml
@@ -132,7 +132,7 @@
 			<dependency>
 				<groupId>org.eclipse.platform</groupId>
 				<artifactId>org.eclipse.osgi</artifactId>
-				<version>3.13.200</version>
+				<version>3.15.0</version>
 				<scope>runtime</scope>
 			</dependency>
 			<dependency>
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java
index bb77503..1f8e157 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java
@@ -365,6 +365,11 @@ public class ContainerState {
 		return promise;
 	}
 
+	@Override
+	public String toString() {
+		return _bundle.toString();
+	}
+
 	private final BundleClassLoader _aggregateClassLoader;
 	private volatile Deferred<BeanManager> _beanManagerDeferred;
 	private final BeansModel _beansModel;
diff --git a/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/ExtensionPhaseTest.java b/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/ExtensionPhaseTest.java
index c3e7a98..39eb794 100644
--- a/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/ExtensionPhaseTest.java
+++ b/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/ExtensionPhaseTest.java
@@ -14,9 +14,13 @@
 
 package org.apache.aries.cdi.container.internal.phase;
 
-import static org.apache.aries.cdi.container.internal.util.Reflection.*;
-import static org.junit.Assert.*;
-import static org.mockito.Mockito.*;
+import static org.apache.aries.cdi.container.internal.util.Reflection.cast;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 import java.util.Arrays;
 import java.util.Collection;
diff --git a/cdi-itests/bnd.bnd b/cdi-itests/bnd.bnd
index 1c801b6..cf366ef 100644
--- a/cdi-itests/bnd.bnd
+++ b/cdi-itests/bnd.bnd
@@ -62,7 +62,8 @@ p = org.apache.aries.cdi.test
 	tb17.jar,\
 	tb18.jar,\
 	tb19.jar,\
-	tb20.jar
+	tb20.jar,\
+	tb21.jar
 
 # Don't forget that we had to coax the `maven-jar-plugin` NOT to include the `sub-bundle` packages in
 # the root bundle:
diff --git a/cdi-itests/bnd/tb21.bnd b/cdi-itests/bnd/tb21.bnd
new file mode 100644
index 0000000..9fb36bf
--- /dev/null
+++ b/cdi-itests/bnd/tb21.bnd
@@ -0,0 +1,13 @@
+#    Licensed under the Apache License, Version 2.0 (the "License");
+#    you may not use this file except in compliance with the License.
+#    You may obtain a copy of the License at
+#
+#        http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS,
+#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#    See the License for the specific language governing permissions and
+#    limitations under the License.
+
+Export-Package: ${p}.tb21.*;-split-package:=first
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/package-info.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/package-info.java
index ea059f0..d99def2 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/package-info.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/package-info.java
@@ -13,12 +13,6 @@
  */
 
 @Beans
-@Requirement(
-	namespace = CDIConstants.CDI_EXTENSION_PROPERTY,
-	name = "aries.cdi.jndi"
-)
 package org.apache.aries.cdi.test.beans;
 
-import org.osgi.annotation.bundle.Requirement;
-import org.osgi.service.cdi.CDIConstants;
 import org.osgi.service.cdi.annotations.Beans;
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/JndiExtensionTests.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/JndiExtensionTests.java
index ce06d32..c0445c7 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/JndiExtensionTests.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/JndiExtensionTests.java
@@ -28,18 +28,23 @@ import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleEvent;
 import org.osgi.framework.wiring.BundleWiring;
 import org.osgi.util.tracker.BundleTracker;
+import org.osgi.util.tracker.ServiceTracker;
 
-public class JndiExtensionTests extends AbstractTestCase {
+public class JndiExtensionTests extends SlimTestCase {
 
 	@Ignore("I think there's an issue with Aries JNDI. It doesn't work well with service objects")
 	@Test
 	public void testGetBeanManagerThroughJNDI() throws Exception {
-		assertNotNull(getBeanManager(cdiBundle));
+		Bundle testBundle = installBundle("tb21.jar", false);
+
+		testBundle.start();
+
+		assertNotNull(getBeanManager(testBundle));
 
 		Thread currentThread = Thread.currentThread();
 		ClassLoader contextClassLoader = currentThread.getContextClassLoader();
 		try {
-			BundleWiring bundleWiring = cdiBundle.adapt(BundleWiring.class);
+			BundleWiring bundleWiring = testBundle.adapt(BundleWiring.class);
 			currentThread.setContextClassLoader(bundleWiring.getClassLoader());
 
 			BeanManager beanManager = (BeanManager)InitialContext.doLookup("java:comp/BeanManager");
@@ -65,12 +70,20 @@ public class JndiExtensionTests extends AbstractTestCase {
 		};
 		bundleTracker.open();
 
+		Bundle testBundle = installBundle("tb21.jar", false);
+
+		testBundle.start();
+
+		ServiceTracker<Pojo, Pojo> st = new ServiceTracker<Pojo, Pojo>(
+			bundleContext, Pojo.class, null);
+		st.open(true);
+
 		try {
 			assertFalse(bundleTracker.isEmpty());
 
 			Bundle extensionBundle = bundleTracker.getBundles()[0];
 
-			try (CloseableTracker<BeanManager, BeanManager> bmTracker = trackBM(cdiBundle);) {
+			try (CloseableTracker<BeanManager, BeanManager> bmTracker = trackBM(testBundle);) {
 				assertNotNull(bmTracker.waitForService(timeout));
 
 				extensionBundle.stop();
@@ -79,18 +92,19 @@ public class JndiExtensionTests extends AbstractTestCase {
 					Thread.sleep(100);
 				}
 
-				assertThat(bmTracker).matches(CloseableTracker::isEmpty);
+				assertThat(bmTracker).matches(CloseableTracker::isEmpty, "Is empty");
 
 				extensionBundle.start();
 
-				for (int i = 20; (i > 0) && bmTracker.isEmpty(); i--) {
+				for (int i = 100; (i > 0) && bmTracker.isEmpty(); i--) {
 					Thread.sleep(100);
 				}
 
-				assertThat(bmTracker).matches(c -> !c.isEmpty());
+				assertThat(bmTracker).matches(c -> !c.isEmpty(), "Not empty");
 			}
 		}
 		finally {
+			testBundle.uninstall();
 			bundleTracker.close();
 		}
 	}
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/Test152_3_1_1.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/Test152_3_1_1.java
index ca30927..92618ff 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/Test152_3_1_1.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/Test152_3_1_1.java
@@ -60,9 +60,9 @@ public class Test152_3_1_1 extends SlimTestCase {
 		AtomicReference<Deferred<Object[]>> b = new AtomicReference<>(new Deferred<>());
 		AtomicReference<Deferred<Object[]>> c = new AtomicReference<>(new Deferred<>());
 
-		Consumer<Object[]> onInitialized = (o) -> a.get().resolve(o);
-		Consumer<Object[]> onBeforeDestroyed = (o) -> b.get().resolve(o);
-		Consumer<Object[]> onDestroyed = (o) -> c.get().resolve(o);
+		Consumer<Object[]> onInitialized = (o) -> {try {a.get().resolve(o);} catch (Exception e) {}};
+		Consumer<Object[]> onBeforeDestroyed = (o) -> {try {b.get().resolve(o);} catch (Exception e) {}};
+		Consumer<Object[]> onDestroyed = (o) -> {try {c.get().resolve(o);} catch (Exception e) {}};
 
 		ServiceRegistration<Consumer> onInitializedReg = bundleContext.registerService(
 			Consumer.class, onInitialized,
@@ -96,6 +96,8 @@ public class Test152_3_1_1 extends SlimTestCase {
 				a.get().getPromise().timeout(timeout).then(assertFailed).getFailure();
 
 				configuration = configurationAdmin.getConfiguration("prototypeFactory", "?");
+
+				// this will trigger the onInitialized because of the tracker
 				configuration.update(new Hashtable() {{put("foo", "bar");}});
 
 				// should only work with single configuration instances
@@ -108,11 +110,12 @@ public class Test152_3_1_1 extends SlimTestCase {
 
 				assertThat(tracker.waitForService(50)).isNotNull();
 
-				// we still didn't do a "get" so this should still fail
-				a.get().getPromise().timeout(timeout).then(assertFailed).getFailure();
-
 				ServiceObjects<Object> serviceObjects = bundleContext.getServiceObjects(tracker.getService());
 
+				a.set(new Deferred<>());
+				b.set(new Deferred<>());
+				c.set(new Deferred<>());
+
 				Object service = serviceObjects.getService();
 				assertThat(service).isNotNull();
 
@@ -212,7 +215,6 @@ public class Test152_3_1_1 extends SlimTestCase {
 					s -> {
 						Object[] values = s.getValue();
 
-						assertThat(other).isEqualTo(values[0]);
 						assertThat((Map<String, Object>)values[1]).contains(
 							entry("component.name", "prototypeFactory")
 						).contains(
@@ -232,7 +234,6 @@ public class Test152_3_1_1 extends SlimTestCase {
 					s -> {
 						Object[] values = s.getValue();
 
-						assertThat(other).isEqualTo(values[0]);
 						assertThat((Map<String, Object>)values[1]).contains(
 							entry("component.name", "prototypeFactory")
 						).contains(
@@ -276,9 +277,11 @@ public class Test152_3_1_1 extends SlimTestCase {
 		AtomicReference<Deferred<Object[]>> b = new AtomicReference<>(new Deferred<>());
 		AtomicReference<Deferred<Object[]>> c = new AtomicReference<>(new Deferred<>());
 
-		Consumer<Object[]> onInitialized = (o) -> a.get().resolve(o);
-		Consumer<Object[]> onBeforeDestroyed = (o) -> b.get().resolve(o);
-		Consumer<Object[]> onDestroyed = (o) -> c.get().resolve(o);
+		Consumer<Object[]> onInitialized = (o) -> {
+			try {
+				a.get().resolve(o);} catch (Exception e) {}};
+		Consumer<Object[]> onBeforeDestroyed = (o) -> {try {b.get().resolve(o);} catch (Exception e) {}};
+		Consumer<Object[]> onDestroyed = (o) -> {try {c.get().resolve(o);} catch (Exception e) {}};
 
 		ServiceRegistration<Consumer> onInitializedReg = bundleContext.registerService(
 			Consumer.class, onInitialized,
@@ -312,23 +315,39 @@ public class Test152_3_1_1 extends SlimTestCase {
 				a.get().getPromise().timeout(timeout).then(assertFailed).getFailure();
 
 				configuration = configurationAdmin.getConfiguration("prototypeSingle_C", "?");
+
+				// this will trigger the onInitialized because of the tracker
 				configuration.update(new Hashtable() {{put("foo", "bar");}});
 
-				assertThat(tracker.waitForService(50)).isNotNull();
+				a.get().getPromise().timeout(timeout).then(
+					s -> {
+						Object[] values = s.getValue();
 
-				// we still didn't do a "get" so this should still fail
-				a.get().getPromise().timeout(timeout).then(assertFailed).getFailure();
+						assertThat((Map<String, Object>)values[1]).contains(
+							entry("component.name", "prototypeSingle_C")
+						).contains(
+							entry("foo", "bar")
+						);
+
+						return s;
+					},
+					f -> fail(f.toString())
+				).getValue();
+				b.get().getPromise().timeout(timeout).then(assertFailed).getFailure();
+				c.get().getPromise().timeout(timeout).then(assertFailed).getFailure();
+
+				a.set(new Deferred<>());
 
 				ServiceObjects<Object> serviceObjects = bundleContext.getServiceObjects(tracker.getService());
 
-				Object service = serviceObjects.getService();
-				assertThat(service).isNotNull();
+				Object instance1 = serviceObjects.getService();
+				assertThat(instance1).isNotNull();
 
 				a.get().getPromise().timeout(timeout).then(
 					s -> {
 						Object[] values = s.getValue();
 
-						assertThat(service).isEqualTo(values[0]);
+						assertThat(instance1).isEqualTo(values[0]);
 						assertThat((Map<String, Object>)values[1]).contains(
 							entry("component.name", "prototypeSingle_C")
 						).contains(
@@ -344,14 +363,14 @@ public class Test152_3_1_1 extends SlimTestCase {
 
 				a.set(new Deferred<>());
 
-				Object other = serviceObjects.getService();
-				assertThat(other).isNotNull();
+				Object instance2 = serviceObjects.getService();
+				assertThat(instance2).isNotNull();
 
 				a.get().getPromise().timeout(timeout).then(
 					s -> {
 						Object[] values = s.getValue();
 
-						assertThat(other).isEqualTo(values[0]);
+						assertThat(instance2).isEqualTo(values[0]);
 						assertThat((Map<String, Object>)values[1]).contains(
 							entry("component.name", "prototypeSingle_C")
 						).contains(
@@ -365,15 +384,15 @@ public class Test152_3_1_1 extends SlimTestCase {
 				b.get().getPromise().timeout(timeout).then(assertFailed).getFailure();
 				c.get().getPromise().timeout(timeout).then(assertFailed).getFailure();
 
-				assertThat(service).isNotEqualTo(other);
+				assertThat(instance1).isNotEqualTo(instance2);
 
-				serviceObjects.ungetService(service);
+				serviceObjects.ungetService(instance1);
 
 				b.get().getPromise().timeout(timeout).then(
 					s -> {
 						Object[] values = s.getValue();
 
-						assertThat(service).isEqualTo(values[0]);
+						assertThat(instance1).isEqualTo(values[0]);
 						assertThat((Map<String, Object>)values[1]).contains(
 							entry("component.name", "prototypeSingle_C")
 						);
@@ -387,7 +406,7 @@ public class Test152_3_1_1 extends SlimTestCase {
 					s -> {
 						Object[] values = s.getValue();
 
-						assertThat(service).isEqualTo(values[0]);
+						assertThat(instance1).isEqualTo(values[0]);
 						assertThat((Map<String, Object>)values[1]).contains(
 							entry("component.name", "prototypeSingle_C")
 						);
@@ -406,7 +425,6 @@ public class Test152_3_1_1 extends SlimTestCase {
 					s -> {
 						Object[] values = s.getValue();
 
-						assertThat(other).isEqualTo(values[0]);
 						assertThat((Map<String, Object>)values[1]).contains(
 							entry("component.name", "prototypeSingle_C")
 						);
@@ -420,7 +438,6 @@ public class Test152_3_1_1 extends SlimTestCase {
 					s -> {
 						Object[] values = s.getValue();
 
-						assertThat(other).isEqualTo(values[0]);
 						assertThat((Map<String, Object>)values[1]).contains(
 							entry("component.name", "prototypeSingle_C")
 						);
@@ -458,9 +475,9 @@ public class Test152_3_1_1 extends SlimTestCase {
 		AtomicReference<Deferred<Object[]>> b = new AtomicReference<>(new Deferred<>());
 		AtomicReference<Deferred<Object[]>> c = new AtomicReference<>(new Deferred<>());
 
-		Consumer<Object[]> onInitialized = (o) -> a.get().resolve(o);
-		Consumer<Object[]> onBeforeDestroyed = (o) -> b.get().resolve(o);
-		Consumer<Object[]> onDestroyed = (o) -> c.get().resolve(o);
+		Consumer<Object[]> onInitialized = (o) -> {try {a.get().resolve(o);} catch (Exception e) {}};
+		Consumer<Object[]> onBeforeDestroyed = (o) -> {try {b.get().resolve(o);} catch (Exception e) {}};
+		Consumer<Object[]> onDestroyed = (o) -> {try {c.get().resolve(o);} catch (Exception e) {}};
 
 		ServiceRegistration<Consumer> onInitializedReg = bundleContext.registerService(
 			Consumer.class, onInitialized,
@@ -489,11 +506,10 @@ public class Test152_3_1_1 extends SlimTestCase {
 			try (CloseableTracker<Object, ServiceReference<Object>> tracker = trackSR("(objectClass=%s)", Pojo.class.getName())) {
 				assertThat(tracker.waitForService(50)).isNotNull();
 
-				// we didn't do a "get" yet
-				a.get().getPromise().timeout(timeout).then(assertFailed).getFailure();
-
 				ServiceObjects<Object> serviceObjects = bundleContext.getServiceObjects(tracker.getService());
 
+				a.set(new Deferred<>());
+
 				Object service = serviceObjects.getService();
 				assertThat(service).isNotNull();
 
@@ -619,9 +635,9 @@ public class Test152_3_1_1 extends SlimTestCase {
 		Deferred<Object[]> b = new Deferred<>();
 		Deferred<Object[]> c = new Deferred<>();
 
-		Consumer<Object[]> onInitialized = (o) -> a.resolve(o);
-		Consumer<Object[]> onBeforeDestroyed = (o) -> b.resolve(o);
-		Consumer<Object[]> onDestroyed = (o) -> c.resolve(o);
+		Consumer<Object[]> onInitialized = (o) -> {try {a.resolve(o);} catch (Exception e) {}};
+		Consumer<Object[]> onBeforeDestroyed = (o) -> {try {b.resolve(o);} catch (Exception e) {}};
+		Consumer<Object[]> onDestroyed = (o) -> {try {c.resolve(o);} catch (Exception e) {}};
 
 		ServiceRegistration<Consumer> onInitializedReg = bundleContext.registerService(
 			Consumer.class, onInitialized,
@@ -891,9 +907,9 @@ public class Test152_3_1_1 extends SlimTestCase {
 		Deferred<Object[]> b = new Deferred<>();
 		Deferred<Object[]> c = new Deferred<>();
 
-		Consumer<Object[]> onInitialized = (o) -> a.resolve(o);
-		Consumer<Object[]> onBeforeDestroyed = (o) -> b.resolve(o);
-		Consumer<Object[]> onDestroyed = (o) -> c.resolve(o);
+		Consumer<Object[]> onInitialized = (o) -> {try {a.resolve(o);} catch (Exception e) {}};
+		Consumer<Object[]> onBeforeDestroyed = (o) -> {try {b.resolve(o);} catch (Exception e) {}};
+		Consumer<Object[]> onDestroyed = (o) -> {try {c.resolve(o);} catch (Exception e) {}};
 
 		ServiceRegistration<Consumer> onInitializedReg = bundleContext.registerService(
 			Consumer.class, onInitialized,
@@ -985,9 +1001,9 @@ public class Test152_3_1_1 extends SlimTestCase {
 		Deferred<Object[]> b = new Deferred<>();
 		Deferred<Object[]> c = new Deferred<>();
 
-		Consumer<Object[]> onInitialized = (o) -> a.resolve(o);
-		Consumer<Object[]> onBeforeDestroyed = (o) -> b.resolve(o);
-		Consumer<Object[]> onDestroyed = (o) -> c.resolve(o);
+		Consumer<Object[]> onInitialized = (o) -> {try {a.resolve(o);} catch (Exception e) {}};
+		Consumer<Object[]> onBeforeDestroyed = (o) -> {try {b.resolve(o);} catch (Exception e) {}};
+		Consumer<Object[]> onDestroyed = (o) -> {try {c.resolve(o);} catch (Exception e) {}};
 
 		ServiceRegistration<Consumer> onInitializedReg = bundleContext.registerService(
 			Consumer.class, onInitialized,
@@ -1124,9 +1140,9 @@ public class Test152_3_1_1 extends SlimTestCase {
 		Deferred<Object[]> b = new Deferred<>();
 		Deferred<Object[]> c = new Deferred<>();
 
-		Consumer<Object[]> onInitialized = (o) -> a.resolve(o);
-		Consumer<Object[]> onBeforeDestroyed = (o) -> b.resolve(o);
-		Consumer<Object[]> onDestroyed = (o) -> c.resolve(o);
+		Consumer<Object[]> onInitialized = (o) -> {try {a.resolve(o);} catch (Exception e) {}};
+		Consumer<Object[]> onBeforeDestroyed = (o) -> {try {b.resolve(o);} catch (Exception e) {}};
+		Consumer<Object[]> onDestroyed = (o) -> {try {c.resolve(o);} catch (Exception e) {}};
 
 		ServiceRegistration<Consumer> onInitializedReg = bundleContext.registerService(
 			Consumer.class, onInitialized,
@@ -1248,9 +1264,9 @@ public class Test152_3_1_1 extends SlimTestCase {
 		Deferred<Object[]> b = new Deferred<>();
 		Deferred<Object[]> c = new Deferred<>();
 
-		Consumer<Object[]> onInitialized = (o) -> a.resolve(o);
-		Consumer<Object[]> onBeforeDestroyed = (o) -> b.resolve(o);
-		Consumer<Object[]> onDestroyed = (o) -> c.resolve(o);
+		Consumer<Object[]> onInitialized = (o) -> {try {a.resolve(o);} catch (Exception e) {}};
+		Consumer<Object[]> onBeforeDestroyed = (o) -> {try {b.resolve(o);} catch (Exception e) {}};
+		Consumer<Object[]> onDestroyed = (o) -> {try {c.resolve(o);} catch (Exception e) {}};
 
 		ServiceRegistration<Consumer> onInitializedReg = bundleContext.registerService(
 			Consumer.class, onInitialized,
@@ -1335,9 +1351,9 @@ public class Test152_3_1_1 extends SlimTestCase {
 		Deferred<Object[]> b = new Deferred<>();
 		Deferred<Object[]> c = new Deferred<>();
 
-		Consumer<Object[]> onInitialized = (o) -> a.resolve(o);
-		Consumer<Object[]> onBeforeDestroyed = (o) -> b.resolve(o);
-		Consumer<Object[]> onDestroyed = (o) -> c.resolve(o);
+		Consumer<Object[]> onInitialized = (o) -> {try {a.resolve(o);} catch (Exception e) {}};
+		Consumer<Object[]> onBeforeDestroyed = (o) -> {try {b.resolve(o);} catch (Exception e) {}};
+		Consumer<Object[]> onDestroyed = (o) -> {try {c.resolve(o);} catch (Exception e) {}};
 
 		ServiceRegistration<Consumer> onInitializedReg = bundleContext.registerService(
 			Consumer.class, onInitialized,
@@ -1442,9 +1458,9 @@ public class Test152_3_1_1 extends SlimTestCase {
 		Deferred<Object[]> b = new Deferred<>();
 		Deferred<Object[]> c = new Deferred<>();
 
-		Consumer<Object[]> onInitialized = (o) -> a.resolve(o);
-		Consumer<Object[]> onBeforeDestroyed = (o) -> b.resolve(o);
-		Consumer<Object[]> onDestroyed = (o) -> c.resolve(o);
+		Consumer<Object[]> onInitialized = (o) -> {try {a.resolve(o);} catch (Exception e) {}};
+		Consumer<Object[]> onBeforeDestroyed = (o) -> {try {b.resolve(o);} catch (Exception e) {}};
+		Consumer<Object[]> onDestroyed = (o) -> {try {c.resolve(o);} catch (Exception e) {}};
 
 		ServiceRegistration<Consumer> onInitializedReg = bundleContext.registerService(
 			Consumer.class, onInitialized,
@@ -1539,9 +1555,9 @@ public class Test152_3_1_1 extends SlimTestCase {
 		Deferred<Object[]> b = new Deferred<>();
 		Deferred<Object[]> c = new Deferred<>();
 
-		Consumer<Object[]> onInitialized = (o) -> a.resolve(o);
-		Consumer<Object[]> onBeforeDestroyed = (o) -> b.resolve(o);
-		Consumer<Object[]> onDestroyed = (o) -> c.resolve(o);
+		Consumer<Object[]> onInitialized = (o) -> {try {a.resolve(o);} catch (Exception e) {}};
+		Consumer<Object[]> onBeforeDestroyed = (o) -> {try {b.resolve(o);} catch (Exception e) {}};
+		Consumer<Object[]> onDestroyed = (o) -> {try {c.resolve(o);} catch (Exception e) {}};
 
 		ServiceRegistration<Consumer> onInitializedReg = bundleContext.registerService(
 			Consumer.class, onInitialized,
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/package-info.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb21/A.java
similarity index 67%
copy from cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/package-info.java
copy to cdi-itests/src/main/java/org/apache/aries/cdi/test/tb21/A.java
index ea059f0..7f7a96d 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/package-info.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb21/A.java
@@ -12,13 +12,30 @@
  * limitations under the License.
  */
 
-@Beans
+package org.apache.aries.cdi.test.tb21;
+
+import org.apache.aries.cdi.test.interfaces.Pojo;
+import org.osgi.annotation.bundle.Requirement;
+import org.osgi.service.cdi.CDIConstants;
+import org.osgi.service.cdi.annotations.Bean;
+import org.osgi.service.cdi.annotations.Service;
+
+@Bean
 @Requirement(
 	namespace = CDIConstants.CDI_EXTENSION_PROPERTY,
 	name = "aries.cdi.jndi"
 )
-package org.apache.aries.cdi.test.beans;
+@Service
+public class A implements Pojo {
 
-import org.osgi.annotation.bundle.Requirement;
-import org.osgi.service.cdi.CDIConstants;
-import org.osgi.service.cdi.annotations.Beans;
+	@Override
+	public String foo(String input) {
+		return "JNDI:" + input;
+	}
+
+	@Override
+	public int getCount() {
+		return 0;
+	}
+
+}