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);
 


Reply via email to