Author: rotty3000 Date: Wed Apr 18 15:13:46 2018 New Revision: 1829454 URL: http://svn.apache.org/viewvc?rev=1829454&view=rev Log: updated to latest CDI API
Signed-off-by: Raymond Auge <rotty3...@apache.org> Added: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/BeanServiceObjectsImpl.java - copied, changed from r1829162, aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ReferenceServiceObjectsImpl.java aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BindObjectImpl.java aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BindServiceObjectsImpl.java aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BindServiceReferenceImpl.java aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/Binder.java aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_BeanServiceObjectsTest.java - copied, changed from r1829162, aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_ReferenceServiceObjectsTest.java Removed: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ReferenceServiceObjectsImpl.java aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ReferenceEventImpl.java aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_ReferenceServiceObjectsTest.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/DiscoveryExtension.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/container/RuntimeExtension.java aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/CollectionType.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/ExtendedReferenceDTO.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/ReferenceModel.java aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/SingleActivator.java aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/provider/package-info.java aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/BarAnnotated.java aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/BarProducer.java aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/FooAnnotated.java aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/FooWithReferenceAndConfig.java aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/ObserverFoo.java aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/JndiExtensionTests.java aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb10/SingleReferenceEventHandler.java aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb9/ContainerReferenceEventHandler.java 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=1829454&r1=1829453&r2=1829454&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 Wed Apr 18 15:13:46 2018 @@ -38,7 +38,6 @@ import org.apache.aries.cdi.container.in import org.apache.aries.cdi.container.internal.model.CollectionType; import org.apache.aries.cdi.container.internal.model.ExtendedReferenceDTO; import org.apache.aries.cdi.container.internal.model.ExtendedReferenceTemplateDTO; -import org.apache.aries.cdi.container.internal.model.ReferenceEventImpl; import org.apache.aries.cdi.container.internal.util.Logs; import org.apache.aries.cdi.container.internal.util.Sets; import org.osgi.framework.ServiceReference; @@ -47,7 +46,6 @@ import org.osgi.service.cdi.MaximumCardi import org.osgi.service.cdi.ReferencePolicy; import org.osgi.service.cdi.annotations.ComponentScoped; import org.osgi.service.cdi.annotations.Reference; -import org.osgi.service.cdi.reference.ReferenceEvent; import org.osgi.service.cdi.runtime.dto.template.ComponentTemplateDTO; import org.osgi.service.log.Logger; @@ -68,8 +66,6 @@ public class ReferenceBean implements Be @Override public Object create(CreationalContext<Object> c) { - if (_template.collectionType == CollectionType.OBSERVER) return null; - Objects.requireNonNull(_bm); Objects.requireNonNull(_snapshot); @@ -77,7 +73,13 @@ public class ReferenceBean implements Be final SortedMap<ServiceReference<Object>, Object> tracked = _snapshot.serviceTracker.getTracked(); - if (_template.policy == ReferencePolicy.DYNAMIC) { + if (_template.collectionType == CollectionType.BINDER_OBJECT || + _template.collectionType == CollectionType.BINDER_REFERENCE || + _template.collectionType == CollectionType.BINDER_SERVICE_OBJECTS) { + + return _snapshot.binder; + } + else if (_template.policy == ReferencePolicy.DYNAMIC) { if (_template.maximumCardinality == MaximumCardinality.MANY) { return new Provider<List<Object>>() { @Override @@ -167,34 +169,6 @@ public class ReferenceBean implements Be public void destroy(Object instance, CreationalContext<Object> creationalContext) { } - public boolean fireEvents() { - if (_template.collectionType != CollectionType.OBSERVER) return true; - - _snapshot.serviceTracker.getTracked().values().stream().map( - ReferenceEvent.class::cast - ).forEach(this::fireEvent); - - return true; - } - - public boolean fireEvent(ReferenceEvent<?> event) { - try { -// TODO this is the spec way to do it, but parameterized types are not supported, -// so we need to cheat. -// _bm.getEvent().select( -// Reference.Literal.of(_template.serviceClass, _template.targetFilter) -// ).fire(event); - - ((org.jboss.weld.bean.builtin.BeanManagerProxy)_bm).delegate().getGlobalLenientObserverNotifier().fireEvent( - (Type)event, event, Reference.Literal.of(_template.serviceClass, _template.targetFilter)); - } - catch (Exception e) { - _log.error(l -> l.error("CCR observer method error on {}", _snapshot, e)); - } - - return ((ReferenceEventImpl<?>)event).flush(); - } - @Override public Class<?> getBeanClass() { return _template.beanClass; Copied: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/BeanServiceObjectsImpl.java (from r1829162, aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ReferenceServiceObjectsImpl.java) URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/BeanServiceObjectsImpl.java?p2=aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/BeanServiceObjectsImpl.java&p1=aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ReferenceServiceObjectsImpl.java&r1=1829162&r2=1829454&rev=1829454&view=diff ============================================================================== --- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ReferenceServiceObjectsImpl.java (original) +++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/BeanServiceObjectsImpl.java Wed Apr 18 15:13:46 2018 @@ -19,11 +19,11 @@ import java.util.concurrent.ConcurrentHa import org.osgi.framework.ServiceObjects; import org.osgi.framework.ServiceReference; -import org.osgi.service.cdi.reference.ReferenceServiceObjects; +import org.osgi.service.cdi.reference.BeanServiceObjects; -public class ReferenceServiceObjectsImpl<T> implements ReferenceServiceObjects<T> { +public class BeanServiceObjectsImpl<T> implements BeanServiceObjects<T> { - public ReferenceServiceObjectsImpl(ServiceObjects<T> so) { + public BeanServiceObjectsImpl(ServiceObjects<T> so) { _so = so; } Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/DiscoveryExtension.java URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/DiscoveryExtension.java?rev=1829454&r1=1829453&r2=1829454&view=diff ============================================================================== --- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/DiscoveryExtension.java (original) +++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/DiscoveryExtension.java Wed Apr 18 15:13:46 2018 @@ -33,7 +33,6 @@ import javax.enterprise.event.Observes; import javax.enterprise.inject.spi.AfterBeanDiscovery; import javax.enterprise.inject.spi.Annotated; import javax.enterprise.inject.spi.AnnotatedField; -import javax.enterprise.inject.spi.AnnotatedMethod; import javax.enterprise.inject.spi.AnnotatedParameter; import javax.enterprise.inject.spi.AnnotatedType; import javax.enterprise.inject.spi.Bean; @@ -41,12 +40,10 @@ import javax.enterprise.inject.spi.BeanM import javax.enterprise.inject.spi.DefinitionException; import javax.enterprise.inject.spi.Extension; import javax.enterprise.inject.spi.InjectionPoint; -import javax.enterprise.inject.spi.ObserverMethod; import javax.enterprise.inject.spi.ProcessAnnotatedType; import javax.enterprise.inject.spi.ProcessBean; import javax.enterprise.inject.spi.ProcessInjectionPoint; import javax.enterprise.inject.spi.ProcessManagedBean; -import javax.enterprise.inject.spi.ProcessObserverMethod; import javax.enterprise.inject.spi.ProcessProducerField; import javax.enterprise.inject.spi.ProcessProducerMethod; import javax.enterprise.inject.spi.ProcessSessionBean; @@ -66,15 +63,16 @@ import org.osgi.service.cdi.ComponentTyp import org.osgi.service.cdi.ConfigurationPolicy; import org.osgi.service.cdi.MaximumCardinality; import org.osgi.service.cdi.ServiceScope; -import org.osgi.service.cdi.annotations.Bundle; import org.osgi.service.cdi.annotations.ComponentScoped; import org.osgi.service.cdi.annotations.Configuration; import org.osgi.service.cdi.annotations.FactoryComponent; import org.osgi.service.cdi.annotations.PID; -import org.osgi.service.cdi.annotations.Prototype; import org.osgi.service.cdi.annotations.Reference; +import org.osgi.service.cdi.annotations.ServiceInstance; import org.osgi.service.cdi.annotations.SingleComponent; -import org.osgi.service.cdi.reference.ReferenceEvent; +import org.osgi.service.cdi.reference.BindObject; +import org.osgi.service.cdi.reference.BindServiceObjects; +import org.osgi.service.cdi.reference.BindServiceReference; import org.osgi.service.cdi.runtime.dto.template.ComponentTemplateDTO; public class DiscoveryExtension implements Extension { @@ -403,6 +401,108 @@ public class DiscoveryExtension implemen } } + void processBindObject(@Observes ProcessInjectionPoint<?, BindObject<?>> pip) { + InjectionPoint injectionPoint = pip.getInjectionPoint(); + + Class<?> declaringClass = getDeclaringClass(injectionPoint); + + String className = declaringClass.getName(); + + OSGiBean osgiBean = _beansModel.getOSGiBean(className); + + if (osgiBean == null) { + return; + } + + Annotated annotated = injectionPoint.getAnnotated(); + + Builder builder = null; + + if (annotated instanceof AnnotatedParameter) { + builder = new ReferenceModel.Builder((AnnotatedParameter<?>)annotated); + } + else { + builder = new ReferenceModel.Builder((AnnotatedField<?>)annotated); + } + + try { + ReferenceModel referenceModel = builder.type(injectionPoint.getType()).build(); + + osgiBean.addReference(referenceModel.toDTO()); + } + catch (Exception e) { + _containerState.error(e); + } + } + + void processBindServiceObjects(@Observes ProcessInjectionPoint<?, BindServiceObjects<?>> pip) { + InjectionPoint injectionPoint = pip.getInjectionPoint(); + + Class<?> declaringClass = getDeclaringClass(injectionPoint); + + String className = declaringClass.getName(); + + OSGiBean osgiBean = _beansModel.getOSGiBean(className); + + if (osgiBean == null) { + return; + } + + Annotated annotated = injectionPoint.getAnnotated(); + + Builder builder = null; + + if (annotated instanceof AnnotatedParameter) { + builder = new ReferenceModel.Builder((AnnotatedParameter<?>)annotated); + } + else { + builder = new ReferenceModel.Builder((AnnotatedField<?>)annotated); + } + + try { + ReferenceModel referenceModel = builder.type(injectionPoint.getType()).build(); + + osgiBean.addReference(referenceModel.toDTO()); + } + catch (Exception e) { + _containerState.error(e); + } + } + + void processBindServiceReference(@Observes ProcessInjectionPoint<?, BindServiceReference<?>> pip) { + InjectionPoint injectionPoint = pip.getInjectionPoint(); + + Class<?> declaringClass = getDeclaringClass(injectionPoint); + + String className = declaringClass.getName(); + + OSGiBean osgiBean = _beansModel.getOSGiBean(className); + + if (osgiBean == null) { + return; + } + + Annotated annotated = injectionPoint.getAnnotated(); + + Builder builder = null; + + if (annotated instanceof AnnotatedParameter) { + builder = new ReferenceModel.Builder((AnnotatedParameter<?>)annotated); + } + else { + builder = new ReferenceModel.Builder((AnnotatedField<?>)annotated); + } + + try { + ReferenceModel referenceModel = builder.type(injectionPoint.getType()).build(); + + osgiBean.addReference(referenceModel.toDTO()); + } + catch (Exception e) { + _containerState.error(e); + } + } + void processInjectionPoint(@Observes ProcessInjectionPoint<?, ?> pip) { InjectionPoint injectionPoint = pip.getInjectionPoint(); @@ -468,70 +568,18 @@ public class DiscoveryExtension implemen } } - void processObserverMethod(@Observes ProcessObserverMethod<ReferenceEvent<?>, ?> pom) { - ObserverMethod<ReferenceEvent<?>> observerMethod = pom.getObserverMethod(); - - AnnotatedMethod<?> annotatedMethod = pom.getAnnotatedMethod(); - - Configuration configuration = annotatedMethod.getAnnotation(Configuration.class); - - if (configuration != null) { - pom.addDefinitionError( - new IllegalArgumentException( - String.format( - "Cannot use @Configuration on ReferenceEvent observer method {}", - observerMethod)) - ); - - return; - } - - Class<?> beanClass = observerMethod.getBeanClass(); - - final String className = beanClass.getName(); - - OSGiBean osgiBean = _beansModel.getOSGiBean(className); - - if (osgiBean == null) { - pom.addDefinitionError( - new DefinitionException( - String.format( - "The observer method %s was not declared as <cdi:bean class=\"%s\">", - observerMethod, className)) - ); - - return; - } - - try { - ReferenceModel referenceModel = new ReferenceModel.Builder( - pom.getAnnotatedMethod().getParameters().get(0) - ).type(observerMethod.getObservedType()).build(); - - osgiBean.addReference(referenceModel.toDTO()); - } - catch (Exception e) { - pom.addDefinitionError(e); - } - } - ServiceScope getScope(Annotated annotated) { - Prototype prototype = annotated.getAnnotation(Prototype.class); - Bundle bundle = annotated.getAnnotation(Bundle.class); + ServiceInstance serviceInstance = annotated.getAnnotation(ServiceInstance.class); - if (prototype != null) { - if (bundle != null) { - throw new IllegalArgumentException( - String.format( - "@Prototype and @Bundle must not be used to gether: %s", - annotated)); + if (serviceInstance != null) { + switch (serviceInstance.value()) { + case BUNDLE: + return ServiceScope.BUNDLE; + case PROTOTYPE: + return ServiceScope.PROTOTYPE; + case SINGLETON: + return ServiceScope.SINGLETON; } - - return ServiceScope.PROTOTYPE; - } - - if (bundle != null) { - return ServiceScope.BUNDLE; } return ServiceScope.SINGLETON; 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=1829454&r1=1829453&r2=1829454&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 Wed Apr 18 15:13:46 2018 @@ -16,13 +16,11 @@ package org.apache.aries.cdi.container.i import java.util.AbstractMap.SimpleImmutableEntry; -import org.apache.aries.cdi.container.internal.container.ComponentContext.With; import org.apache.aries.cdi.container.internal.model.CollectionType; import org.apache.aries.cdi.container.internal.model.ExtendedComponentInstanceDTO; import org.apache.aries.cdi.container.internal.model.ExtendedReferenceDTO; import org.apache.aries.cdi.container.internal.model.ExtendedReferenceTemplateDTO; import org.apache.aries.cdi.container.internal.model.InstanceActivator; -import org.apache.aries.cdi.container.internal.model.ReferenceEventImpl; import org.apache.aries.cdi.container.internal.util.Conversions; import org.apache.aries.cdi.container.internal.util.Maps; import org.apache.aries.cdi.container.internal.util.SRs; @@ -65,21 +63,13 @@ public class ReferenceSync implements Se _referenceDTO.matches = SRs.from(_referenceDTO.serviceTracker.getServiceReferences(), reference); try { - if (collectionType == CollectionType.OBSERVER) { - @SuppressWarnings("unchecked") - ReferenceEventImpl<Object> event = new ReferenceEventImpl<>(_containerState, (Class<Object>)_templateDTO.serviceClass); - event.addingService(reference); - if (active) { - _componentInstanceDTO.activations.forEach( - a -> { - try (With with = new With(a)) { - _templateDTO.bean.fireEvent(event); - } - } - ); - requiresUpdate = false; - } - return event; + if (collectionType == CollectionType.BINDER_OBJECT || + collectionType == CollectionType.BINDER_REFERENCE || + collectionType == CollectionType.BINDER_SERVICE_OBJECTS) { + + requiresUpdate = false; + + return _referenceDTO.binder.addingService(reference); } else if (collectionType == CollectionType.PROPERTIES) { return Maps.of(reference.getProperties()); @@ -88,7 +78,7 @@ public class ReferenceSync implements Se return reference; } else if (collectionType == CollectionType.SERVICEOBJECTS) { - return new ReferenceServiceObjectsImpl<>( + return new BeanServiceObjectsImpl<>( _containerState.bundleContext().getServiceObjects(reference)); } else if (collectionType == CollectionType.TUPLE) { @@ -111,12 +101,14 @@ public class ReferenceSync implements Se } @Override - @SuppressWarnings("unchecked") public void modifiedService(ServiceReference<Object> reference, Object service) { CollectionType collectionType = _templateDTO.collectionType; - if (collectionType == CollectionType.OBSERVER) { - ((ReferenceEventImpl<Object>)service).modifiedService(reference); + if (collectionType == CollectionType.BINDER_OBJECT || + collectionType == CollectionType.BINDER_REFERENCE || + collectionType == CollectionType.BINDER_SERVICE_OBJECTS) { + + _referenceDTO.binder.modifiedService(reference); } else if (collectionType == CollectionType.PROPERTIES || collectionType == CollectionType.REFERENCE || @@ -145,8 +137,13 @@ public class ReferenceSync implements Se _referenceDTO.matches.removeIf(d -> d.id == SRs.id(reference)); try { - if (collectionType == CollectionType.OBSERVER) { - ((ReferenceEventImpl<Object>)service).removedService(reference); + if (collectionType == CollectionType.BINDER_OBJECT || + collectionType == CollectionType.BINDER_REFERENCE || + collectionType == CollectionType.BINDER_SERVICE_OBJECTS) { + + requiresUpdate = false; + + _referenceDTO.binder.removedService(reference); return; } @@ -157,7 +154,7 @@ public class ReferenceSync implements Se return; } else if (collectionType == CollectionType.SERVICEOBJECTS) { - ((ReferenceServiceObjectsImpl<Object>)service).close(); + ((BeanServiceObjectsImpl<Object>)service).close(); return; } Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/RuntimeExtension.java URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/RuntimeExtension.java?rev=1829454&r1=1829453&r2=1829454&view=diff ============================================================================== --- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/RuntimeExtension.java (original) +++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/RuntimeExtension.java Wed Apr 18 15:13:46 2018 @@ -46,7 +46,6 @@ import org.apache.aries.cdi.container.in import org.apache.aries.cdi.container.internal.bean.ReferenceBean; import org.apache.aries.cdi.container.internal.container.Op.Mode; import org.apache.aries.cdi.container.internal.container.Op.Type; -import org.apache.aries.cdi.container.internal.model.CollectionType; import org.apache.aries.cdi.container.internal.model.ConfigurationModel; import org.apache.aries.cdi.container.internal.model.ExtendedActivationDTO; import org.apache.aries.cdi.container.internal.model.ExtendedActivationTemplateDTO; @@ -71,6 +70,9 @@ import org.osgi.service.cdi.ServiceScope import org.osgi.service.cdi.annotations.ComponentScoped; import org.osgi.service.cdi.annotations.Configuration; import org.osgi.service.cdi.annotations.Reference; +import org.osgi.service.cdi.reference.BindObject; +import org.osgi.service.cdi.reference.BindServiceObjects; +import org.osgi.service.cdi.reference.BindServiceReference; import org.osgi.service.cdi.runtime.dto.ComponentDTO; import org.osgi.service.cdi.runtime.dto.ConfigurationDTO; import org.osgi.service.cdi.runtime.dto.template.ComponentTemplateDTO; @@ -103,13 +105,13 @@ public class RuntimeExtension implements } void beforeBeanDiscovery(@Observes BeforeBeanDiscovery bbd) { - bbd.addQualifier(org.osgi.service.cdi.annotations.Bundle.class); bbd.addQualifier(org.osgi.service.cdi.annotations.Configuration.class); bbd.addQualifier(org.osgi.service.cdi.annotations.Greedy.class); bbd.addQualifier(org.osgi.service.cdi.annotations.PID.class); - bbd.addQualifier(org.osgi.service.cdi.annotations.Prototype.class); + bbd.addQualifier(org.osgi.service.cdi.annotations.PrototypeRequired.class); bbd.addQualifier(org.osgi.service.cdi.annotations.Reference.class); bbd.addQualifier(org.osgi.service.cdi.annotations.Service.class); + bbd.addQualifier(org.osgi.service.cdi.annotations.ServiceInstance.class); bbd.addScope(ComponentScoped.class, false, false); bbd.addStereotype(org.osgi.service.cdi.annotations.FactoryComponent.class); bbd.addStereotype(org.osgi.service.cdi.annotations.SingleComponent.class); @@ -136,15 +138,8 @@ public class RuntimeExtension implements properties); _containerState.submit( - Op.of(Mode.OPEN, Type.CONTAINER_FIRE_EVENTS, _containerState.id()), - _containerInstanceDTO::fireEvents - ).then( - s-> { - return _containerState.submit( - Op.of(Mode.OPEN, Type.CONTAINER_PUBLISH_SERVICES, _containerState.id()), - () -> registerServices(_containerComponentDTO, _containerInstanceDTO, bm) - ); - } + Op.of(Mode.OPEN, Type.CONTAINER_PUBLISH_SERVICES, _containerState.id()), + () -> registerServices(_containerComponentDTO, _containerInstanceDTO, bm) ).then( s -> initComponents() ); @@ -180,7 +175,23 @@ public class RuntimeExtension implements ); } - void processInjectionPoint(@Observes ProcessInjectionPoint<?, ?> pip, BeanManager beanManager) { + void processBindObject(@Observes ProcessInjectionPoint<?, BindObject<?>> pip) { + processInjectionPoint(pip, true); + } + + void processBindServiceObjects(@Observes ProcessInjectionPoint<?, BindServiceObjects<?>> pip) { + processInjectionPoint(pip, true); + } + + void processBindServiceReference(@Observes ProcessInjectionPoint<?, BindServiceReference<?>> pip) { + processInjectionPoint(pip, true); + } + + void processInjectionPoint(@Observes ProcessInjectionPoint<?, ?> pip) { + processInjectionPoint(pip, false); + } + + void processInjectionPoint(ProcessInjectionPoint<?, ?> pip, boolean special) { InjectionPoint injectionPoint = pip.getInjectionPoint(); Class<?> declaringClass = DiscoveryExtension.getDeclaringClass(injectionPoint); @@ -197,7 +208,7 @@ public class RuntimeExtension implements Configuration configuration = annotated.getAnnotation(Configuration.class); Reference reference = annotated.getAnnotation(Reference.class); - if ((reference != null) && matchReference(osgiBean, reference, pip)) { + if (((reference != null) || special) && matchReference(osgiBean, pip)) { return; } @@ -220,11 +231,10 @@ public class RuntimeExtension implements r -> bean.setReferenceDTO(r) ); } - if (t.collectionType != CollectionType.OBSERVER) { - _log.debug(l -> l.debug("CCR Adding synthetic bean {} on {}", bean, _containerState.bundle())); - abd.addBean(bean); - } + _log.debug(l -> l.debug("CCR Adding synthetic bean {} on {}", bean, _containerState.bundle())); + + abd.addBean(bean); } ); @@ -350,7 +360,7 @@ public class RuntimeExtension implements ).orElse(false); } - private boolean matchReference(OSGiBean osgiBean, Reference reference, ProcessInjectionPoint<?, ?> pip) { + private boolean matchReference(OSGiBean osgiBean, ProcessInjectionPoint<?, ?> pip) { InjectionPoint injectionPoint = pip.getInjectionPoint(); Annotated annotated = injectionPoint.getAnnotated(); @@ -383,6 +393,8 @@ public class RuntimeExtension implements t.bean.setMark(markedInjectionPoint.getMark()); + _log.debug(l -> l.debug("CCR maping InjectionPoint {} to reference template {}", injectionPoint, t)); + return true; } ).orElse(false); Added: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BindObjectImpl.java URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BindObjectImpl.java?rev=1829454&view=auto ============================================================================== --- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BindObjectImpl.java (added) +++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BindObjectImpl.java Wed Apr 18 15:13:46 2018 @@ -0,0 +1,200 @@ +/** + * 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.container.internal.model; + +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.BiConsumer; +import java.util.function.Consumer; + +import org.apache.aries.cdi.container.internal.container.ContainerState; +import org.apache.aries.cdi.container.internal.util.Maps; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceReference; +import org.osgi.service.cdi.reference.BindObject; +import org.osgi.service.log.Logger; + +public class BindObjectImpl<T> implements Binder<T>, BindObject<T> { + + private final ContainerState _containerState; + private final Logger _log; + + private final List<ServiceReference<T>> _queue = new CopyOnWriteArrayList<>(); + private final AtomicBoolean _enqueue = new AtomicBoolean(true); + private volatile Optional<Consumer<T>> onAdding = Optional.empty(); + private volatile Optional<BiConsumer<T, Map<String, Object>>> onAddingBi = Optional.empty(); + private volatile Optional<Consumer<T>> onUpdate = Optional.empty(); + private volatile Optional<BiConsumer<T, Map<String, Object>>> onUpdateBi = Optional.empty(); + private volatile Optional<Consumer<T>> onRemove = Optional.empty(); + private volatile Optional<BiConsumer<T, Map<String, Object>>> onRemoveBi = Optional.empty(); + + private volatile T service; + + public BindObjectImpl(ContainerState containerState) { + _containerState = containerState; + _log = _containerState.containerLogs().getLogger(getClass()); + } + + @Override + public BindObjectImpl<T> addingService(ServiceReference<T> reference) { + if (_enqueue.get()) { + _queue.add(reference); + return this; + } + + BundleContext bundleContext = _containerState.bundleContext(); + service = bundleContext.getService(reference); + Map<String, Object> map = Maps.of(reference.getProperties()); + + onAdding.ifPresent( + c -> { + try { + c.accept(service); + } + catch (Throwable t) { + _log.error(l -> l.error("CCR error in {}", this, t)); + } + } + ); + onAddingBi.ifPresent( + c -> { + try { + c.accept(service, map); + } + catch (Throwable t) { + _log.error(l -> l.error("CCR error in {}", this, t)); + } + } + ); + + return this; + } + + @Override + public BindObjectImpl<T> modifiedService(ServiceReference<T> reference) { + if (_enqueue.get()) { + return this; // i.e. do nothing + } + + Map<String, Object> map = Maps.of(reference.getProperties()); + + onUpdate.ifPresent( + c -> { + try { + c.accept(service); + } + catch (Throwable t) { + _log.error(l -> l.error("CCR error in {}", this, t)); + } + } + ); + onUpdateBi.ifPresent( + c -> { + try { + c.accept(service, map); + } + catch (Throwable t) { + _log.error(l -> l.error("CCR error in {}", this, t)); + } + } + ); + + return this; + } + + @Override + public BindObjectImpl<T> removedService(ServiceReference<T> reference) { + if (_enqueue.get()) { + _queue.remove(reference); + return this; + } + + Map<String, Object> map = Maps.of(reference.getProperties()); + + onRemove.ifPresent( + c -> { + try { + c.accept(service); + } + catch (Throwable t) { + _log.error(l -> l.error("CCR error in {}", this, t)); + } + } + ); + onRemoveBi.ifPresent( + c -> { + try { + c.accept(service, map); + } + catch (Throwable t) { + _log.error(l -> l.error("CCR error in {}", this, t)); + } + } + ); + + return this; + } + + @Override + public void bind() { + _enqueue.set(false); + _queue.removeIf( + reference -> { + addingService(reference); + return true; + } + ); + } + + @Override + public BindObjectImpl<T> adding(Consumer<T> action) { + onAdding = Optional.ofNullable(action); + return this; + } + + @Override + public BindObjectImpl<T> adding(BiConsumer<T, Map<String, Object>> action) { + onAddingBi = Optional.ofNullable(action); + return this; + } + + @Override + public BindObjectImpl<T> modified(Consumer<T> consumer) { + onUpdate = Optional.ofNullable(consumer); + return this; + } + + @Override + public BindObjectImpl<T> modified(BiConsumer<T, Map<String, Object>> consumer) { + onUpdateBi = Optional.ofNullable(consumer); + return this; + } + + @Override + public BindObjectImpl<T> removed(Consumer<T> consumer) { + onRemove = Optional.ofNullable(consumer); + return this; + } + + @Override + public BindObjectImpl<T> removed(BiConsumer<T, Map<String, Object>> consumer) { + onRemoveBi = Optional.ofNullable(consumer); + return this; + } + +} \ No newline at end of file Added: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BindServiceObjectsImpl.java URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BindServiceObjectsImpl.java?rev=1829454&view=auto ============================================================================== --- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BindServiceObjectsImpl.java (added) +++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BindServiceObjectsImpl.java Wed Apr 18 15:13:46 2018 @@ -0,0 +1,143 @@ +/** + * 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.container.internal.model; + +import java.util.List; +import java.util.Optional; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.Consumer; + +import org.apache.aries.cdi.container.internal.container.BeanServiceObjectsImpl; +import org.apache.aries.cdi.container.internal.container.ContainerState; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceReference; +import org.osgi.service.cdi.reference.BeanServiceObjects; +import org.osgi.service.cdi.reference.BindServiceObjects; +import org.osgi.service.log.Logger; + +public class BindServiceObjectsImpl<T> implements Binder<T>, BindServiceObjects<T> { + + private final ContainerState _containerState; + private final Logger _log; + + private final List<ServiceReference<T>> _queue = new CopyOnWriteArrayList<>(); + private final AtomicBoolean _enqueue = new AtomicBoolean(true); + private volatile Optional<Consumer<BeanServiceObjects<T>>> onAdding = Optional.empty(); + private volatile Optional<Consumer<BeanServiceObjects<T>>> onUpdate = Optional.empty(); + private volatile Optional<Consumer<BeanServiceObjects<T>>> onRemove = Optional.empty(); + + private volatile BeanServiceObjects<T> serviceObjects; + + public BindServiceObjectsImpl(ContainerState containerState) { + _containerState = containerState; + _log = _containerState.containerLogs().getLogger(getClass()); + } + + @Override + public BindServiceObjectsImpl<T> addingService(ServiceReference<T> reference) { + if (_enqueue.get()) { + _queue.add(reference); + return this; + } + + BundleContext bundleContext = _containerState.bundleContext(); + serviceObjects = new BeanServiceObjectsImpl<T>(bundleContext.getServiceObjects(reference)); + + onAdding.ifPresent( + c -> { + try { + c.accept(serviceObjects); + } + catch (Throwable t) { + _log.error(l -> l.error("CCR error in {}", this, t)); + } + } + ); + + return this; + } + + @Override + public BindServiceObjectsImpl<T> modifiedService(ServiceReference<T> reference) { + if (_enqueue.get()) { + return this; // i.e. do nothing + } + + onUpdate.ifPresent( + c -> { + try { + c.accept(serviceObjects); + } + catch (Throwable t) { + _log.error(l -> l.error("CCR error in {}", this, t)); + } + } + ); + + return this; + } + + @Override + public BindServiceObjectsImpl<T> removedService(ServiceReference<T> reference) { + if (_enqueue.get()) { + _queue.remove(reference); + return this; + } + + onRemove.ifPresent( + c -> { + try { + c.accept(serviceObjects); + } + catch (Throwable t) { + _log.error(l -> l.error("CCR error in {}", this, t)); + } + } + ); + + return this; + } + + @Override + public void bind() { + _enqueue.set(false); + _queue.removeIf( + reference -> { + addingService(reference); + return true; + } + ); + } + + @Override + public BindServiceObjectsImpl<T> adding(Consumer<BeanServiceObjects<T>> action) { + onAdding = Optional.ofNullable(action); + return this; + } + + @Override + public BindServiceObjectsImpl<T> modified(Consumer<BeanServiceObjects<T>> consumer) { + onUpdate = Optional.ofNullable(consumer); + return this; + } + + @Override + public BindServiceObjectsImpl<T> removed(Consumer<BeanServiceObjects<T>> consumer) { + onRemove = Optional.ofNullable(consumer); + return this; + } + +} \ No newline at end of file Added: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BindServiceReferenceImpl.java URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BindServiceReferenceImpl.java?rev=1829454&view=auto ============================================================================== --- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BindServiceReferenceImpl.java (added) +++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BindServiceReferenceImpl.java Wed Apr 18 15:13:46 2018 @@ -0,0 +1,193 @@ +/** + * 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.container.internal.model; + +import java.util.List; +import java.util.Optional; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.BiConsumer; +import java.util.function.Consumer; + +import org.apache.aries.cdi.container.internal.container.ContainerState; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceReference; +import org.osgi.service.cdi.reference.BindServiceReference; +import org.osgi.service.log.Logger; + +public class BindServiceReferenceImpl<T> implements Binder<T>, BindServiceReference<T> { + + private final ContainerState _containerState; + private final Logger _log; + + private final List<ServiceReference<T>> _queue = new CopyOnWriteArrayList<>(); + private final AtomicBoolean _enqueue = new AtomicBoolean(true); + private volatile Optional<Consumer<ServiceReference<T>>> onAdding = Optional.empty(); + private volatile Optional<BiConsumer<ServiceReference<T>, T>> onAddingBi = Optional.empty(); + private volatile Optional<Consumer<ServiceReference<T>>> onUpdate = Optional.empty(); + private volatile Optional<BiConsumer<ServiceReference<T>, T>> onUpdateBi = Optional.empty(); + private volatile Optional<Consumer<ServiceReference<T>>> onRemove = Optional.empty(); + private volatile Optional<BiConsumer<ServiceReference<T>, T>> onRemoveBi = Optional.empty(); + + private volatile T service; + + public BindServiceReferenceImpl(ContainerState containerState) { + _containerState = containerState; + _log = _containerState.containerLogs().getLogger(getClass()); + } + + @Override + public BindServiceReferenceImpl<T> addingService(ServiceReference<T> reference) { + if (_enqueue.get()) { + _queue.add(reference); + return this; + } + + BundleContext bundleContext = _containerState.bundleContext(); + service = bundleContext.getService(reference); + + onAdding.ifPresent( + c -> { + try { + c.accept(reference); + } + catch (Throwable t) { + _log.error(l -> l.error("CCR error in {}", this, t)); + } + } + ); + onAddingBi.ifPresent( + c -> { + try { + c.accept(reference, service); + } + catch (Throwable t) { + _log.error(l -> l.error("CCR error in {}", this, t)); + } + } + ); + + return this; + } + + @Override + public BindServiceReferenceImpl<T> modifiedService(ServiceReference<T> reference) { + if (_enqueue.get()) { + return this; // i.e. do nothing + } + + onUpdate.ifPresent( + c -> { + try { + c.accept(reference); + } + catch (Throwable t) { + _log.error(l -> l.error("CCR error in {}", this, t)); + } + } + ); + onUpdateBi.ifPresent( + c -> { + try { + c.accept(reference, service); + } + catch (Throwable t) { + _log.error(l -> l.error("CCR error in {}", this, t)); + } + } + ); + + return this; + } + + @Override + public BindServiceReferenceImpl<T> removedService(ServiceReference<T> reference) { + if (_enqueue.get()) { + _queue.remove(reference); + return this; + } + + onRemove.ifPresent( + c -> { + try { + c.accept(reference); + } + catch (Throwable t) { + _log.error(l -> l.error("CCR error in {}", this, t)); + } + } + ); + onRemoveBi.ifPresent( + c -> { + try { + c.accept(reference, service); + } + catch (Throwable t) { + _log.error(l -> l.error("CCR error in {}", this, t)); + } + } + ); + + return this; + } + + @Override + public void bind() { + _enqueue.set(false); + _queue.removeIf( + reference -> { + addingService(reference); + return true; + } + ); + } + + @Override + public BindServiceReferenceImpl<T> adding(Consumer<ServiceReference<T>> action) { + onAdding = Optional.ofNullable(action); + return this; + } + + @Override + public BindServiceReferenceImpl<T> adding(BiConsumer<ServiceReference<T>, T> action) { + onAddingBi = Optional.ofNullable(action); + return this; + } + + @Override + public BindServiceReferenceImpl<T> modified(Consumer<ServiceReference<T>> consumer) { + onUpdate = Optional.ofNullable(consumer); + return this; + } + + @Override + public BindServiceReferenceImpl<T> modified(BiConsumer<ServiceReference<T>, T> consumer) { + onUpdateBi = Optional.ofNullable(consumer); + return this; + } + + @Override + public BindServiceReferenceImpl<T> removed(Consumer<ServiceReference<T>> consumer) { + onRemove = Optional.ofNullable(consumer); + return this; + } + + @Override + public BindServiceReferenceImpl<T> removed(BiConsumer<ServiceReference<T>, T> consumer) { + onRemoveBi = Optional.ofNullable(consumer); + return this; + } + +} \ No newline at end of file Added: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/Binder.java URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/Binder.java?rev=1829454&view=auto ============================================================================== --- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/Binder.java (added) +++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/Binder.java Wed Apr 18 15:13:46 2018 @@ -0,0 +1,11 @@ +package org.apache.aries.cdi.container.internal.model; + +import org.osgi.framework.ServiceReference; + +public interface Binder<T> { + + public Binder<T> addingService(ServiceReference<T> reference); + public Binder<T> modifiedService(ServiceReference<T> reference); + public Binder<T> removedService(ServiceReference<T> reference); + +} Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/CollectionType.java URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/CollectionType.java?rev=1829454&r1=1829453&r2=1829454&view=diff ============================================================================== --- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/CollectionType.java (original) +++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/CollectionType.java Wed Apr 18 15:13:46 2018 @@ -61,9 +61,22 @@ public enum CollectionType { TUPLE("tuple"), /** - * The observer type is used to indicate the reference is targeted to a observer method. + * Used to indicate the reference is a binder for registering handler + * methods for tracking service instances. */ - OBSERVER("observer"); + BINDER_OBJECT("binder_object"), + + /** + * Used to indicate the reference is a binder for registering handler + * methods for tracking service references. + */ + BINDER_REFERENCE("binder_reference"), + + /** + * Used to indicate the reference is a binder for registering handler + * methods for tracking service objects. + */ + BINDER_SERVICE_OBJECTS("binder_service_objects"); private final String value; 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=1829454&r1=1829453&r2=1829454&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 Wed Apr 18 15:13:46 2018 @@ -126,20 +126,6 @@ public class ExtendedComponentInstanceDT return true; } - public final boolean fireEvents() { - references.stream().map(ExtendedReferenceDTO.class::cast).filter( - r -> ((ExtendedReferenceTemplateDTO)r.template).collectionType == CollectionType.OBSERVER - ).map( - r -> (ExtendedReferenceTemplateDTO)r.template - ).forEach( - t -> { - t.bean.fireEvents(); - } - ); - - return true; - } - public final boolean referencesResolved() { for (ReferenceTemplateDTO template : template.references) { if (template.minimumCardinality > 0) { @@ -172,6 +158,16 @@ public class ExtendedComponentInstanceDT t -> { ExtendedReferenceDTO referenceDTO = new ExtendedReferenceDTO(); + if (t.collectionType == CollectionType.BINDER_OBJECT) { + referenceDTO.binder = new BindObjectImpl<>(_containerState); + } + else if (t.collectionType == CollectionType.BINDER_REFERENCE) { + referenceDTO.binder = new BindServiceReferenceImpl<>(_containerState); + } + else if (t.collectionType == CollectionType.BINDER_SERVICE_OBJECTS) { + referenceDTO.binder = new BindServiceObjectsImpl<>(_containerState); + } + referenceDTO.matches = new CopyOnWriteArrayList<>(); referenceDTO.minimumCardinality = minimumCardinality(t.name, t.minimumCardinality); referenceDTO.targetFilter = targetFilter(t.serviceType, t.name, t.targetFilter); Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ExtendedReferenceDTO.java URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ExtendedReferenceDTO.java?rev=1829454&r1=1829453&r2=1829454&view=diff ============================================================================== --- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ExtendedReferenceDTO.java (original) +++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ExtendedReferenceDTO.java Wed Apr 18 15:13:46 2018 @@ -19,6 +19,8 @@ import org.osgi.util.tracker.ServiceTrac public class ExtendedReferenceDTO extends ReferenceDTO { + public Binder<Object> binder; + public ServiceTracker<Object, Object> serviceTracker; } 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=1829454&r1=1829453&r2=1829454&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 Wed Apr 18 15:13:46 2018 @@ -263,7 +263,6 @@ public class FactoryActivator extends In instance.activations.remove(a); } }; - instance.fireEvents(); return new AbstractMap.SimpleImmutableEntry<>(activationDTO, object); } catch (Throwable t) { Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ReferenceModel.java URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ReferenceModel.java?rev=1829454&r1=1829453&r2=1829454&view=diff ============================================================================== --- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ReferenceModel.java (original) +++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ReferenceModel.java Wed Apr 18 15:13:46 2018 @@ -47,10 +47,12 @@ import org.osgi.service.cdi.MaximumCardi import org.osgi.service.cdi.ReferencePolicy; import org.osgi.service.cdi.ReferencePolicyOption; import org.osgi.service.cdi.annotations.Greedy; -import org.osgi.service.cdi.annotations.Prototype; +import org.osgi.service.cdi.annotations.PrototypeRequired; import org.osgi.service.cdi.annotations.Reference; -import org.osgi.service.cdi.reference.ReferenceEvent; -import org.osgi.service.cdi.reference.ReferenceServiceObjects; +import org.osgi.service.cdi.reference.BindObject; +import org.osgi.service.cdi.reference.BindServiceObjects; +import org.osgi.service.cdi.reference.BindServiceReference; +import org.osgi.service.cdi.reference.BeanServiceObjects; public class ReferenceModel { @@ -127,7 +129,7 @@ public class ReferenceModel { _referenceType = getReferenceType(); _referenceTarget = getReferenceTarget(); _prototype = getQualifiers().stream().filter( - ann -> ann.annotationType().equals(Prototype.class) + ann -> ann.annotationType().equals(PrototypeRequired.class) ).findFirst().isPresent(); calculateServiceType(_injectionPointType); @@ -356,7 +358,7 @@ public class ReferenceModel { throw new IllegalArgumentException( "Map.Entry must specify a generic type arguments: " + clazz); } - else if ((ReferenceServiceObjects.class == clazz) && !_referenceType.isPresent()) { + else if ((BeanServiceObjects.class == clazz) && !_referenceType.isPresent()) { throw new IllegalArgumentException( "ReferenceServiceObjects must specify a generic type argument: " + clazz); } @@ -370,7 +372,7 @@ public class ReferenceModel { throw new IllegalArgumentException( type + " must specify a generic type argument"); } - else if (ReferenceServiceObjects.class == clazz) { + else if (BeanServiceObjects.class == clazz) { _collectionType = CollectionType.SERVICEOBJECTS; return; } @@ -403,8 +405,8 @@ public class ReferenceModel { "Instance<T> is not supported with @Reference: " + type); } - if (ReferenceEvent.class == cast(rawType)) { - _collectionType = CollectionType.OBSERVER; + if (BindObject.class.isAssignableFrom(cast(rawType))) { + _collectionType = CollectionType.BINDER_OBJECT; _dynamic = true; _multiplicity = MaximumCardinality.MANY; _optional = true; @@ -414,7 +416,45 @@ public class ReferenceModel { argument instanceof ParameterizedType) { throw new IllegalArgumentException( - "Type argument <S> of ReferenceEvent must not be generic: " + argument); + "Type argument <S> of BindObject must not be generic: " + argument); + } + + _serviceType = cast(argument); + + return; + } + + if (BindServiceReference.class.isAssignableFrom(cast(rawType))) { + _collectionType = CollectionType.BINDER_REFERENCE; + _dynamic = true; + _multiplicity = MaximumCardinality.MANY; + _optional = true; + _greedy = true; + + if (argument instanceof WildcardType || + argument instanceof ParameterizedType) { + + throw new IllegalArgumentException( + "Type argument <S> of BindServiceReference must not be generic: " + argument); + } + + _serviceType = cast(argument); + + return; + } + + if (BindServiceObjects.class.isAssignableFrom(cast(rawType))) { + _collectionType = CollectionType.BINDER_SERVICE_OBJECTS; + _dynamic = true; + _multiplicity = MaximumCardinality.MANY; + _optional = true; + _greedy = true; + + if (argument instanceof WildcardType || + argument instanceof ParameterizedType) { + + throw new IllegalArgumentException( + "Type argument <S> of BindServiceObjects must not be generic: " + argument); } _serviceType = cast(argument); @@ -508,7 +548,7 @@ public class ReferenceModel { return; } - if (ReferenceServiceObjects.class == cast(rawType)) { + if (BeanServiceObjects.class == cast(rawType)) { _collectionType = CollectionType.SERVICEOBJECTS; if ((argument instanceof WildcardType) && _referenceType.isPresent()) { 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=1829454&r1=1829453&r2=1829454&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 Wed Apr 18 15:13:46 2018 @@ -262,7 +262,6 @@ public class SingleActivator extends Ins instance.activations.remove(a); } }; - instance.fireEvents(); return new AbstractMap.SimpleImmutableEntry<>(activationDTO, object); } catch (Throwable t) { Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/provider/package-info.java URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/provider/package-info.java?rev=1829454&r1=1829453&r2=1829454&view=diff ============================================================================== --- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/provider/package-info.java (original) +++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/provider/package-info.java Wed Apr 18 15:13:46 2018 @@ -3,8 +3,8 @@ namespace = ExtenderNamespace.EXTENDER_NAMESPACE, uses = { org.osgi.service.cdi.ServiceScope.class, - org.osgi.service.cdi.annotations.Bundle.class, - org.osgi.service.cdi.reference.ReferenceEvent.class, + org.osgi.service.cdi.annotations.Reference.class, + org.osgi.service.cdi.reference.BindObject.class, org.osgi.service.cdi.runtime.CDIComponentRuntime.class, org.osgi.service.cdi.runtime.dto.ActivationDTO.class, org.osgi.service.cdi.runtime.dto.template.ActivationTemplateDTO.class @@ -16,8 +16,8 @@ namespace = ImplementationNamespace.IMPLEMENTATION_NAMESPACE, uses = { org.osgi.service.cdi.ServiceScope.class, - org.osgi.service.cdi.annotations.Bundle.class, - org.osgi.service.cdi.reference.ReferenceEvent.class, + org.osgi.service.cdi.annotations.Reference.class, + org.osgi.service.cdi.reference.BindObject.class, org.osgi.service.cdi.runtime.CDIComponentRuntime.class, org.osgi.service.cdi.runtime.dto.ActivationDTO.class, org.osgi.service.cdi.runtime.dto.template.ActivationTemplateDTO.class Copied: aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_BeanServiceObjectsTest.java (from r1829162, aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_ReferenceServiceObjectsTest.java) URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_BeanServiceObjectsTest.java?p2=aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_BeanServiceObjectsTest.java&p1=aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_ReferenceServiceObjectsTest.java&r1=1829162&r2=1829454&rev=1829454&view=diff ============================================================================== --- aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_ReferenceServiceObjectsTest.java (original) +++ aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_BeanServiceObjectsTest.java Wed Apr 18 15:13:46 2018 @@ -14,9 +14,7 @@ package org.apache.aries.cdi.container.internal.model; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; import java.lang.reflect.Type; import java.util.Collection; @@ -26,16 +24,14 @@ import javax.enterprise.inject.Instance; import javax.enterprise.inject.spi.InjectionPoint; import javax.inject.Inject; -import org.apache.aries.cdi.container.internal.model.CollectionType; -import org.apache.aries.cdi.container.internal.model.ReferenceModel; import org.apache.aries.cdi.container.test.MockInjectionPoint; import org.apache.aries.cdi.container.test.beans.Foo; import org.junit.Test; import org.osgi.service.cdi.annotations.Reference; -import org.osgi.service.cdi.reference.ReferenceServiceObjects; +import org.osgi.service.cdi.reference.BeanServiceObjects; import org.osgi.util.converter.TypeReference; -public class ReferenceModel_ReferenceServiceObjectsTest { +public class ReferenceModel_BeanServiceObjectsTest { @Test(expected = IllegalArgumentException.class) public void withoutServiceDefined_raw() throws Exception { @@ -43,7 +39,7 @@ public class ReferenceModel_ReferenceSer @SuppressWarnings("rawtypes") @Inject @Reference - public ReferenceServiceObjects m; + public BeanServiceObjects m; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m")); @@ -56,7 +52,7 @@ public class ReferenceModel_ReferenceSer class C { @Inject @Reference - public ReferenceServiceObjects<?> m; + public BeanServiceObjects<?> m; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m")); @@ -67,20 +63,20 @@ public class ReferenceModel_ReferenceSer @Test public void withoutServiceDefined_typed() throws Exception { Type type = new TypeReference< - ReferenceServiceObjects<Integer> + BeanServiceObjects<Integer> >(){}.getType(); class C { @Inject @Reference - public ReferenceServiceObjects<Integer> m; + public BeanServiceObjects<Integer> m; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m")); ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build(); - assertEquals(ReferenceServiceObjects.class, referenceModel.getBeanClass()); + assertEquals(BeanServiceObjects.class, referenceModel.getBeanClass()); assertEquals(Integer.class, referenceModel.getServiceType()); assertEquals(type, referenceModel.getInjectionPointType()); assertFalse(referenceModel.dynamic()); @@ -93,21 +89,21 @@ public class ReferenceModel_ReferenceSer public void withServiceDefined_raw() throws Exception { @SuppressWarnings("rawtypes") Type type = new TypeReference< - ReferenceServiceObjects + BeanServiceObjects >(){}.getType(); class C { @SuppressWarnings("rawtypes") @Inject @Reference(Integer.class) - public ReferenceServiceObjects m; + public BeanServiceObjects m; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m")); ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build(); - assertEquals(ReferenceServiceObjects.class, referenceModel.getBeanClass()); + assertEquals(BeanServiceObjects.class, referenceModel.getBeanClass()); assertEquals(Integer.class, referenceModel.getServiceType()); assertEquals(type, referenceModel.getInjectionPointType()); assertFalse(referenceModel.dynamic()); @@ -119,20 +115,20 @@ public class ReferenceModel_ReferenceSer @Test public void withServiceDefined_wildcard() throws Exception { Type type = new TypeReference< - ReferenceServiceObjects<?> + BeanServiceObjects<?> >(){}.getType(); class C { @Inject @Reference(Integer.class) - public ReferenceServiceObjects<?> m; + public BeanServiceObjects<?> m; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m")); ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build(); - assertEquals(ReferenceServiceObjects.class, referenceModel.getBeanClass()); + assertEquals(BeanServiceObjects.class, referenceModel.getBeanClass()); assertEquals(Integer.class, referenceModel.getServiceType()); assertEquals(type, referenceModel.getInjectionPointType()); assertFalse(referenceModel.dynamic()); @@ -144,20 +140,20 @@ public class ReferenceModel_ReferenceSer @Test public void withServiceDefined_typed() throws Exception { Type type = new TypeReference< - ReferenceServiceObjects<Integer> + BeanServiceObjects<Integer> >(){}.getType(); class C { @Inject @Reference(Integer.class) - public ReferenceServiceObjects<Integer> m; + public BeanServiceObjects<Integer> m; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m")); ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build(); - assertEquals(ReferenceServiceObjects.class, referenceModel.getBeanClass()); + assertEquals(BeanServiceObjects.class, referenceModel.getBeanClass()); assertEquals(Integer.class, referenceModel.getServiceType()); assertEquals(type, referenceModel.getInjectionPointType()); assertFalse(referenceModel.dynamic()); @@ -171,7 +167,7 @@ public class ReferenceModel_ReferenceSer class C { @Inject @Reference(Integer.class) - public ReferenceServiceObjects<Foo> m; + public BeanServiceObjects<Foo> m; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m")); @@ -185,7 +181,7 @@ public class ReferenceModel_ReferenceSer @SuppressWarnings("rawtypes") @Inject @Reference - public Collection<ReferenceServiceObjects> m; + public Collection<BeanServiceObjects> m; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m")); @@ -198,7 +194,7 @@ public class ReferenceModel_ReferenceSer class C { @Inject @Reference - public Collection<ReferenceServiceObjects<?>> m; + public Collection<BeanServiceObjects<?>> m; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m")); @@ -209,13 +205,13 @@ public class ReferenceModel_ReferenceSer @Test public void collectionWithoutServiceDefined_typed() throws Exception { Type type = new TypeReference< - Collection<ReferenceServiceObjects<Integer>> + Collection<BeanServiceObjects<Integer>> >(){}.getType(); class C { @Inject @Reference - public Collection<ReferenceServiceObjects<Integer>> m; + public Collection<BeanServiceObjects<Integer>> m; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m")); @@ -235,14 +231,14 @@ public class ReferenceModel_ReferenceSer public void collectionWithServiceDefined_raw() throws Exception { @SuppressWarnings("rawtypes") Type type = new TypeReference< - Collection<ReferenceServiceObjects> + Collection<BeanServiceObjects> >(){}.getType(); class C { @SuppressWarnings("rawtypes") @Inject @Reference(Integer.class) - public Collection<ReferenceServiceObjects> m; + public Collection<BeanServiceObjects> m; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m")); @@ -260,13 +256,13 @@ public class ReferenceModel_ReferenceSer @Test public void collectionWithServiceDefined_wildcard() throws Exception { Type type = new TypeReference< - Collection<ReferenceServiceObjects<?>> + Collection<BeanServiceObjects<?>> >(){}.getType(); class C { @Inject @Reference(Integer.class) - public Collection<ReferenceServiceObjects<?>> m; + public Collection<BeanServiceObjects<?>> m; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m")); @@ -286,13 +282,13 @@ public class ReferenceModel_ReferenceSer @Test public void collectionWithServiceDefined_typed() throws Exception { Type type = new TypeReference< - Collection<ReferenceServiceObjects<Integer>> + Collection<BeanServiceObjects<Integer>> >(){}.getType(); class C { @Inject @Reference(Integer.class) - public Collection<ReferenceServiceObjects<Integer>> m; + public Collection<BeanServiceObjects<Integer>> m; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m")); @@ -313,7 +309,7 @@ public class ReferenceModel_ReferenceSer class C { @Inject @Reference(Integer.class) - public Collection<ReferenceServiceObjects<Foo>> m; + public Collection<BeanServiceObjects<Foo>> m; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m")); @@ -327,7 +323,7 @@ public class ReferenceModel_ReferenceSer @SuppressWarnings("rawtypes") @Inject @Reference - public List<ReferenceServiceObjects> m; + public List<BeanServiceObjects> m; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m")); @@ -340,7 +336,7 @@ public class ReferenceModel_ReferenceSer class C { @Inject @Reference - public List<ReferenceServiceObjects<?>> m; + public List<BeanServiceObjects<?>> m; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m")); @@ -351,13 +347,13 @@ public class ReferenceModel_ReferenceSer @Test public void listWithoutServiceDefined_typed() throws Exception { Type type = new TypeReference< - List<ReferenceServiceObjects<Integer>> + List<BeanServiceObjects<Integer>> >(){}.getType(); class C { @Inject @Reference - public List<ReferenceServiceObjects<Integer>> m; + public List<BeanServiceObjects<Integer>> m; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m")); @@ -377,14 +373,14 @@ public class ReferenceModel_ReferenceSer public void listWithServiceDefined_raw() throws Exception { @SuppressWarnings("rawtypes") Type type = new TypeReference< - List<ReferenceServiceObjects> + List<BeanServiceObjects> >(){}.getType(); class C { @SuppressWarnings("rawtypes") @Inject @Reference(Integer.class) - public List<ReferenceServiceObjects> m; + public List<BeanServiceObjects> m; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m")); @@ -403,13 +399,13 @@ public class ReferenceModel_ReferenceSer @Test public void listWithServiceDefined_wildcard() throws Exception { Type type = new TypeReference< - List<ReferenceServiceObjects<?>> + List<BeanServiceObjects<?>> >(){}.getType(); class C { @Inject @Reference(Integer.class) - public List<ReferenceServiceObjects<?>> m; + public List<BeanServiceObjects<?>> m; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m")); @@ -428,13 +424,13 @@ public class ReferenceModel_ReferenceSer @Test public void listWithServiceDefined_typed() throws Exception { Type type = new TypeReference< - List<ReferenceServiceObjects<Integer>> + List<BeanServiceObjects<Integer>> >(){}.getType(); class C { @Inject @Reference(Integer.class) - public List<ReferenceServiceObjects<Integer>> m; + public List<BeanServiceObjects<Integer>> m; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m")); @@ -455,7 +451,7 @@ public class ReferenceModel_ReferenceSer class C { @Inject @Reference(Integer.class) - public List<ReferenceServiceObjects<Foo>> m; + public List<BeanServiceObjects<Foo>> m; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m")); @@ -469,7 +465,7 @@ public class ReferenceModel_ReferenceSer @SuppressWarnings("rawtypes") @Inject @Reference - public Instance<ReferenceServiceObjects> m; + public Instance<BeanServiceObjects> m; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m")); @@ -483,7 +479,7 @@ public class ReferenceModel_ReferenceSer @SuppressWarnings("rawtypes") @Inject @Reference - public Instance<ReferenceServiceObjects> m; + public Instance<BeanServiceObjects> m; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m")); @@ -502,10 +498,10 @@ public class ReferenceModel_ReferenceSer class C { @SuppressWarnings("rawtypes") @Inject - public void set(@Reference ReferenceServiceObjects m) {}; + public void set(@Reference BeanServiceObjects m) {}; } - InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", ReferenceServiceObjects.class).getParameters()[0]); + InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", BeanServiceObjects.class).getParameters()[0]); new ReferenceModel.Builder().injectionPoint(injectionPoint).build(); } @@ -514,10 +510,10 @@ public class ReferenceModel_ReferenceSer public void p_withoutServiceDefined_wildcard() throws Exception { class C { @Inject - public void set(@Reference ReferenceServiceObjects<?> m) {}; + public void set(@Reference BeanServiceObjects<?> m) {}; } - InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", ReferenceServiceObjects.class).getParameters()[0]); + InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", BeanServiceObjects.class).getParameters()[0]); new ReferenceModel.Builder().injectionPoint(injectionPoint).build(); } @@ -525,19 +521,19 @@ public class ReferenceModel_ReferenceSer @Test public void p_withoutServiceDefined_typed() throws Exception { Type type = new TypeReference< - ReferenceServiceObjects<Integer> + BeanServiceObjects<Integer> >(){}.getType(); class C { @Inject - public void set(@Reference ReferenceServiceObjects<Integer> m) {}; + public void set(@Reference BeanServiceObjects<Integer> m) {}; } - InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", ReferenceServiceObjects.class).getParameters()[0]); + InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", BeanServiceObjects.class).getParameters()[0]); ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build(); - assertEquals(ReferenceServiceObjects.class, referenceModel.getBeanClass()); + assertEquals(BeanServiceObjects.class, referenceModel.getBeanClass()); assertEquals(Integer.class, referenceModel.getServiceType()); assertEquals(type, referenceModel.getInjectionPointType()); assertFalse(referenceModel.dynamic()); @@ -550,19 +546,19 @@ public class ReferenceModel_ReferenceSer public void p_withServiceDefined_raw() throws Exception { @SuppressWarnings("rawtypes") Type type = new TypeReference< - ReferenceServiceObjects + BeanServiceObjects >(){}.getType(); class C { @Inject - public void set(@SuppressWarnings("rawtypes") @Reference(Integer.class) ReferenceServiceObjects m) {}; + public void set(@SuppressWarnings("rawtypes") @Reference(Integer.class) BeanServiceObjects m) {}; } - InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", ReferenceServiceObjects.class).getParameters()[0]); + InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", BeanServiceObjects.class).getParameters()[0]); ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build(); - assertEquals(ReferenceServiceObjects.class, referenceModel.getBeanClass()); + assertEquals(BeanServiceObjects.class, referenceModel.getBeanClass()); assertEquals(Integer.class, referenceModel.getServiceType()); assertEquals(type, referenceModel.getInjectionPointType()); assertFalse(referenceModel.dynamic()); @@ -574,19 +570,19 @@ public class ReferenceModel_ReferenceSer @Test public void p_withServiceDefined_wildcard() throws Exception { Type type = new TypeReference< - ReferenceServiceObjects<?> + BeanServiceObjects<?> >(){}.getType(); class C { @Inject - public void set(@Reference(Integer.class) ReferenceServiceObjects<?> m) {}; + public void set(@Reference(Integer.class) BeanServiceObjects<?> m) {}; } - InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", ReferenceServiceObjects.class).getParameters()[0]); + InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", BeanServiceObjects.class).getParameters()[0]); ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build(); - assertEquals(ReferenceServiceObjects.class, referenceModel.getBeanClass()); + assertEquals(BeanServiceObjects.class, referenceModel.getBeanClass()); assertEquals(Integer.class, referenceModel.getServiceType()); assertEquals(type, referenceModel.getInjectionPointType()); assertFalse(referenceModel.dynamic()); @@ -598,19 +594,19 @@ public class ReferenceModel_ReferenceSer @Test public void p_withServiceDefined_typed() throws Exception { Type type = new TypeReference< - ReferenceServiceObjects<Integer> + BeanServiceObjects<Integer> >(){}.getType(); class C { @Inject - public void set(@Reference(Integer.class) ReferenceServiceObjects<Integer> m) {}; + public void set(@Reference(Integer.class) BeanServiceObjects<Integer> m) {}; } - InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", ReferenceServiceObjects.class).getParameters()[0]); + InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", BeanServiceObjects.class).getParameters()[0]); ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build(); - assertEquals(ReferenceServiceObjects.class, referenceModel.getBeanClass()); + assertEquals(BeanServiceObjects.class, referenceModel.getBeanClass()); assertEquals(Integer.class, referenceModel.getServiceType()); assertEquals(type, referenceModel.getInjectionPointType()); assertFalse(referenceModel.dynamic()); @@ -623,10 +619,10 @@ public class ReferenceModel_ReferenceSer public void p_withServiceDefined_wrongtype() throws Exception { class C { @Inject - public void set(@Reference(Integer.class) ReferenceServiceObjects<Foo> m) {}; + public void set(@Reference(Integer.class) BeanServiceObjects<Foo> m) {}; } - InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", ReferenceServiceObjects.class).getParameters()[0]); + InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", BeanServiceObjects.class).getParameters()[0]); new ReferenceModel.Builder().injectionPoint(injectionPoint).build(); } @@ -636,7 +632,7 @@ public class ReferenceModel_ReferenceSer class C { @SuppressWarnings("rawtypes") @Inject - public void set(@Reference Collection<ReferenceServiceObjects> m) {}; + public void set(@Reference Collection<BeanServiceObjects> m) {}; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]); @@ -648,7 +644,7 @@ public class ReferenceModel_ReferenceSer public void p_collectionWithoutServiceDefined_wildcard() throws Exception { class C { @Inject - public void set(@Reference Collection<ReferenceServiceObjects<?>> m) {}; + public void set(@Reference Collection<BeanServiceObjects<?>> m) {}; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]); @@ -659,12 +655,12 @@ public class ReferenceModel_ReferenceSer @Test public void p_collectionWithoutServiceDefined_typed() throws Exception { Type type = new TypeReference< - Collection<ReferenceServiceObjects<Integer>> + Collection<BeanServiceObjects<Integer>> >(){}.getType(); class C { @Inject - public void set(@Reference Collection<ReferenceServiceObjects<Integer>> m) {}; + public void set(@Reference Collection<BeanServiceObjects<Integer>> m) {}; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]); @@ -684,12 +680,12 @@ public class ReferenceModel_ReferenceSer public void p_collectionWithServiceDefined_raw() throws Exception { @SuppressWarnings("rawtypes") Type type = new TypeReference< - Collection<ReferenceServiceObjects> + Collection<BeanServiceObjects> >(){}.getType(); class C { @Inject - public void set(@SuppressWarnings("rawtypes") @Reference(Integer.class) Collection<ReferenceServiceObjects> m) {}; + public void set(@SuppressWarnings("rawtypes") @Reference(Integer.class) Collection<BeanServiceObjects> m) {}; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]); @@ -708,12 +704,12 @@ public class ReferenceModel_ReferenceSer @Test public void p_collectionWithServiceDefined_wildcard() throws Exception { Type type = new TypeReference< - Collection<ReferenceServiceObjects<?>> + Collection<BeanServiceObjects<?>> >(){}.getType(); class C { @Inject - public void set(@Reference(Integer.class) Collection<ReferenceServiceObjects<?>> m) {}; + public void set(@Reference(Integer.class) Collection<BeanServiceObjects<?>> m) {}; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]); @@ -732,12 +728,12 @@ public class ReferenceModel_ReferenceSer @Test public void p_collectionWithServiceDefined_typed() throws Exception { Type type = new TypeReference< - Collection<ReferenceServiceObjects<Integer>> + Collection<BeanServiceObjects<Integer>> >(){}.getType(); class C { @Inject - public void set(@Reference(Integer.class) Collection<ReferenceServiceObjects<Integer>> m) {}; + public void set(@Reference(Integer.class) Collection<BeanServiceObjects<Integer>> m) {}; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]); @@ -757,7 +753,7 @@ public class ReferenceModel_ReferenceSer public void p_collectionWithServiceDefined_wrongtype() throws Exception { class C { @Inject - public void set(@Reference(Integer.class) Collection<ReferenceServiceObjects<Foo>> m) {}; + public void set(@Reference(Integer.class) Collection<BeanServiceObjects<Foo>> m) {}; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]); @@ -770,7 +766,7 @@ public class ReferenceModel_ReferenceSer class C { @SuppressWarnings("rawtypes") @Inject - public void set(@Reference List<ReferenceServiceObjects> m) {}; + public void set(@Reference List<BeanServiceObjects> m) {}; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]); @@ -782,7 +778,7 @@ public class ReferenceModel_ReferenceSer public void p_listWithoutServiceDefined_wildcard() throws Exception { class C { @Inject - public void set(@Reference List<ReferenceServiceObjects<?>> m) {}; + public void set(@Reference List<BeanServiceObjects<?>> m) {}; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]); @@ -793,12 +789,12 @@ public class ReferenceModel_ReferenceSer @Test public void p_listWithoutServiceDefined_typed() throws Exception { Type type = new TypeReference< - List<ReferenceServiceObjects<Foo>> + List<BeanServiceObjects<Foo>> >(){}.getType(); class C { @Inject - public void set(@Reference List<ReferenceServiceObjects<Foo>> m) {}; + public void set(@Reference List<BeanServiceObjects<Foo>> m) {}; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]); @@ -818,13 +814,13 @@ public class ReferenceModel_ReferenceSer public void p_listWithServiceDefined_raw() throws Exception { @SuppressWarnings("rawtypes") Type type = new TypeReference< - List<ReferenceServiceObjects> + List<BeanServiceObjects> >(){}.getType(); class C { @SuppressWarnings("rawtypes") @Inject - public void set(@Reference(Integer.class) List<ReferenceServiceObjects> m) {}; + public void set(@Reference(Integer.class) List<BeanServiceObjects> m) {}; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]); @@ -843,12 +839,12 @@ public class ReferenceModel_ReferenceSer @Test public void p_listWithServiceDefined_wildcard() throws Exception { Type type = new TypeReference< - List<ReferenceServiceObjects<?>> + List<BeanServiceObjects<?>> >(){}.getType(); class C { @Inject - public void set(@Reference(Integer.class) List<ReferenceServiceObjects<?>> m) {}; + public void set(@Reference(Integer.class) List<BeanServiceObjects<?>> m) {}; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]); @@ -867,12 +863,12 @@ public class ReferenceModel_ReferenceSer @Test public void p_listWithServiceDefined_typed() throws Exception { Type type = new TypeReference< - List<ReferenceServiceObjects<Integer>> + List<BeanServiceObjects<Integer>> >(){}.getType(); class C { @Inject - public void set(@Reference(Integer.class) List<ReferenceServiceObjects<Integer>> m) {}; + public void set(@Reference(Integer.class) List<BeanServiceObjects<Integer>> m) {}; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]); @@ -892,7 +888,7 @@ public class ReferenceModel_ReferenceSer public void p_listWithServiceDefined_wrongtype() throws Exception { class C { @Inject - public void set(@Reference(Integer.class) List<ReferenceServiceObjects<Foo>> m) {}; + public void set(@Reference(Integer.class) List<BeanServiceObjects<Foo>> m) {}; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]); @@ -905,7 +901,7 @@ public class ReferenceModel_ReferenceSer class C { @SuppressWarnings("rawtypes") @Inject - public void set(@Reference Instance<ReferenceServiceObjects> m) {}; + public void set(@Reference Instance<BeanServiceObjects> m) {}; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Instance.class).getParameters()[0]); @@ -918,7 +914,7 @@ public class ReferenceModel_ReferenceSer class C { @SuppressWarnings("rawtypes") @Inject - public void set(@Reference Instance<ReferenceServiceObjects> m) {}; + public void set(@Reference Instance<BeanServiceObjects> m) {}; } InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Instance.class).getParameters()[0]); Modified: aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/BarAnnotated.java URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/BarAnnotated.java?rev=1829454&r1=1829453&r2=1829454&view=diff ============================================================================== --- aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/BarAnnotated.java (original) +++ aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/BarAnnotated.java Wed Apr 18 15:13:46 2018 @@ -28,7 +28,7 @@ import org.osgi.service.cdi.Configuratio import org.osgi.service.cdi.annotations.Configuration; import org.osgi.service.cdi.annotations.Greedy; import org.osgi.service.cdi.annotations.PID; -import org.osgi.service.cdi.annotations.Prototype; +import org.osgi.service.cdi.annotations.PrototypeRequired; import org.osgi.service.cdi.annotations.Reference; import org.osgi.service.cdi.annotations.Service; @@ -52,7 +52,7 @@ public class BarAnnotated { Collection<Map.Entry<Map<String, Object>, Integer>> tupleIntegers; @Inject - @Prototype + @PrototypeRequired @Reference Collection<ServiceReference<Foo>> serviceReferencesFoos; Modified: aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/BarProducer.java URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/BarProducer.java?rev=1829454&r1=1829453&r2=1829454&view=diff ============================================================================== --- aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/BarProducer.java (original) +++ aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/BarProducer.java Wed Apr 18 15:13:46 2018 @@ -14,14 +14,16 @@ package org.apache.aries.cdi.container.test.beans; +import static org.osgi.service.cdi.ServiceInstanceType.*; + import java.math.BigDecimal; import javax.enterprise.inject.Produces; import org.apache.aries.cdi.extra.propertytypes.ServiceRanking; -import org.osgi.service.cdi.annotations.Bundle; import org.osgi.service.cdi.annotations.Reference; import org.osgi.service.cdi.annotations.Service; +import org.osgi.service.cdi.annotations.ServiceInstance; public class BarProducer { @Produces @@ -32,7 +34,7 @@ public class BarProducer { @Produces @Service(Integer.class) - @Bundle + @ServiceInstance(BUNDLE) @ServiceRanking(100) Number fum = new BigDecimal(25);