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 2018/04/14 18:27:55 UTC
svn commit: r1829162 - in /aries/trunk/cdi:
cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/bean/
cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/
cdi-extender/src/main/java/org/apache/aries/cdi/container...
Author: rotty3000
Date: Sat Apr 14 18:27:55 2018
New Revision: 1829162
URL: http://svn.apache.org/viewvc?rev=1829162&view=rev
Log:
[CDI] further stabilizations and bug fixes
Signed-off-by: Raymond Augé <ro...@apache.org>
Added:
aries/trunk/cdi/cdi-itests/bnd/tb11.bnd
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/OptionalReluctantReferenceTests.java
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/interfaces/BeanId.java
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb11/
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb11/OptionalReference_AS.java
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb11/OptionalReference_FC.java
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb11/OptionalReference_SC.java
Modified:
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/bean/ReferenceBean.java
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ReferenceSync.java
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ExtendedComponentInstanceDTO.java
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/FactoryActivator.java
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/InstanceActivator.java
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/SingleActivator.java
aries/trunk/cdi/cdi-itests/bnd.bnd
aries/trunk/cdi/cdi-itests/logback.xml
aries/trunk/cdi/cdi-itests/pom.xml
Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/bean/ReferenceBean.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/bean/ReferenceBean.java?rev=1829162&r1=1829161&r2=1829162&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/bean/ReferenceBean.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/bean/ReferenceBean.java Sat Apr 14 18:27:55 2018
@@ -26,6 +26,7 @@ import java.util.SortedMap;
import java.util.stream.Collectors;
import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.context.Dependent;
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.Default;
import javax.enterprise.inject.spi.Bean;
@@ -217,6 +218,11 @@ public class ReferenceBean implements Be
@Override
public Class<? extends Annotation> getScope() {
if (_component.type == ComponentType.CONTAINER) {
+ // is it optional?
+ if ((_template.maximumCardinality == MaximumCardinality.ONE) &&
+ (_template.minimumCardinality == 0)) {
+ return Dependent.class;
+ }
return ApplicationScoped.class;
}
return ComponentScoped.class;
Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java?rev=1829162&r1=1829161&r2=1829162&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java Sat Apr 14 18:27:55 2018
@@ -270,7 +270,7 @@ public class ContainerState {
String query = "(service.pid=".concat(pid).concat(")");
if (factory) {
- query = "(factory.pid=".concat(pid).concat(")");
+ query = "(service.factoryPid=".concat(pid).concat(")");
}
return Optional.ofNullable(
Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ReferenceSync.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ReferenceSync.java?rev=1829162&r1=1829161&r2=1829162&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ReferenceSync.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ReferenceSync.java Sat Apr 14 18:27:55 2018
@@ -103,10 +103,6 @@ public class ReferenceSync implements Se
if (requiresUpdate) {
InstanceActivator activator = _builder.setInstance(
_componentInstanceDTO
- ).setReferenceDTO(
- _referenceDTO
- ).setReference(
- reference
).build();
updateStatically(activator);
@@ -172,10 +168,6 @@ public class ReferenceSync implements Se
if (requiresUpdate) {
InstanceActivator activator = _builder.setInstance(
_componentInstanceDTO
- ).setReferenceDTO(
- _referenceDTO
- ).setReference(
- reference
).build();
updateStatically(activator);
Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ExtendedComponentInstanceDTO.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ExtendedComponentInstanceDTO.java?rev=1829162&r1=1829161&r2=1829162&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ExtendedComponentInstanceDTO.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ExtendedComponentInstanceDTO.java Sat Apr 14 18:27:55 2018
@@ -64,7 +64,7 @@ public class ExtendedComponentInstanceDT
}
public boolean close() {
- _containerState.submit(Op.of(Mode.CLOSE, Type.REFERENCES, template.name),
+ _containerState.submit(Op.of(Mode.CLOSE, Type.REFERENCES, ident()),
() -> {
references.removeIf(
r -> {
@@ -186,7 +186,7 @@ public class ExtendedComponentInstanceDT
);
_containerState.submit(
- Op.of(Mode.OPEN, Type.REFERENCES, template.name),
+ Op.of(Mode.OPEN, Type.REFERENCES, ident()),
() -> {
references.stream().map(ExtendedReferenceDTO.class::cast).forEach(
r -> r.serviceTracker.open()
@@ -249,7 +249,9 @@ public class ExtendedComponentInstanceDT
);
}
- props.put(Constants.SERVICE_PID, servicePids);
+ if (!servicePids.isEmpty()) {
+ props.put(Constants.SERVICE_PID, servicePids);
+ }
props.put("component.id", _componentId);
props.put("component.name", template.name);
Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/FactoryActivator.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/FactoryActivator.java?rev=1829162&r1=1829161&r2=1829162&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/FactoryActivator.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/FactoryActivator.java Sat Apr 14 18:27:55 2018
@@ -60,9 +60,11 @@ public class FactoryActivator extends In
@Override
public FactoryActivator build() {
- return new FactoryActivator(this);
+ return _cache.computeIfAbsent(_instance, i -> new FactoryActivator(this));
}
+ private final Map<ExtendedComponentInstanceDTO, FactoryActivator> _cache = new ConcurrentHashMap<>();
+
}
private FactoryActivator(Builder builder) {
@@ -94,7 +96,7 @@ public class FactoryActivator extends In
@Override
public Op closeOp() {
- return Op.of(Mode.CLOSE, Type.FACTORY_ACTIVATOR, instance.template.name);
+ return Op.of(Mode.CLOSE, Type.FACTORY_ACTIVATOR, instance.ident());
}
@Override
@@ -227,7 +229,7 @@ public class FactoryActivator extends In
@Override
public Op openOp() {
- return Op.of(Mode.OPEN, Type.FACTORY_ACTIVATOR, instance.template.name);
+ return Op.of(Mode.OPEN, Type.FACTORY_ACTIVATOR, instance.ident());
}
@Override
Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/InstanceActivator.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/InstanceActivator.java?rev=1829162&r1=1829161&r2=1829162&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/InstanceActivator.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/InstanceActivator.java Sat Apr 14 18:27:55 2018
@@ -17,7 +17,6 @@ package org.apache.aries.cdi.container.i
import org.apache.aries.cdi.container.internal.container.ContainerState;
import org.apache.aries.cdi.container.internal.container.Op;
import org.apache.aries.cdi.container.internal.container.Phase;
-import org.osgi.framework.ServiceReference;
public abstract class InstanceActivator extends Phase {
@@ -36,31 +35,15 @@ public abstract class InstanceActivator
return (T)this;
}
- @SuppressWarnings("unchecked")
- public T setReference(ServiceReference<Object> reference) {
- _reference = reference;
- return (T)this;
- }
-
- @SuppressWarnings("unchecked")
- public T setReferenceDTO(ExtendedReferenceDTO referenceDTO) {
- _referenceDTO = referenceDTO;
- return (T)this;
- }
-
private ContainerState _containerState;
- private ExtendedComponentInstanceDTO _instance;
+ protected ExtendedComponentInstanceDTO _instance;
private Phase _next;
- private ServiceReference<Object> _reference;
- private ExtendedReferenceDTO _referenceDTO;
}
protected InstanceActivator(Builder<?> builder) {
super(builder._containerState, builder._next);
this.instance = builder._instance;
- this.referenceDTO = builder._referenceDTO;
- this.reference = builder._reference;
}
@Override
@@ -70,7 +53,5 @@ public abstract class InstanceActivator
public abstract Op openOp();
protected final ExtendedComponentInstanceDTO instance;
- protected final ExtendedReferenceDTO referenceDTO;
- protected final ServiceReference<Object> reference;
}
Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/SingleActivator.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/SingleActivator.java?rev=1829162&r1=1829161&r2=1829162&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/SingleActivator.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/SingleActivator.java Sat Apr 14 18:27:55 2018
@@ -59,9 +59,11 @@ public class SingleActivator extends Ins
@Override
public SingleActivator build() {
- return new SingleActivator(this);
+ return _cache.computeIfAbsent(_instance, i -> new SingleActivator(this));
}
+ private final Map<ExtendedComponentInstanceDTO, SingleActivator> _cache = new ConcurrentHashMap<>();
+
}
private SingleActivator(Builder builder) {
@@ -93,7 +95,7 @@ public class SingleActivator extends Ins
@Override
public Op closeOp() {
- return Op.of(Mode.CLOSE, Op.Type.SINGLE_ACTIVATOR, instance.template.name);
+ return Op.of(Mode.CLOSE, Op.Type.SINGLE_ACTIVATOR, instance.ident());
}
@Override
@@ -226,7 +228,7 @@ public class SingleActivator extends Ins
@Override
public Op openOp() {
- return Op.of(Mode.OPEN, Op.Type.SINGLE_ACTIVATOR, instance.template.name);
+ return Op.of(Mode.OPEN, Op.Type.SINGLE_ACTIVATOR, instance.ident());
}
@Override
Modified: aries/trunk/cdi/cdi-itests/bnd.bnd
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/bnd.bnd?rev=1829162&r1=1829161&r2=1829162&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-itests/bnd.bnd (original)
+++ aries/trunk/cdi/cdi-itests/bnd.bnd Sat Apr 14 18:27:55 2018
@@ -29,7 +29,8 @@ p = org.apache.aries.cdi.test
tb7.jar,\
tb8.jar,\
tb9.jar,\
- tb10.jar
+ tb10.jar,\
+ tb11.jar
# Don't forget that we had to coax the `maven-jar-plugin` NOT to include the `sub-bundle` packages in
# the root bundle:
Added: aries/trunk/cdi/cdi-itests/bnd/tb11.bnd
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/bnd/tb11.bnd?rev=1829162&view=auto
==============================================================================
--- aries/trunk/cdi/cdi-itests/bnd/tb11.bnd (added)
+++ aries/trunk/cdi/cdi-itests/bnd/tb11.bnd Sat Apr 14 18:27:55 2018
@@ -0,0 +1,5 @@
+Export-Package: ${p}.tb11.*;-split-package:=first
+Require-Capability:\
+ osgi.extender;\
+ filter:='(&(osgi.extender=osgi.cdi)(version>=1.0.0)(!(version>=2.0.0)))';\
+ osgi.beans:List<String>='${classes;PUBLIC;CONCRETE;NAMED;${p}.tb11.*}'
Modified: aries/trunk/cdi/cdi-itests/logback.xml
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/logback.xml?rev=1829162&r1=1829161&r2=1829162&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-itests/logback.xml (original)
+++ aries/trunk/cdi/cdi-itests/logback.xml Sat Apr 14 18:27:55 2018
@@ -6,16 +6,17 @@
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
- <pattern>%d{HH:mm:ss.SSS} [%.15thread] %-5level %logger{36}:%line - %msg%n</pattern>
+ <!-- <pattern>%d{HH:mm:ss.SSS} [%.15thread] %-5level %logger{36}:%line - %msg%n</pattern> -->
+ <pattern>[%.15thread] %-5level %logger{36}:%line - %msg%n</pattern>
</encoder>
</appender>
<logger name="Events.Bundle" level="ERROR"/>
<logger name="Events.Framework" level="ERROR"/>
- <logger name="Events.Service" level="ERROR"/>
+ <logger name="Events.Service" level="INFO"/>
<logger name="LogService" level="ERROR"/>
- <logger name="Events.Service.org" level="WARN"/>
+ <logger name="Events.Service.org" level="ERROR"/>
<logger name="Events.Service.cdi-itests" level="INFO"/>
<logger name="Events.Service.org.apache.aries" level="INFO"/>
Modified: aries/trunk/cdi/cdi-itests/pom.xml
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/pom.xml?rev=1829162&r1=1829161&r2=1829162&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-itests/pom.xml (original)
+++ aries/trunk/cdi/cdi-itests/pom.xml Sat Apr 14 18:27:55 2018
@@ -252,6 +252,12 @@
</dependency>
<dependency>
<groupId>org.osgi</groupId>
+ <artifactId>org.osgi.service.cm</artifactId>
+ <version>1.6.0-SNAPSHOT</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
<artifactId>org.osgi.service.component.annotations</artifactId>
<version>1.3.0</version>
<scope>provided</scope>
Added: aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/OptionalReluctantReferenceTests.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/OptionalReluctantReferenceTests.java?rev=1829162&view=auto
==============================================================================
--- aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/OptionalReluctantReferenceTests.java (added)
+++ aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/OptionalReluctantReferenceTests.java Sat Apr 14 18:27:55 2018
@@ -0,0 +1,225 @@
+package org.apache.aries.cdi.test.cases;
+
+import static org.junit.Assert.*;
+
+import java.util.Collections;
+import java.util.Hashtable;
+
+import org.apache.aries.cdi.test.interfaces.Pojo;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.cdi.runtime.dto.ContainerDTO;
+import org.osgi.service.cm.Configuration;
+import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.util.tracker.ServiceTracker;
+
+public class OptionalReluctantReferenceTests extends AbstractTestCase {
+
+ @Override
+ @Before
+ public void setUp() throws Exception {
+ testHeader();
+
+ cdiRuntime = runtimeTracker.waitForService(timeout);
+ }
+
+ @Override
+ @After
+ public void tearDown() throws Exception {
+ }
+
+ @Test
+ public void applicationScoped() throws Exception {
+ Bundle tb = installBundle("tb11.jar");
+
+ try {
+ ServiceTracker<Pojo, Pojo> tracker = track("(&(objectClass=%s)(bean.id=as))", Pojo.class.getName());
+
+ Pojo pojo = tracker.waitForService(timeout);
+
+ assertEquals(-1, pojo.getCount());
+ assertEquals("-1", pojo.foo(""));
+
+ ContainerDTO containerDTO = cdiRuntime.getContainerDTO(tb);
+
+ long changeCount = containerDTO.changeCount;
+
+ ServiceRegistration<Integer> int1 = bundleContext.registerService(
+ Integer.class, new Integer(12),
+ new Hashtable<>(Collections.singletonMap("bean.id", "as")));
+
+ try {
+ for (long i = 10; i > 0 && (cdiRuntime.getContainerDTO(tb).changeCount == changeCount); i--) {
+ Thread.sleep(20);
+ }
+
+ assertEquals(-1, pojo.getCount());
+ assertEquals("-1", pojo.foo(""));
+
+ tb.stop();
+ tb.start();
+
+ pojo = tracker.waitForService(timeout);
+
+ assertEquals(12, pojo.getCount());
+ assertEquals("12", pojo.foo(""));
+ }
+ finally {
+ changeCount = cdiRuntime.getContainerDTO(tb).changeCount;
+
+ int1.unregister();
+
+ for (long i = 10; i > 0 && (cdiRuntime.getContainerDTO(tb).changeCount == changeCount); i--) {
+ Thread.sleep(20);
+ }
+
+ pojo = tracker.waitForService(timeout);
+
+ assertEquals(-1, pojo.getCount());
+ assertEquals("-1", pojo.foo(""));
+ }
+ }
+ finally {
+ tb.uninstall();
+ }
+ }
+
+ @Test
+ public void singleComponent() throws Exception {
+ Bundle tb = installBundle("tb11.jar");
+
+ try {
+ ServiceTracker<Pojo, Pojo> tracker = track("(&(objectClass=%s)(bean.id=sc))", Pojo.class.getName());
+
+ Pojo pojo = tracker.waitForService(timeout);
+
+ assertEquals(-1, pojo.getCount());
+ assertEquals("-1", pojo.foo(""));
+
+ ContainerDTO containerDTO = cdiRuntime.getContainerDTO(tb);
+
+ long changeCount = containerDTO.changeCount;
+
+ ServiceRegistration<Integer> int1 = bundleContext.registerService(
+ Integer.class, new Integer(12),
+ new Hashtable<>(Collections.singletonMap("bean.id", "sc")));
+
+ try {
+ for (long i = 10; i > 0 && (cdiRuntime.getContainerDTO(tb).changeCount == changeCount); i--) {
+ Thread.sleep(20);
+ }
+
+ assertEquals(-1, pojo.getCount());
+ assertEquals("-1", pojo.foo(""));
+
+ tb.stop();
+ tb.start();
+
+ pojo = tracker.waitForService(timeout);
+
+ assertEquals(12, pojo.getCount());
+ assertEquals("12", pojo.foo(""));
+ }
+ finally {
+ changeCount = cdiRuntime.getContainerDTO(tb).changeCount;
+
+ int1.unregister();
+
+ for (long i = 10; i > 0 && (cdiRuntime.getContainerDTO(tb).changeCount == changeCount); i--) {
+ Thread.sleep(20);
+ }
+
+ pojo = tracker.waitForService(timeout);
+
+ assertEquals(-1, pojo.getCount());
+ assertEquals("-1", pojo.foo(""));
+ }
+ }
+ finally {
+ tb.uninstall();
+ }
+ }
+
+ @Test
+ public void factoryComponent() throws Exception {
+ adminTracker = new ServiceTracker<>(bundleContext, ConfigurationAdmin.class, null);
+ adminTracker.open();
+ configurationAdmin = adminTracker.getService();
+
+ Bundle tb = installBundle("tb11.jar");
+
+ try {
+ ServiceTracker<Pojo, Pojo> tracker = track("(&(objectClass=%s)(bean.id=fc))", Pojo.class.getName());
+
+ Pojo pojo = tracker.waitForService(timeout);
+
+ assertNull(pojo);
+
+ int trackingCount = tracker.getTrackingCount();
+
+ Configuration configuration = configurationAdmin.createFactoryConfiguration("optionalReference_FC");
+ configuration.update(new Hashtable<>(Collections.singletonMap("foo", "bar")));
+
+ for (long i = 10; i > 0 && (tracker.getTrackingCount() == trackingCount); i--) {
+ Thread.sleep(20);
+ }
+
+ pojo = tracker.waitForService(timeout);
+
+ assertEquals(-1, pojo.getCount());
+ assertEquals("-1", pojo.foo(""));
+
+ ContainerDTO containerDTO = cdiRuntime.getContainerDTO(tb);
+
+ long changeCount = containerDTO.changeCount;
+
+ ServiceRegistration<Integer> int1 = bundleContext.registerService(
+ Integer.class, new Integer(12),
+ new Hashtable<>(Collections.singletonMap("bean.id", "fc")));
+
+ try {
+ for (long i = 10; i > 0 && (cdiRuntime.getContainerDTO(tb).changeCount == changeCount); i--) {
+ Thread.sleep(20);
+ }
+
+ assertEquals(-1, pojo.getCount());
+ assertEquals("-1", pojo.foo(""));
+
+ tb.stop();
+ tb.start();
+
+ pojo = tracker.waitForService(timeout);
+
+ assertEquals(12, pojo.getCount());
+ assertEquals("12", pojo.foo(""));
+ }
+ finally {
+ changeCount = cdiRuntime.getContainerDTO(tb).changeCount;
+
+ int1.unregister();
+
+ for (long i = 10; i > 0 && (cdiRuntime.getContainerDTO(tb).changeCount == changeCount); i--) {
+ Thread.sleep(20);
+ }
+
+ pojo = tracker.waitForService(timeout);
+
+ assertEquals(-1, pojo.getCount());
+ assertEquals("-1", pojo.foo(""));
+
+ configuration.delete();
+ }
+ }
+ finally {
+ tb.uninstall();
+ adminTracker.close();
+ }
+ }
+
+ private ServiceTracker<ConfigurationAdmin, ConfigurationAdmin> adminTracker;
+ private ConfigurationAdmin configurationAdmin;
+
+}
Added: aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/interfaces/BeanId.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/interfaces/BeanId.java?rev=1829162&view=auto
==============================================================================
--- aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/interfaces/BeanId.java (added)
+++ aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/interfaces/BeanId.java Sat Apr 14 18:27:55 2018
@@ -0,0 +1,30 @@
+/**
+ * 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.interfaces;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import org.osgi.service.cdi.annotations.ComponentPropertyType;
+
+@ComponentPropertyType
+@Retention(RUNTIME)
+@Target({FIELD, METHOD, TYPE})
+public @interface BeanId {
+ String value();
+}
Added: aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb11/OptionalReference_AS.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb11/OptionalReference_AS.java?rev=1829162&view=auto
==============================================================================
--- aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb11/OptionalReference_AS.java (added)
+++ aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb11/OptionalReference_AS.java Sat Apr 14 18:27:55 2018
@@ -0,0 +1,47 @@
+/**
+ * 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.tb11;
+
+import java.util.Optional;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+
+import org.apache.aries.cdi.test.interfaces.BeanId;
+import org.apache.aries.cdi.test.interfaces.Pojo;
+import org.osgi.service.cdi.annotations.Reference;
+import org.osgi.service.cdi.annotations.Service;
+
+@BeanId("as")
+@ApplicationScoped
+@Service
+public class OptionalReference_AS implements Pojo {
+
+ @Inject
+ @Reference
+ @BeanId("as")
+ Optional<Integer> service;
+
+ @Override
+ public String foo(String fooInput) {
+ return fooInput + service.orElse(-1);
+ }
+
+ @Override
+ public int getCount() {
+ return service.orElse(-1);
+ }
+
+}
Added: aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb11/OptionalReference_FC.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb11/OptionalReference_FC.java?rev=1829162&view=auto
==============================================================================
--- aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb11/OptionalReference_FC.java (added)
+++ aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb11/OptionalReference_FC.java Sat Apr 14 18:27:55 2018
@@ -0,0 +1,47 @@
+/**
+ * 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.tb11;
+
+import java.util.Optional;
+
+import javax.inject.Inject;
+
+import org.apache.aries.cdi.test.interfaces.BeanId;
+import org.apache.aries.cdi.test.interfaces.Pojo;
+import org.osgi.service.cdi.annotations.FactoryComponent;
+import org.osgi.service.cdi.annotations.Reference;
+import org.osgi.service.cdi.annotations.Service;
+
+@BeanId("fc")
+@FactoryComponent
+@Service
+public class OptionalReference_FC implements Pojo {
+
+ @BeanId("fc")
+ @Inject
+ @Reference
+ Optional<Integer> service;
+
+ @Override
+ public String foo(String fooInput) {
+ return fooInput + service.orElse(-1);
+ }
+
+ @Override
+ public int getCount() {
+ return service.orElse(-1);
+ }
+
+}
Added: aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb11/OptionalReference_SC.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb11/OptionalReference_SC.java?rev=1829162&view=auto
==============================================================================
--- aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb11/OptionalReference_SC.java (added)
+++ aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb11/OptionalReference_SC.java Sat Apr 14 18:27:55 2018
@@ -0,0 +1,47 @@
+/**
+ * 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.tb11;
+
+import java.util.Optional;
+
+import javax.inject.Inject;
+
+import org.apache.aries.cdi.test.interfaces.BeanId;
+import org.apache.aries.cdi.test.interfaces.Pojo;
+import org.osgi.service.cdi.annotations.Reference;
+import org.osgi.service.cdi.annotations.Service;
+import org.osgi.service.cdi.annotations.SingleComponent;
+
+@BeanId("sc")
+@SingleComponent
+@Service
+public class OptionalReference_SC implements Pojo {
+
+ @BeanId("sc")
+ @Inject
+ @Reference
+ Optional<Integer> service;
+
+ @Override
+ public String foo(String fooInput) {
+ return fooInput + service.orElse(-1);
+ }
+
+ @Override
+ public int getCount() {
+ return service.orElse(-1);
+ }
+
+}