jndi test
Signed-off-by: Raymond Augé <rotty3000@apache.org>
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 @@
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 @@
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.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 @@
};
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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,14 @@
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();
-
- // 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());
-
- Object service = serviceObjects.getService();
- assertThat(service).isNotNull();
-
a.get().getPromise().timeout(timeout).then(
s -> {
Object[] values = s.getValue();
- assertThat(service).isEqualTo(values[0]);
assertThat((Map<String, Object>)values[1]).contains(
entry("component.name", "prototypeSingle_C")
).contains(
@@ -344,14 +338,16 @@
a.set(new Deferred<>());
- Object other = serviceObjects.getService();
- assertThat(other).isNotNull();
+ ServiceObjects<Object> serviceObjects = bundleContext.getServiceObjects(tracker.getService());
+
+ Object instance1 = serviceObjects.getService();
+ assertThat(instance1).isNotNull();
a.get().getPromise().timeout(timeout).then(
s -> {
Object[] values = s.getValue();
- assertThat(other).isEqualTo(values[0]);
+ assertThat(instance1).isEqualTo(values[0]);
assertThat((Map<String, Object>)values[1]).contains(
entry("component.name", "prototypeSingle_C")
).contains(
@@ -365,15 +361,38 @@
b.get().getPromise().timeout(timeout).then(assertFailed).getFailure();
c.get().getPromise().timeout(timeout).then(assertFailed).getFailure();
- assertThat(service).isNotEqualTo(other);
+ a.set(new Deferred<>());
- serviceObjects.ungetService(service);
+ Object instance2 = serviceObjects.getService();
+ assertThat(instance2).isNotNull();
+
+ a.get().getPromise().timeout(timeout).then(
+ s -> {
+ Object[] values = s.getValue();
+
+ assertThat(instance2).isEqualTo(values[0]);
+ 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();
+
+ assertThat(instance1).isNotEqualTo(instance2);
+
+ 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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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/tb21/A.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb21/A.java
new file mode 100644
index 0000000..7f7a96d
--- /dev/null
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb21/A.java
@@ -0,0 +1,41 @@
+/**
+ * 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.
+ */
+
+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"
+)
+@Service
+public class A implements Pojo {
+
+ @Override
+ public String foo(String input) {
+ return "JNDI:" + input;
+ }
+
+ @Override
+ public int getCount() {
+ return 0;
+ }
+
+}