Author: rotty3000
Date: Tue Sep  5 22:01:11 2017
New Revision: 1807424

URL: http://svn.apache.org/viewvc?rev=1807424&view=rev
Log:
[CDI] major refactor

Signed-off-by: Raymond AugĂ© <[email protected]>

Added:
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/CdiBundle.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/CdiBundleExtension.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/component/
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/component/ComponentDiscoveryExtension.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/component/ComponentModel.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/component/ComponentProperties.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/component/ComponentRuntimeExtension.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/component/MarkedInjectionPoint.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/configuration/
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationBean.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/bean/ConfigurationBean.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationCallback.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationManagedService.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationModel.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerBootstrap.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerDeployment.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/BundleDeployment.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerDeploymentArchive.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/BundleDeploymentArchive.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerDiscovery.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerEnvironment.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/SimpleEnvironment.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/context/
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/context/BundleContextBean.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/bean/BundleContextBean.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/context/BundleContextExtension.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/extension/
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/extension/ExtensionDependency.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ExtensionDependency.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/extension/ExtensionMetadata.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ExtensionMetadata.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/literal/CdiMark.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/CdiContainerService.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/literal/CdiMarkLiteral.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Entry.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/literal/ComponentLiteral.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/loader/AbstractLoader.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/loader/BundleResourcesLoader.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/Context.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/Model.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/AbstractModel.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ObserverMethodAnnotated.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/Registrator.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ServiceEventImpl.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/Tracker.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ServiceModel.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/Phase.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/Phase_Configuration.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/Phase_Extension.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_Extension.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/Phase_Init.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/Phase_Publish.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/phase/Phase_Reference.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/reference/
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/reference/Multiplicity.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/BindType.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/reference/ReferenceBean.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/bean/ConfigurationBean.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/reference/ReferenceCallback.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/reference/ReferenceModel.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/service/
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/service/ServiceDeclaration.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Types.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/component/
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/component/ComponentExtension_Ctor_static_reluctant_Test.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationCallbackTest_Ignore.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationCallbackTest_Optional.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationCallbackTest_Require.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationManagedServiceTest_Ignore.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationManagedServiceTest_Optional.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationManagedServiceTest_Require.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/container/
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/container/ContainerDiscoveryTest.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/EventsTest.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/ConfigurationPhaseTest.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/reference/
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/reference/ReferenceModel_PropertiesTest.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/reference/ReferenceModel_ServiceObjectsTest.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/reference/ReferenceModel_ServiceReferenceTest.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/reference/ReferenceModel_ServiceTest.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/reference/ReferenceModel_TupleTest.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/MockBeanDeploymentArchive.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/BundleDeploymentArchive.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/MockCdiContainer.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/MockCdiContainerAndComponents.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/MockInjectionPoint.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ReferenceInjectionPoint.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/MockServiceReference.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/TestUtil.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/ArrayListFooProducer.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/Bar.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/BindType.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/BarBadlyAnnotated.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/BarProducer.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/BarReference.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/BarService.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/BarWithConfig.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/BarWithReference.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/CollectionFooProducer.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/Config.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/CtorArrayListFoo.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/CtorCollectionFoo.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/CtorFoo.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/CtorFooBar.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/CtorFooFoo.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/CtorFooFooNamed.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/CtorFooNamed.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/CtorFooOptional.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/CtorListFoo.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/Drat.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/BindType.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/FieldFoo.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/FieldListFoo.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/Foo.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/FooAnnotated.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/FooProducer.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/FooReference.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/FooService.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/FooWithConfig.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/FooWithReference.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/ListFooProducer.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/MethodBindFoo.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/MethodBindFooNamed.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/MethodSetFoo.java
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/ObserverFoo.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/beans/ServiceEventImpl.java
    
aries/trunk/cdi/cdi-extender/src/test/resources/OSGI-INF/cdi/beans-annotated.xml
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/test/resources/OSGI-INF/cdi/beans-only.xml
    
aries/trunk/cdi/cdi-extender/src/test/resources/OSGI-INF/cdi/beans-badly-annotated.xml
      - copied, changed from r1806482, 
aries/trunk/cdi/cdi-extender/src/test/resources/OSGI-INF/cdi/beans-only.xml
    aries/trunk/cdi/cdi-extender/src/test/resources/logback.xml
    aries/trunk/cdi/cdi-itests/logback.xml
Removed:
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/CdiBundleExtension.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/bean/BundleContextBean.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/bean/ConfigurationBean.java
    
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/BindType.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/BootstrapContainer.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/BundleDeployment.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/BundleDeploymentArchive.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/CdiContainerService.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/CdiContainerState.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ConfigurationDependency.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ConfigurationExtension.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ConfigurationManagedService.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ConfigurationResolveAction.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Entry.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ExtensionDependency.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ExtensionMetadata.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/FilterBuilder.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_Configuration.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_Extension.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_Init.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_Publish.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_Reference.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ReferenceDependency.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ReferenceExtension.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ServiceDeclaration.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ServiceExtension.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/SimpleEnvironment.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/literal/ServiceLiteral.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/AbstractModel.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ConfigurationInjectionPoint.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ConfigurationModel.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ReferenceInjectionPoint.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/ServiceModel.java
    aries/trunk/cdi/cdi-itests/log4j.properties
Modified:
    aries/trunk/cdi/cdi-extender/pom.xml
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/Activator.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/command/CdiCommand.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/literal/ConfigurationLiteral.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/literal/ReferenceLiteral.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/loader/BundleClassLoader.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/loader/BundleResourcesLoader.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/AbstractModelBuilder.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BeansModel.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BeansModelBuilder.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/Constants.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/OSGiBeansHandler.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Conversions.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Maps.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Strings.java
    aries/trunk/cdi/cdi-extender/src/main/resources/META-INF/cdi.xsd
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/MapsTest.java
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ModelTest.java
    
aries/trunk/cdi/cdi-extender/src/test/resources/OSGI-INF/cdi/beans-configuration.xml
    aries/trunk/cdi/cdi-extender/src/test/resources/OSGI-INF/cdi/beans-only.xml
    
aries/trunk/cdi/cdi-extender/src/test/resources/OSGI-INF/cdi/beans-references.xml
    
aries/trunk/cdi/cdi-extender/src/test/resources/OSGI-INF/cdi/beans-services.xml
    aries/trunk/cdi/cdi-extension-http/pom.xml
    
aries/trunk/cdi/cdi-extension-http/src/main/java/org/apache/aries/cdi/extension/http/HttpExtension.java
    aries/trunk/cdi/cdi-extension-jndi/pom.xml
    aries/trunk/cdi/cdi-itests/bnd/basic-beans.xml
    aries/trunk/cdi/cdi-itests/bnd/tb1-beans.xml
    aries/trunk/cdi/cdi-itests/bnd/tb2-beans.xml
    aries/trunk/cdi/cdi-itests/bnd/tb3-beans.xml
    aries/trunk/cdi/cdi-itests/bnd/tb4-beans.xml
    aries/trunk/cdi/cdi-itests/bnd/tb5-beans.xml
    aries/trunk/cdi/cdi-itests/bnd/tb6-beans.xml
    aries/trunk/cdi/cdi-itests/cdi-executable.bndrun
    aries/trunk/cdi/cdi-itests/itest.bndrun
    aries/trunk/cdi/cdi-itests/pom.xml
    
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/ConstructorInjectedService.java
    
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/FieldInjectedBundleScopedImpl.java
    
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/FieldInjectedPrototypeScopedImpl.java
    
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/FieldInjectedService.java
    
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/Instance_Optional.java
    
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/Instance_ServiceProperties.java
    
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/Instance_ServiceReference.java
    
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/MethodInjectedService.java
    
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/ServiceWithProperties.java
    
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/CdiBeanTests.java
    
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/ConfigurationTests.java
    
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/EventsTests.java
    
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb3/ConfigurationBeanA.java
    
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb3/ConfigurationBeanB.java
    
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb5/ConfigurationBeanC.java
    
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb6/BeanServlet.java
    aries/trunk/cdi/javax.cdi-api/pom.xml
    aries/trunk/cdi/javax.el-api/pom.xml
    aries/trunk/cdi/javax.inject-api/pom.xml
    aries/trunk/cdi/javax.interceptor-api/pom.xml
    aries/trunk/cdi/pom.xml

Modified: aries/trunk/cdi/cdi-extender/pom.xml
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/pom.xml?rev=1807424&r1=1807423&r2=1807424&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/pom.xml (original)
+++ aries/trunk/cdi/cdi-extender/pom.xml Tue Sep  5 22:01:11 2017
@@ -85,7 +85,7 @@
                <dependency>
                        <groupId>org.jboss.weld</groupId>
                        <artifactId>weld-osgi-bundle</artifactId>
-                       <version>2.4.2.Final</version>
+                       <version>2.4.3.Final</version>
                        <exclusions>
                                <exclusion>
                                        <groupId>javax.enterprise</groupId>
@@ -127,8 +127,20 @@
                </dependency>
                <dependency>
                        <groupId>org.osgi</groupId>
+                       <artifactId>org.osgi.util.promise</artifactId>
+                       <version>1.0.0</version>
+               </dependency>
+               <dependency>
+                       <groupId>org.osgi</groupId>
                        <artifactId>osgi.core</artifactId>
                        <version>6.0.0</version>
+                       <scope>provided</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.slf4j</groupId>
+                       <artifactId>log4j-over-slf4j</artifactId>
+                       <version>1.7.25</version>
+                       <scope>test</scope>
                </dependency>
                <dependency>
                        <groupId>org.slf4j</groupId>
@@ -136,9 +148,14 @@
                        <version>1.7.0</version>
                </dependency>
                <dependency>
+                       <groupId>ch.qos.logback</groupId>
+                       <artifactId>logback-classic</artifactId>
+                       <version>1.2.3</version>
+                       <scope>test</scope>
+               </dependency>
+               <dependency>
                        <groupId>junit</groupId>
                        <artifactId>junit</artifactId>
-                       <version>4.12</version>
                        <scope>test</scope>
                </dependency>
        </dependencies>

Modified: 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/Activator.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/Activator.java?rev=1807424&r1=1807423&r2=1807424&view=diff
==============================================================================
--- 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/Activator.java
 (original)
+++ 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/Activator.java
 Tue Sep  5 22:01:11 2017
@@ -17,25 +17,19 @@ package org.apache.aries.cdi.container.i
 import static org.osgi.namespace.extender.ExtenderNamespace.EXTENDER_NAMESPACE;
 import static org.osgi.service.cdi.CdiConstants.CDI_CAPABILITY_NAME;
 
-import java.util.Comparator;
 import java.util.Dictionary;
 import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.ConcurrentSkipListMap;
 
 import org.apache.aries.cdi.container.internal.command.CdiCommand;
 import org.apache.felix.utils.extender.AbstractExtender;
 import org.apache.felix.utils.extender.Extension;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.framework.wiring.BundleWire;
 import org.osgi.framework.wiring.BundleWiring;
-import org.osgi.service.cdi.CdiListener;
-import org.osgi.util.tracker.ServiceTracker;
-import org.osgi.util.tracker.ServiceTrackerCustomizer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -53,9 +47,6 @@ public class Activator extends AbstractE
 
                _bundleContext = bundleContext;
 
-               _listenerTracker = new ServiceTracker<>(_bundleContext, 
CdiListener.class, new CdiListenerCustomizer());
-               _listenerTracker.open();
-
                registerCdiCommand();
 
                super.start(bundleContext);
@@ -82,8 +73,6 @@ public class Activator extends AbstractE
 
                super.stop(bundleContext);
 
-               _listenerTracker.close();
-
                if (_log.isDebugEnabled()) {
                        _log.debug("CDIe - stoped {}", 
bundleContext.getBundle());
                }
@@ -99,7 +88,7 @@ public class Activator extends AbstractE
                        return null;
                }
 
-               return new CdiBundleExtension(_bundleContext.getBundle(), 
bundle, _listeners, _command);
+               return new CdiBundle(_bundleContext.getBundle(), bundle, 
_command);
        }
 
        @Override
@@ -146,29 +135,5 @@ public class Activator extends AbstractE
        private BundleContext _bundleContext;
        private CdiCommand _command;
        private ServiceRegistration<?> _commandRegistration;
-       private Map<ServiceReference<CdiListener>, CdiListener> _listeners =
-               new ConcurrentSkipListMap<>(Comparator.reverseOrder());
-       private ServiceTracker<CdiListener, CdiListener> _listenerTracker;
-
-       private class CdiListenerCustomizer implements 
ServiceTrackerCustomizer<CdiListener, CdiListener> {
-
-               @Override
-               public CdiListener addingService(ServiceReference<CdiListener> 
reference) {
-                       CdiListener cdiListener = 
_bundleContext.getService(reference);
-                       _listeners.put(reference, cdiListener);
-                       return cdiListener;
-               }
-
-               @Override
-               public void modifiedService(ServiceReference<CdiListener> 
reference, CdiListener service) {
-               }
-
-               @Override
-               public void removedService(ServiceReference<CdiListener> 
reference, CdiListener service) {
-                       _listeners.remove(reference);
-                       _bundleContext.ungetService(reference);
-               }
-
-       }
 
 }
\ No newline at end of file

Copied: 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/CdiBundle.java
 (from r1806482, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/CdiBundleExtension.java)
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/CdiBundle.java?p2=aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/CdiBundle.java&p1=aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/CdiBundleExtension.java&r1=1806482&r2=1807424&rev=1807424&view=diff
==============================================================================
--- 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/CdiBundleExtension.java
 (original)
+++ 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/CdiBundle.java
 Tue Sep  5 22:01:11 2017
@@ -14,40 +14,35 @@
 
 package org.apache.aries.cdi.container.internal;
 
-import java.util.Map;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 
 import org.apache.aries.cdi.container.internal.command.CdiCommand;
-import org.apache.aries.cdi.container.internal.container.CdiContainerState;
-import org.apache.aries.cdi.container.internal.container.Phase_Init;
+import org.apache.aries.cdi.container.internal.container.ContainerState;
+import org.apache.aries.cdi.container.internal.phase.Phase;
+import org.apache.aries.cdi.container.internal.phase.Phase_Init;
 import org.apache.felix.utils.extender.Extension;
 import org.osgi.framework.Bundle;
-import org.osgi.framework.ServiceReference;
 import org.osgi.service.cdi.CdiEvent;
-import org.osgi.service.cdi.CdiListener;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class CdiBundleExtension implements Extension {
-
-       public CdiBundleExtension(
-               Bundle extenderBundle, Bundle bundle, 
Map<ServiceReference<CdiListener>, CdiListener> listeners,
-               CdiCommand command) {
+public class CdiBundle implements Extension {
 
+       public CdiBundle(Bundle extenderBundle, Bundle bundle, CdiCommand 
command) {
                _extenderBundle = extenderBundle;
                _bundle = bundle;
-               _listeners = listeners;
                _command = command;
        }
 
        @Override
        public void start() throws Exception {
                boolean acquired = false;
+
                try {
                        try {
-                               acquired = 
_stateLock.tryLock(DEFAULT_STOP_TIMEOUT, TimeUnit.MILLISECONDS);
+                               acquired = _lock.tryLock(DEFAULT_STOP_TIMEOUT, 
TimeUnit.MILLISECONDS);
                        }
                        catch ( InterruptedException e ) {
                                Thread.currentThread().interrupt();
@@ -61,34 +56,34 @@ public class CdiBundleExtension implemen
                                _log.debug("CDIe - bundle detected {}", 
_bundle);
                        }
 
-                       CdiContainerState cdiHelper = new 
CdiContainerState(_bundle, _extenderBundle, _listeners);
-
-                       _command.add(_bundle.getBundleId(), cdiHelper);
+                       _containerState = new ContainerState(_bundle, 
_extenderBundle);
 
-                       Phase_Init initPhase = null;
+                       _command.add(_bundle, _containerState);
 
                        try {
-                               initPhase = new Phase_Init(_bundle, cdiHelper);
+                               _containerState.fire(CdiEvent.Type.CREATING);
 
-                               initPhase.open();
+                               _nextPhase = new Phase_Init(_bundle, 
_containerState);
 
-                               _initPhase = initPhase;
+                               _nextPhase.open();
                        }
                        catch (Throwable t) {
-                               cdiHelper.fire(CdiEvent.Type.FAILURE, t);
+                               _containerState.fire(CdiEvent.Type.FAILURE, t);
 
-                               if (initPhase != null) {
-                                       initPhase.close();
+                               if (_nextPhase != null) {
+                                       _nextPhase.close();
                                }
 
-                               _command.remove(_bundle.getBundleId());
+                               _command.remove(_bundle);
 
-                               cdiHelper.close();
+                               _containerState.close();
+
+                               _containerState = null;
                        }
                }
                finally {
                        if (acquired) {
-                               _stateLock.unlock();
+                               _lock.unlock();
                        }
                }
        }
@@ -96,23 +91,32 @@ public class CdiBundleExtension implemen
        @Override
        public void destroy() throws Exception {
                boolean acquired = false;
+
                try {
                        try {
-                               acquired = 
_stateLock.tryLock(DEFAULT_STOP_TIMEOUT, TimeUnit.MILLISECONDS);
-
+                               acquired = _lock.tryLock(DEFAULT_STOP_TIMEOUT, 
TimeUnit.MILLISECONDS);
                        }
                        catch (InterruptedException e) {
                                Thread.currentThread().interrupt();
+
                                _log.warn(
                                        "The wait for bundle {0}/{1} being 
started before destruction has been interrupted.",
                                        _bundle.getSymbolicName(), 
_bundle.getBundleId(), e);
                        }
 
-                       _initPhase.close();
+                       _command.remove(_bundle);
+
+                       _containerState.fire(CdiEvent.Type.DESTROYING);
+
+                       _nextPhase.close();
+
+                       _nextPhase = null;
+
+                       _containerState.fire(CdiEvent.Type.DESTROYED);
 
-                       _initPhase = null;
+                       _containerState.close();
 
-                       _command.remove(_bundle.getBundleId());
+                       _containerState = null;
 
                        if (_log.isDebugEnabled()) {
                                _log.debug("CDIe - bundle removed {}", _bundle);
@@ -120,20 +124,20 @@ public class CdiBundleExtension implemen
                }
                finally {
                        if (acquired) {
-                               _stateLock.unlock();
+                               _lock.unlock();
                        }
                }
        }
 
-       private static final long DEFAULT_STOP_TIMEOUT = 60000;
+       private static final long DEFAULT_STOP_TIMEOUT = 60000; // TODO make 
this configurable
 
-       private static final Logger _log = 
LoggerFactory.getLogger(CdiBundleExtension.class);
+       private static final Logger _log = 
LoggerFactory.getLogger(CdiBundle.class);
 
        private final Bundle _bundle;
        private final CdiCommand _command;
+       private volatile ContainerState _containerState;
        private final Bundle _extenderBundle;
-       private final Map<ServiceReference<CdiListener>, CdiListener> 
_listeners;
-       private Phase_Init _initPhase;
-       private final Lock _stateLock = new ReentrantLock();
+       private final Lock _lock = new ReentrantLock();
+       private volatile Phase _nextPhase;
 
 }

Modified: 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/command/CdiCommand.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/command/CdiCommand.java?rev=1807424&r1=1807423&r2=1807424&view=diff
==============================================================================
--- 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/command/CdiCommand.java
 (original)
+++ 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/command/CdiCommand.java
 Tue Sep  5 22:01:11 2017
@@ -14,85 +14,141 @@
 
 package org.apache.aries.cdi.container.internal.command;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Dictionary;
+import java.util.Formatter;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.concurrent.ConcurrentHashMap;
 
-import org.apache.aries.cdi.container.internal.container.CdiContainerState;
-import 
org.apache.aries.cdi.container.internal.container.ConfigurationDependency;
-import org.apache.aries.cdi.container.internal.container.ExtensionDependency;
-import org.apache.aries.cdi.container.internal.container.ReferenceDependency;
+import org.apache.aries.cdi.container.internal.component.ComponentModel;
+import 
org.apache.aries.cdi.container.internal.configuration.ConfigurationCallback;
+import org.apache.aries.cdi.container.internal.container.ContainerState;
+import org.apache.aries.cdi.container.internal.extension.ExtensionDependency;
+import org.apache.aries.cdi.container.internal.model.BeansModel;
+import org.apache.aries.cdi.container.internal.reference.ReferenceCallback;
+import org.apache.aries.cdi.container.internal.reference.ReferenceModel;
+import org.apache.aries.cdi.container.internal.service.ServiceDeclaration;
 import org.apache.aries.cdi.container.internal.util.Conversions;
+import org.osgi.framework.Bundle;
 
 public class CdiCommand {
 
-       public void list() {
-               for (CdiContainerState cdiContainerState : _states.values()) {
-                       System.out.printf("[%s] %s\n", 
cdiContainerState.getId(), cdiContainerState.getLastState());
+       public String list() {
+               try (Formatter f = new Formatter()) {
+                       for (ContainerState cdiContainerState : 
_states.values()) {
+                               f.format("[%s] %s%n", cdiContainerState.id(), 
cdiContainerState.lastState());
+                       }
+                       return f.toString();
                }
        }
 
-       public void info(long bundleId) {
-               CdiContainerState cdiContainerState = _states.get(bundleId);
+       public String info(Bundle bundle) {
+               try (Formatter f = new Formatter()) {
+                       ContainerState containerState = _states.get(bundle);
 
-               if (cdiContainerState == null) {
-                       System.out.println("No matching CDI bundle found.");
+                       if (containerState == null) {
+                               f.format("No CDI Bundle found matching {}", 
bundle);
 
-                       return;
-               }
+                               return f.toString();
+                       }
+
+                       f.format("[%s] %s%n", containerState.id(), 
containerState.lastState());
 
-               System.out.printf("[%s] %s\n", cdiContainerState.getId(), 
cdiContainerState.getLastState());
-               List<ExtensionDependency> extensionDependencies = 
cdiContainerState.getExtensionDependencies();
-               if (!extensionDependencies.isEmpty()) {
-                       System.out.println("  [EXTENSIONS]");
-                       for (ExtensionDependency extensionDependency : 
extensionDependencies) {
-                               System.out.printf("    Extension: %s%s\n", 
extensionDependency.toString(), " ???is this resolved???");
+                       List<ExtensionDependency> extensionDependencies = 
containerState.extensionDependencies();
+
+                       if (!extensionDependencies.isEmpty()) {
+                               f.format("  [EXTENSIONS]");
+
+                               for (ExtensionDependency extensionDependency : 
extensionDependencies) {
+                                       f.format("    Extension: %s%s%n", 
extensionDependency.toString(), " ???is this resolved???");
+                               }
                        }
-               }
-               List<ConfigurationDependency> configurationDependencies = 
cdiContainerState.getConfigurationDependencies();
-               if (!configurationDependencies.isEmpty()) {
-                       System.out.println("  [CONFIGURATIONS]");
-                       for (ConfigurationDependency configurationDependency : 
configurationDependencies) {
-                               for (String pid : 
configurationDependency.pids()) {
-                                       System.out.printf(
-                                               "    PID: %s\n      Status: 
%s\n      Required: %s\n", pid,
-                                               
!configurationDependency.isResolved(pid) ? "UNRESOLVED" : "resolved",
-                                               
configurationDependency.isRequired());
-                                       Map<String, Object> configuration = 
configurationDependency.getConfiguration();
-
-                                       if (!configuration.isEmpty()) {
-                                               System.out.println("      
Properties:");
-                                               for (Entry<String, Object> 
entry : configuration.entrySet()) {
-                                                       String value = 
Conversions.toString(entry.getValue());
-                                                       System.out.printf("     
   %s = %s%n", entry.getKey(), value);
+
+                       BeansModel beansModel = containerState.beansModel();
+                       Collection<ComponentModel> componentModels = 
beansModel.getComponentModels();
+
+                       if (!componentModels.isEmpty()) {
+                               for (ComponentModel componentModel : 
componentModels) {
+                                       ServiceDeclaration serviceDeclaration = 
containerState.serviceComponents().get(componentModel);
+
+                                       f.format("[COMPONENT]%n");
+                                       f.format(
+                                               "  Name: %s%n    BeanClass: 
%s%n    ServiceScope: %s%n    Provides: %s%n",
+                                               componentModel.getName(),
+                                               
componentModel.getBeanClass().getName(),
+                                               
componentModel.getServiceScope(),
+                                               serviceDeclaration != null ? 
Arrays.toString(serviceDeclaration.getClassNames()): "not yet ready!");
+
+                                       f.format("  [CONFIGURATIONS]%n");
+
+                                       Map<String, ConfigurationCallback> 
configurationCallbacks = 
containerState.configurationCallbacks().get(componentModel);
+
+                                       for (Entry<String, 
ConfigurationCallback> entry : configurationCallbacks.entrySet()) {
+                                               f.format(
+                                                       "    PID: %s%n      
Policy: %s%n      Resolved: %s%n",
+                                                       entry.getKey(),
+                                                       
entry.getValue().policy(),
+                                                       
entry.getValue().resolved() ? "YES" : "NO");
+                                       }
+
+                                       if (serviceDeclaration != null) {
+                                               Dictionary<String, ?> 
configuration = serviceDeclaration.getServiceProperties();
+
+                                               if (!configuration.isEmpty()) {
+                                                       f.format("    
Properties:%n");
+
+                                                       List<String> keys = 
Collections.list(configuration.keys());
+
+                                                       Collections.sort(keys);
+
+                                                       for (String key : keys) 
{
+                                                               String value = 
Conversions.toString(configuration.get(key));
+
+                                                               f.format("      
%s = %s%n", key, value);
+                                                       }
+                                               }
+                                       }
+
+                                       List<ReferenceModel> references = 
componentModel.getReferences();
+
+                                       if (!references.isEmpty()) {
+                                               f.format("  [REFERENCES]%n");
+
+                                               Map<String, ReferenceCallback> 
referenceCallbacks = containerState.referenceCallbacks().get(componentModel);
+
+                                               for (ReferenceModel 
referenceModel : references) {
+                                                       f.format(
+                                                               "    Name: %s%n 
     Service: %s%n      Target: %s%n      Cardinality: %s%n      Policy: %s%n   
   Policy Option: %s%n      Scope: %s%n      Resolved: %s%n",
+                                                               
referenceModel.getName(),
+                                                               
referenceModel.getServiceClass().getName(),
+                                                               
referenceModel.getTarget(),
+                                                               
referenceModel.getCardinality(),
+                                                               
referenceModel.getPolicy(),
+                                                               
referenceModel.getPolicyOption(),
+                                                               
referenceModel.getScope(),
+                                                               
referenceCallbacks.get(referenceModel.getName()).resolved() ? "YES" : "NO");
                                                }
                                        }
                                }
                        }
-               }
-               List<ReferenceDependency> referenceDependencies = 
cdiContainerState.getReferenceDependencies();
-               if (!referenceDependencies.isEmpty()) {
-                       System.out.println("  [REFERENCES]");
-                       for (ReferenceDependency referenceDependency : 
referenceDependencies) {
-                               System.out.printf(
-                                       "    Reference: %s\n      Status: %s\n  
    Min Cardinality: %s\n",
-                                       referenceDependency.toString(),
-                                       !referenceDependency.isResolved() ? 
"UNRESOLVED" : "resolved",
-                                       
referenceDependency.getMinCardinality());
-                       }
+
+                       return f.toString();
                }
        }
 
-       public void add(Long bundleId, CdiContainerState cdiContainerState) {
-               _states.put(bundleId, cdiContainerState);
+       public void add(Bundle bundle, ContainerState cdiContainerState) {
+               _states.put(bundle, cdiContainerState);
        }
 
-       public void remove(Long bundleId) {
-               _states.remove(bundleId);
+       public void remove(Bundle bundle) {
+               _states.remove(bundle);
        }
 
-       private final Map<Long, CdiContainerState> _states = new 
ConcurrentHashMap<>();
+       private final Map<Bundle, ContainerState> _states = new 
ConcurrentHashMap<>();
 
 
 }
\ No newline at end of file

Added: 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/component/ComponentDiscoveryExtension.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/component/ComponentDiscoveryExtension.java?rev=1807424&view=auto
==============================================================================
--- 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/component/ComponentDiscoveryExtension.java
 (added)
+++ 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/component/ComponentDiscoveryExtension.java
 Tue Sep  5 22:01:11 2017
@@ -0,0 +1,468 @@
+/**
+ * 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.component;
+
+import java.lang.annotation.Annotation;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+import java.util.function.Consumer;
+import java.util.function.Predicate;
+
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.Annotated;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+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.ProcessInjectionPoint;
+import javax.enterprise.inject.spi.ProcessObserverMethod;
+
+import 
org.apache.aries.cdi.container.internal.component.ComponentModel.Builder;
+import 
org.apache.aries.cdi.container.internal.configuration.ConfigurationModel;
+import org.apache.aries.cdi.container.internal.model.BeansModel;
+import org.apache.aries.cdi.container.internal.model.ObserverMethodAnnotated;
+import org.apache.aries.cdi.container.internal.reference.ReferenceModel;
+import org.jboss.weld.exceptions.IllegalStateException;
+import org.osgi.service.cdi.annotations.Component;
+import org.osgi.service.cdi.annotations.Configuration;
+import org.osgi.service.cdi.annotations.Reference;
+import org.osgi.service.cdi.annotations.ReferencePolicy;
+import org.osgi.service.cdi.annotations.ServiceEvent;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ComponentDiscoveryExtension implements Extension {
+
+       public ComponentDiscoveryExtension(BeansModel beansModel) {
+               _beansModel = beansModel;
+       }
+
+       /*
+        * Process annotated classes to sync them up with the meta-model.
+        */
+       <X> void processAnnotatedType(@Observes ProcessAnnotatedType<X> pat, 
BeanManager beanManager) {
+               final AnnotatedType<X> at = pat.getAnnotatedType();
+
+               Class<X> annotatedClass = at.getJavaClass();
+
+               final String className = annotatedClass.getName();
+
+               ComponentModel componentModel = 
_beansModel.getComponentModel(className);
+
+               if (componentModel == null) {
+                       return;
+               }
+
+               // If the component's class is annotated with @Component, 
replace the meta-model with one built from the annotation.
+
+               Component component = at.getAnnotation(Component.class);
+
+               if (component != null) {
+
+                       // This also means we have to throw away any descriptor 
configurations/references.
+
+                       if (_log.isDebugEnabled()) {
+                               _log.debug("CDIe - OSGi CDI annotations found. 
Clearing descriptor infos for {}", className);
+                       }
+
+                       _beansModel.removeComponentModel(className);
+
+                       Builder builder = new ComponentModel.Builder(
+                               annotatedClass
+                       ).name(
+                               component.name()
+                       ).scope(
+                               component.serviceScope()
+                       );
+
+                       for (String property : component.property()) {
+                               builder.property(property);
+                       }
+
+                       for (Class<?> provide : component.service()) {
+                               builder.provide(provide.getName());
+                       }
+
+                       componentModel = builder.build();
+
+                       // Mark the component as "found" so that in the end we 
can produce an error for missing components.
+
+                       componentModel.found(true);
+
+                       _beansModel.addComponentModel(className, 
componentModel);
+
+                       return;
+               }
+
+               componentModel.found(true);
+
+               // If we didn't find @Component, we still need to check if the 
class has @Configuration/@Reference annotations.
+               // If so, we need to throw away those descriptor infos.
+
+               final List<ConfigurationModel> configurations = 
componentModel.getConfigurations();
+               final List<ReferenceModel> references = 
componentModel.getReferences();
+
+               Predicate<Annotation> hasAnnotations = annotation ->
+                       Configuration.class.isInstance(annotation) || 
Reference.class.isInstance(annotation);
+
+               Consumer<Object> clearInfos = o -> {
+                       if (_log.isDebugEnabled()) {
+                               _log.debug("CDIe - OSGi CDI annotations found. 
Clearing descriptor infos for {}", className);
+                       }
+                       configurations.clear();
+                       references.clear();
+               };
+
+               // check constructors
+
+               Arrays.stream(
+                       annotatedClass.getDeclaredConstructors()
+               ).filter(
+                       ctor -> Arrays.stream(
+                               ctor.getParameterAnnotations()
+                       ).flatMap(
+                               array -> Arrays.stream(array)
+                       ).filter(
+                               hasAnnotations
+                       ).findFirst().isPresent()
+               ).findFirst().ifPresent(
+                       clearInfos
+               );
+
+               // check fields
+
+               Arrays.stream(
+                       annotatedClass.getDeclaredFields()
+               ).filter(
+                       field -> Arrays.stream(
+                               field.getAnnotations()
+                       ).filter(
+                               hasAnnotations
+                       ).findFirst().isPresent()
+               ).findFirst().ifPresent(
+                       clearInfos
+               );
+
+               // check methods
+
+               Arrays.stream(
+                       annotatedClass.getDeclaredMethods()
+               ).filter(
+                       method -> Arrays.stream(
+                               method.getParameterAnnotations()
+                       ).flatMap(
+                               array -> Arrays.stream(array)
+                       ).filter(
+                               hasAnnotations
+                       ).findFirst().isPresent()
+               ).findFirst().ifPresent(
+                       clearInfos
+               );
+       }
+
+       /*
+        * Process every injection point
+        */
+       void processInjectionPoint(@Observes ProcessInjectionPoint<?, ?> pip) {
+               final InjectionPoint injectionPoint = pip.getInjectionPoint();
+
+               Bean<?> bean = injectionPoint.getBean();
+
+               if (bean == null) {
+
+                       // It could be an observer method on an extension! 
Ignore it!
+
+                       if (_log.isDebugEnabled()) {
+                               _log.debug("CDIe - Ignoring injection point {} 
on non-component able bean!", injectionPoint);
+                       }
+
+                       return;
+               }
+
+               String beanClassName = bean.getBeanClass().getName();
+
+               // Is it a component?
+
+               ComponentModel componentModel = 
_beansModel.getComponentModel(beanClassName);
+
+               if (componentModel == null) {
+
+                       // No it's not!
+
+                       return;
+               }
+
+               Annotated annotated = injectionPoint.getAnnotated();
+
+               Reference reference = annotated.getAnnotation(Reference.class);
+               Configuration configuration = 
annotated.getAnnotation(Configuration.class);
+
+               // Is it annotated with @Reference?
+
+               if (reference != null) {
+                       processReference(pip, componentModel, reference, 
configuration);
+
+                       return;
+               }
+
+               // Is it annotated with @Configuration?
+
+               else if (configuration != null) {
+                       processConfiguration(pip, bean, componentModel, 
configuration);
+
+                       return;
+               }
+
+               if (matchReference(pip, bean, componentModel, injectionPoint)) {
+                       return;
+               }
+
+               matchConfiguration(pip, bean, componentModel, injectionPoint);
+       }
+
+       void processObserverMethod(@Observes 
ProcessObserverMethod<ServiceEvent<?>, ?> pom) {
+               ObserverMethod<ServiceEvent<?>> observerMethod = 
pom.getObserverMethod();
+
+               if (_log.isDebugEnabled()) {
+                       _log.debug("CDIe - Processing observer method {}", 
observerMethod);
+               }
+
+               Class<?> beanClass = observerMethod.getBeanClass();
+
+               final String className = beanClass.getName();
+
+               ComponentModel componentModel = 
_beansModel.getComponentModel(className);
+
+               if (componentModel == null) {
+                       pom.addDefinitionError(
+                               new IllegalArgumentException(
+                                       String.format(
+                                               "The observer method {} is 
using the event type 'ServiceEvent' but is not defined as a bean",
+                                               observerMethod)));
+
+                       return;
+               }
+
+               Reference reference = getQualifier(observerMethod, 
Reference.class);
+               Configuration configuration = getQualifier(observerMethod, 
Configuration.class);
+
+               if (reference != null) {
+                       processReference(pom, componentModel, reference, 
configuration);
+
+                       return;
+               }
+       }
+
+       @SuppressWarnings("unchecked")
+       private <T extends Annotation> T getQualifier(
+               ObserverMethod<ServiceEvent<?>> observerMethod, Class<T> clazz) 
{
+               Set<Annotation> qualifiers = 
observerMethod.getObservedQualifiers();
+               for (Annotation annotation : qualifiers) {
+                       if 
(clazz.isAssignableFrom(annotation.annotationType())) {
+                               return (T)annotation;
+                       }
+               }
+               return null;
+       }
+
+       private boolean matchConfiguration(
+               ProcessInjectionPoint<?, ?> pip,
+               Bean<?> bean,
+               ComponentModel componentModel,
+               InjectionPoint injectionPoint) {
+
+               for (ConfigurationModel configurationModel : 
componentModel.getConfigurations()) {
+                       if 
(injectionPoint.getType().equals(configurationModel.getType())) {
+
+                               if (configurationModel.found() &&
+                                       
injectionPoint.getQualifiers().equals(configurationModel.getQualifiers())) {
+
+                                       pip.addDefinitionError(
+                                               new IllegalStateException(
+                                                       
String.format("duplicate injection point match found for configuration %s", 
configurationModel)));
+
+                                       return false;
+                               }
+
+                               
configurationModel.setQualifiers(injectionPoint.getQualifiers());
+                               configurationModel.found(true);
+
+                               return true;
+                       }
+               }
+
+               return false;
+       }
+
+       private boolean matchReference(
+               ProcessInjectionPoint<?, ?> pip,
+               Bean<?> bean,
+               ComponentModel componentModel,
+               InjectionPoint injectionPoint) {
+
+               for (ReferenceModel referenceModel : 
componentModel.getReferences()) {
+                       if 
(injectionPoint.getType().equals(referenceModel.getInjectionPointType())) {
+                               if (referenceModel.found() &&
+                                       
injectionPoint.getQualifiers().equals(referenceModel.getQualifiers())) {
+
+                                       pip.addDefinitionError(
+                                               new IllegalStateException(
+                                                       
String.format("duplicate injection point match found for reference %s", 
referenceModel)));
+
+                                       return false;
+                               }
+
+                               
referenceModel.setQualifiers(injectionPoint.getQualifiers());
+                               referenceModel.found(true);
+
+                               return true;
+                       }
+               }
+
+               return false;
+       }
+
+       private void processConfiguration(
+               ProcessInjectionPoint<?, ?> pip,
+               Bean<?> bean,
+               ComponentModel componentModel,
+               Configuration configuration) {
+
+               InjectionPoint injectionPoint = pip.getInjectionPoint();
+
+               ConfigurationModel configurationModel = new 
ConfigurationModel.Builder(
+                       injectionPoint.getType()
+               ).pid(
+                       configuration.value()
+               ).policy(
+                       configuration.configurationPolicy()
+               ).qualifiers(
+                       injectionPoint.getQualifiers()
+               ).build();
+
+               configurationModel.found(true);
+
+               if 
(componentModel.getConfigurations().remove(configurationModel)) {
+                       if (_log.isDebugEnabled()) {
+                               _log.debug("CDIe - OSGi CDI annotations found. 
Clearing descriptor configuration for {}", injectionPoint);
+                       }
+               }
+
+               componentModel.getConfigurations().add(configurationModel);
+       }
+
+       private void processReference(
+               ProcessInjectionPoint<?, ?> pip,
+               ComponentModel componentModel,
+               Reference reference,
+               Configuration configuration) {
+
+               InjectionPoint injectionPoint = pip.getInjectionPoint();
+
+               try {
+                       if (configuration != null) {
+                               throw new IllegalArgumentException(
+                                       String.format(
+                                               "Cannot use @Reference and 
@Configuration on the same injection point {}",
+                                               injectionPoint));
+                       }
+
+                       ReferenceModel referenceModel = new 
ReferenceModel.Builder(
+                               injectionPoint.getQualifiers()
+                       ).cardinality(
+                               reference.cardinality()
+                       ).annotated(
+                               injectionPoint.getAnnotated()
+                       ).name(
+                               reference.name()
+                       ).option(
+                               reference.policyOption()
+                       ).policy(
+                               reference.policy()
+                       ).scope(
+                               reference.scope()
+                       ).service(
+                               reference.service()
+                       ).target(
+                               reference.target()
+                       ).build();
+
+                       if 
(componentModel.getReferences().remove(referenceModel)) {
+                               if (_log.isDebugEnabled()) {
+                                       _log.debug("CDIe - OSGi CDI annotations 
found. Clearing descriptor reference for {}", injectionPoint);
+                               }
+                       }
+
+                       referenceModel.found(true);
+
+                       componentModel.getReferences().add(referenceModel);
+               }
+               catch (IllegalArgumentException iae) {
+                       _log.error("CDIe - Component definition error on {}", 
injectionPoint, iae);
+
+                       pip.addDefinitionError(iae);
+               }
+       }
+
+       private void processReference(
+               ProcessObserverMethod<ServiceEvent<?>, ?> pom,
+               ComponentModel componentModel,
+               Reference reference,
+               Configuration configuration) {
+
+               ObserverMethod<ServiceEvent<?>> observerMethod = 
pom.getObserverMethod();
+
+               try {
+                       if (configuration != null) {
+                               throw new IllegalArgumentException(
+                                       String.format(
+                                               "Cannot use @Reference and 
@Configuration on the same observer method {}",
+                                               observerMethod));
+                       }
+
+                       ReferenceModel referenceModel = new 
ReferenceModel.Builder(
+                               observerMethod.getObservedQualifiers()
+                       ).annotated(
+                               new ObserverMethodAnnotated(observerMethod)
+                       ).policy(
+                               ReferencePolicy.DYNAMIC
+                       ).build();
+
+                       if 
(componentModel.getReferences().remove(referenceModel)) {
+                               if (_log.isDebugEnabled()) {
+                                       _log.debug("CDIe - OSGi CDI annotations 
found. Clearing descriptor reference for {}", observerMethod);
+                               }
+                       }
+
+                       referenceModel.found(true);
+
+                       componentModel.getReferences().add(referenceModel);
+               }
+               catch (IllegalArgumentException iae) {
+                       _log.error("CDIe - Component definition error on {}", 
observerMethod, iae);
+
+                       pom.addDefinitionError(iae);
+               }
+       }
+
+       private static final Logger _log = 
LoggerFactory.getLogger(ComponentDiscoveryExtension.class);
+
+       private final BeansModel _beansModel;
+
+}

Added: 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/component/ComponentModel.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/component/ComponentModel.java?rev=1807424&view=auto
==============================================================================
--- 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/component/ComponentModel.java
 (added)
+++ 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/component/ComponentModel.java
 Tue Sep  5 22:01:11 2017
@@ -0,0 +1,202 @@
+/**
+ * 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.component;
+
+import static org.apache.aries.cdi.container.internal.model.Model.*;
+import static 
org.apache.aries.cdi.container.internal.model.Constants.CDI10_URI;
+import static 
org.apache.aries.cdi.container.internal.model.Constants.NAME_ATTRIBUTE;
+import static 
org.apache.aries.cdi.container.internal.model.Constants.SERVICE_SCOPE_ATTRIBUTE;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import 
org.apache.aries.cdi.container.internal.configuration.ConfigurationModel;
+import org.apache.aries.cdi.container.internal.reference.ReferenceModel;
+import org.osgi.service.cdi.annotations.ServiceScope;
+import org.xml.sax.Attributes;
+
+public class ComponentModel {
+
+       public static class Builder {
+
+               public Builder(Class<?> beanClass) {
+                       Objects.requireNonNull(beanClass);
+                       _beanClass = beanClass;
+               }
+
+               public Builder attributes(Attributes attributes) {
+                       _name = getValue(CDI10_URI, NAME_ATTRIBUTE, attributes, 
_beanClass.getName());
+                       _scope = ServiceScope.get(getValue(
+                                       CDI10_URI, SERVICE_SCOPE_ATTRIBUTE, 
attributes, ServiceScope.DEFAULT.toString()));
+                       return this;
+               }
+
+               public ComponentModel build() {
+                       if ((_name == null) || (_name.length() == 0)) {
+                               _name = _beanClass.getName();
+                       }
+
+                       if (_scope == null) {
+                               if (!_provides.isEmpty()) {
+                                       _scope = ServiceScope.PROTOTYPE;
+                               }
+                               else {
+                                       _scope = ServiceScope.DEFAULT;
+                               }
+                       }
+
+                       return new ComponentModel(_beanClass, _name, _provides, 
_scope, _properties, _configurations, _references);
+               }
+
+               public Builder configuration(ConfigurationModel 
configurationModel) {
+                       _configurations.add(configurationModel);
+                       return this;
+               }
+
+               public Builder name(String name) {
+                       _name = name;
+                       return this;
+               }
+
+               public Builder provide(String className) {
+                       _provides.add(className);
+                       return this;
+               }
+
+               public Builder property(String property) {
+                       _properties.add(property);
+                       return this;
+               }
+
+               public Builder reference(ReferenceModel referenceModel) {
+                       _references.add(referenceModel);
+                       return this;
+               }
+
+               public Builder scope(ServiceScope scope) {
+                       _scope = scope;
+                       return this;
+               }
+
+               private Class<?> _beanClass;
+               private final List<ConfigurationModel> _configurations = new 
CopyOnWriteArrayList<>();
+               private String _name;
+               private final List<String> _properties = new 
CopyOnWriteArrayList<>();
+               private final List<String> _provides = new 
CopyOnWriteArrayList<>();
+               private final List<ReferenceModel> _references = new 
CopyOnWriteArrayList<>();
+               private ServiceScope _scope;
+
+       }
+
+       private ComponentModel(
+               Class<?> beanClass,
+               String name,
+               List<String> provides,
+               ServiceScope scope,
+               List<String> properties,
+               List<ConfigurationModel> configurations,
+               List<ReferenceModel> references) {
+
+               _beanClass = beanClass;
+               _name = name;
+               _properties = properties;
+               _provides = provides;
+               _scope = scope;
+               _configurations = configurations;
+               _references = references;
+       }
+
+       @Override
+       public boolean equals(Object obj) {
+               if (this == obj)
+                       return true;
+               if (obj == null)
+                       return false;
+               if (getClass() != obj.getClass())
+                       return false;
+               ComponentModel other = (ComponentModel) obj;
+               if (_beanClass.getName() == null) {
+                       if (other._beanClass.getName() != null)
+                               return false;
+               } else if 
(!_beanClass.getName().equals(other._beanClass.getName()))
+                       return false;
+               return true;
+       }
+
+       public boolean found() {
+               return _found.get();
+       }
+
+       public void found(boolean found) {
+               _found.set(found);
+       }
+
+       public Class<?> getBeanClass() {
+               return _beanClass;
+       }
+
+       public List<ConfigurationModel> getConfigurations() {
+               return _configurations;
+       }
+
+       public String getName() {
+               return _name;
+       }
+
+       public String[] getProperties() {
+               return _properties.toArray(new String[0]);
+       }
+
+       public List<String> getProvides() {
+               return _provides;
+       }
+
+       public List<ReferenceModel> getReferences() {
+               return _references;
+       }
+
+       public ServiceScope getServiceScope() {
+               return _scope;
+       }
+
+       @Override
+       public int hashCode() {
+               final int prime = 31;
+               int result = 1;
+               result = prime * result + ((_beanClass.getName() == null) ? 0 : 
_beanClass.getName().hashCode());
+               return result;
+       }
+
+       @Override
+       public String toString() {
+               if (_string == null) {
+                       _string = String.format("ComponentModel[name='%s', 
beanClass='%s', scope='%s', provides='%s']", _name, _beanClass.getName(), 
_scope, _provides);
+               }
+               return _string;
+       }
+
+       private final Class<?> _beanClass;
+       private final AtomicBoolean _found = new AtomicBoolean();
+       private String _name;
+       private final List<String> _properties;
+       private final List<String> _provides;
+       private final List<ConfigurationModel> _configurations;
+       private final List<ReferenceModel> _references;
+       private ServiceScope _scope;
+       private volatile String _string;
+
+}

Added: 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/component/ComponentProperties.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/component/ComponentProperties.java?rev=1807424&view=auto
==============================================================================
--- 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/component/ComponentProperties.java
 (added)
+++ 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/component/ComponentProperties.java
 Tue Sep  5 22:01:11 2017
@@ -0,0 +1,104 @@
+/**
+ * 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.component;
+
+import java.util.Dictionary;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Map;
+
+import javax.enterprise.inject.spi.Bean;
+
+import 
org.apache.aries.cdi.container.internal.configuration.ConfigurationCallback;
+import org.apache.aries.cdi.container.internal.container.ContainerState;
+import org.apache.aries.cdi.container.internal.util.Conversions;
+import org.apache.aries.cdi.container.internal.util.Maps;
+import org.osgi.service.cdi.annotations.Configuration;
+import org.osgi.util.converter.TypeReference;
+
+public class ComponentProperties {
+
+       public ComponentProperties bean(Bean<?> bean) {
+               _bean = bean;
+               return this;
+       }
+
+       public ComponentProperties componentModel(ComponentModel 
componentModel) {
+               _componentModel = componentModel;
+               return this;
+       }
+
+       public ComponentProperties containerState(ContainerState 
containerState) {
+               _containerState = containerState;
+               return this;
+       }
+
+       public Dictionary<String, ?> build() {
+               Dictionary<String, Object> componentProperties = new 
Hashtable<>();
+
+               _bean.getQualifiers().stream().forEach(
+                       annotation -> {
+                               Map<String, Object> map = Conversions.convert(
+                                       
annotation).sourceAs(annotation.annotationType()).to(_mapType);
+
+                               for (Map.Entry<String, Object> entry : 
map.entrySet()) {
+                                       componentProperties.put(entry.getKey(), 
entry.getValue());
+                               }
+
+                       }
+               );
+
+               for (Map.Entry<String, Object> entry : 
Maps.map(_componentModel.getProperties()).entrySet()) {
+                       componentProperties.put(entry.getKey(), 
entry.getValue());
+               }
+
+               Map<String, ConfigurationCallback> map = 
_containerState.configurationCallbacks().get(_componentModel);
+
+               if ((_pid == null) || (_pid.length == 0)) {
+                       _pid = map.keySet().toArray(new String[0]);
+               }
+
+               for (String pid : _pid) {
+                       if (Configuration.NAME.equals(pid)) {
+                               pid = _componentModel.getName();
+                       }
+                       ConfigurationCallback callback = map.get(pid);
+                       Dictionary<String,?> properties = callback.properties();
+
+                       for (Enumeration<String> enumeration = 
properties.keys(); enumeration.hasMoreElements();) {
+                               String key = enumeration.nextElement();
+
+                               componentProperties.put(key, 
properties.get(key));
+                       }
+               }
+
+               componentProperties.put("component.name", 
_componentModel.getName());
+
+               return componentProperties;
+       }
+
+       public ComponentProperties pid(String[] pid) {
+               _pid = pid;
+               return this;
+       }
+
+       private static final TypeReference<Map<String, Object>> _mapType = new 
TypeReference<Map<String, Object>>(){};
+
+       private Bean<?> _bean;
+       private String[] _pid;
+       private ComponentModel _componentModel;
+       private ContainerState _containerState;
+
+}

Added: 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/component/ComponentRuntimeExtension.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/component/ComponentRuntimeExtension.java?rev=1807424&view=auto
==============================================================================
--- 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/component/ComponentRuntimeExtension.java
 (added)
+++ 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/component/ComponentRuntimeExtension.java
 Tue Sep  5 22:01:11 2017
@@ -0,0 +1,399 @@
+/**
+ * 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.component;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import javax.enterprise.context.Dependent;
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.Annotated;
+import javax.enterprise.inject.spi.AnnotatedConstructor;
+import javax.enterprise.inject.spi.AnnotatedField;
+import javax.enterprise.inject.spi.AnnotatedMethod;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+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.ProcessObserverMethod;
+
+import org.apache.aries.cdi.container.internal.configuration.ConfigurationBean;
+import 
org.apache.aries.cdi.container.internal.configuration.ConfigurationModel;
+import org.apache.aries.cdi.container.internal.container.ContainerState;
+import org.apache.aries.cdi.container.internal.literal.ComponentLiteral;
+import org.apache.aries.cdi.container.internal.literal.ConfigurationLiteral;
+import org.apache.aries.cdi.container.internal.literal.ReferenceLiteral;
+import org.apache.aries.cdi.container.internal.model.ObserverMethodAnnotated;
+import org.apache.aries.cdi.container.internal.reference.ReferenceBean;
+import org.apache.aries.cdi.container.internal.reference.ReferenceModel;
+import org.apache.aries.cdi.container.internal.service.ServiceDeclaration;
+import org.apache.aries.cdi.container.internal.util.Sets;
+import org.apache.aries.cdi.container.internal.util.Types;
+import org.jboss.weld.bean.builtin.BeanManagerProxy;
+import org.jboss.weld.manager.BeanManagerImpl;
+import org.osgi.service.cdi.annotations.Component;
+import org.osgi.service.cdi.annotations.Configuration;
+import org.osgi.service.cdi.annotations.Reference;
+import org.osgi.service.cdi.annotations.ReferencePolicy;
+import org.osgi.service.cdi.annotations.ReferenceScope;
+import org.osgi.service.cdi.annotations.ServiceEvent;
+import org.osgi.service.cdi.annotations.ServiceScope;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ComponentRuntimeExtension implements Extension {
+
+       public ComponentRuntimeExtension(ContainerState containerState) {
+               _containerState = containerState;
+       }
+
+       ConfigurationModel matchConfiguration(ComponentModel componentModel, 
ProcessInjectionPoint<?, ?> pip) {
+               InjectionPoint injectionPoint = pip.getInjectionPoint();
+
+               Configuration configuration = 
injectionPoint.getAnnotated().getAnnotation(Configuration.class);
+
+               for (ConfigurationModel configurationModel : 
componentModel.getConfigurations()) {
+                       ConfigurationModel tempModel = new 
ConfigurationModel.Builder(
+                               injectionPoint.getType()
+                       ).injectionPoint(
+                               injectionPoint
+                       ).build();
+
+                       if (configurationModel.equals(tempModel)) {
+                               if (configuration == null) {
+                                       configuration = new 
ConfigurationLiteral(
+                                               configurationModel.getPid(), 
configurationModel.getConfigurationPolicy());
+                               }
+
+                               MarkedInjectionPoint markedInjectionPoint = new 
MarkedInjectionPoint(
+                                       injectionPoint,
+                                       configuration,
+                                       _mark.incrementAndGet());
+
+                               pip.setInjectionPoint(markedInjectionPoint);
+
+                               return configurationModel;
+                       }
+               }
+
+               return null;
+       }
+
+       ReferenceModel matchReference(ComponentModel componentModel, 
ProcessInjectionPoint<?, ?> pip) {
+               InjectionPoint injectionPoint = pip.getInjectionPoint();
+
+               Reference reference = 
injectionPoint.getAnnotated().getAnnotation(Reference.class);
+
+               for (ReferenceModel referenceModel : 
componentModel.getReferences()) {
+                       ReferenceModel tempModel = new ReferenceModel.Builder(
+                               injectionPoint.getQualifiers()
+                       ).scope(
+                               referenceModel.getScope()
+                       ).target(
+                               referenceModel.getTarget()
+                       ).annotated(
+                               injectionPoint.getAnnotated()
+                       ).build();
+
+                       if (referenceModel.equals(tempModel)) {
+                               if (reference == null) {
+                                       reference = new ReferenceLiteral(
+                                               referenceModel.getName(),
+                                               
referenceModel.getServiceClass(),
+                                               referenceModel.getCardinality(),
+                                               referenceModel.getPolicy(),
+                                               
referenceModel.getPolicyOption(),
+                                               referenceModel.getScope(),
+                                               referenceModel.getTarget());
+                               }
+
+                               MarkedInjectionPoint markedInjectionPoint = new 
MarkedInjectionPoint(
+                                       injectionPoint,
+                                       reference,
+                                       _mark.incrementAndGet());
+
+                               pip.setInjectionPoint(markedInjectionPoint);
+
+                               return referenceModel;
+                       }
+               }
+
+               return null;
+       }
+
+       ReferenceModel matchReference(ComponentModel componentModel, 
ProcessObserverMethod<ServiceEvent<?>, ?> pom) {
+               ObserverMethod<ServiceEvent<?>> observerMethod = 
pom.getObserverMethod();
+
+               Annotated annotated = new 
ObserverMethodAnnotated(observerMethod);
+
+               for (ReferenceModel referenceModel : 
componentModel.getReferences()) {
+                       ReferenceModel tempModel = new ReferenceModel.Builder(
+                               observerMethod.getObservedQualifiers()
+                       ).annotated(
+                               annotated
+                       ).policy(
+                               ReferencePolicy.DYNAMIC
+                       ).build();
+
+                       if (referenceModel.equals(tempModel)) {
+                               return referenceModel;
+                       }
+               }
+
+               return null;
+       }
+
+       /*
+        * discover if an annotated class is a component
+        */
+       <X> void processAnnotatedType(@Observes ProcessAnnotatedType<X> pat, 
BeanManager beanManager) {
+               final AnnotatedType<X> at = pat.getAnnotatedType();
+
+               Class<X> annotatedClass = at.getJavaClass();
+
+               ComponentModel componentModel = 
_containerState.beansModel().getComponentModel(annotatedClass.getName());
+
+               // Is it one of the CDI Bundle's defined beans?
+
+               if (componentModel == null) {
+
+                       // No it's not!
+
+                       return;
+               }
+
+               // If the class is already annotated with @Component, skip it!
+
+               if (at.isAnnotationPresent(Component.class)) {
+                       return;
+               }
+
+               // Since it's not, add @Component to the metadata for 
completeness.
+
+               AnnotatedType<X> wrapped = new AnnotatedType<X>() {
+
+                       // Create an impl of @Component
+
+                       private final ComponentLiteral componentLiteral = new 
ComponentLiteral(
+                               componentModel.getName(),
+                               Types.types(componentModel, annotatedClass, 
_containerState.classLoader()),
+                               componentModel.getProperties(),
+                               componentModel.getServiceScope());
+
+                       @Override
+                       public Set<AnnotatedConstructor<X>> getConstructors() {
+                               return at.getConstructors();
+                       }
+
+                       @Override
+                       public Set<AnnotatedField<? super X>> getFields() {
+                               return at.getFields();
+                       }
+
+                       @Override
+                       public Class<X> getJavaClass() {
+                               return at.getJavaClass();
+                       }
+
+                       @Override
+                       public Set<AnnotatedMethod<? super X>> getMethods() {
+                               return at.getMethods();
+                       }
+
+                       @Override
+                       @SuppressWarnings("unchecked")
+                       public <T extends Annotation> T getAnnotation(final 
Class<T> annType) {
+                               if (Component.class.equals(annType)) {
+                                       return (T)componentLiteral;
+                               }
+                               return at.getAnnotation(annType);
+                       }
+
+                       @Override
+                       public Set<Annotation> getAnnotations() {
+                               return Sets.hashSet(at.getAnnotations(), 
componentLiteral);
+                       }
+
+                       @Override
+                       public Type getBaseType() {
+                               return at.getBaseType();
+                       }
+
+                       @Override
+                       public Set<Type> getTypeClosure() {
+                               return at.getTypeClosure();
+                       }
+
+                       @Override
+                       public boolean isAnnotationPresent(Class<? extends 
Annotation> annType) {
+                               if (Component.class.equals(annType)) {
+                                       return true;
+                               }
+                               return at.isAnnotationPresent(annType);
+                       }
+
+               };
+
+               pat.setAnnotatedType(wrapped);
+       }
+
+       void processBean(@Observes ProcessBean<?> processBean, BeanManager 
beanManager) {
+               Bean<?> bean = processBean.getBean();
+
+               Class<?> beanClass = bean.getBeanClass();
+
+               ComponentModel componentModel = 
_containerState.beansModel().getComponentModel(beanClass.getName());
+
+               if (componentModel == null) {
+                       return;
+               }
+
+               Annotated annotated = processBean.getAnnotated();
+
+               if (annotated instanceof AnnotatedMethod) {
+                       AnnotatedMethod<?> annotatedMethod = 
(AnnotatedMethod<?>)annotated;
+
+                       annotated = annotatedMethod.getDeclaringType();
+               }
+
+               if (!annotated.isAnnotationPresent(Component.class)) {
+                       processBean.addDefinitionError(
+                               new IllegalStateException(
+                                       String.format(
+                                               "Bean %s is missing the 
@Component annotation. This should have been added synthetically if missing...",
+                                               bean)));
+
+                       return;
+               }
+
+               Component component = annotated.getAnnotation(Component.class);
+
+               // Only Dependent CDI scope is allowed for components who's 
service scope is singleton, bundle, prototype.
+
+               if ((component.serviceScope() == ServiceScope.BUNDLE) ||
+                       (component.serviceScope() == ServiceScope.PROTOTYPE) ||
+                       (component.serviceScope() == ServiceScope.SINGLETON)) {
+
+                       Class<?> scope = bean.getScope();
+
+                       if (!Dependent.class.isAssignableFrom(scope)) {
+                               processBean.addDefinitionError(
+                                       new IllegalArgumentException(
+                                               String.format(
+                                                       "An illegal scope (%s) 
was used for component service (%s)",
+                                                       scope, bean)));
+
+                               return;
+                       }
+               }
+
+               _containerState.serviceComponents().put(
+                       componentModel,
+                       new ServiceDeclaration(
+                               _containerState, componentModel, bean, 
beanManager.createCreationalContext(bean)));
+       }
+
+       /*
+        *
+        */
+       void processInjectionPoint(@Observes ProcessInjectionPoint<?, ?> pip, 
BeanManager beanManager) {
+               BeanManagerImpl beanManagerImpl = 
((BeanManagerProxy)beanManager).delegate();
+
+               InjectionPoint injectionPoint = pip.getInjectionPoint();
+
+               Bean<?> bean = injectionPoint.getBean();
+
+               if (bean == null) {
+                       return;
+               }
+
+               Class<?> beanClass = bean.getBeanClass();
+
+               ComponentModel componentModel = 
_containerState.beansModel().getComponentModel(beanClass.getName());
+
+               if (componentModel == null) {
+                       return;
+               }
+
+               ReferenceModel matchingReference = 
matchReference(componentModel, pip);
+
+               if (matchingReference != null) {
+                       ReferenceBean referenceBean = new ReferenceBean(
+                               _containerState,
+                               matchingReference,
+                               componentModel,
+                               pip.getInjectionPoint().getAnnotated(),
+                               pip.getInjectionPoint().getQualifiers(),
+                               beanManagerImpl);
+
+                       beanManagerImpl.addBean(referenceBean);
+
+                       return;
+               }
+
+               ConfigurationModel matchingConfiguration = 
matchConfiguration(componentModel, pip);
+
+               if (matchingConfiguration != null) {
+                       ConfigurationBean configurationBean = new 
ConfigurationBean(
+                               _containerState, matchingConfiguration, 
componentModel, pip.getInjectionPoint(), beanManagerImpl);
+
+                       beanManagerImpl.addBean(configurationBean);
+               }
+       }
+
+       void processObserverMethod(@Observes 
ProcessObserverMethod<ServiceEvent<?>, ?> pom) {
+               ObserverMethod<ServiceEvent<?>> observerMethod = 
pom.getObserverMethod();
+
+               if (_log.isDebugEnabled()) {
+                       _log.debug("CDIe - Processing observer method {}", 
observerMethod);
+               }
+
+               Class<?> beanClass = observerMethod.getBeanClass();
+
+               final String className = beanClass.getName();
+
+               ComponentModel componentModel = 
_containerState.beansModel().getComponentModel(className);
+
+               if (componentModel == null) {
+                       return;
+               }
+
+               ReferenceModel matchingReference = 
matchReference(componentModel, pom);
+
+               if (matchingReference != null) {
+                       Map<String, ObserverMethod<ServiceEvent<?>>> map = 
_containerState.referenceObservers().computeIfAbsent(
+                               componentModel, k -> new LinkedHashMap<>());
+
+                       map.put(matchingReference.getName(), observerMethod);
+               }
+       }
+
+       private static final Logger _log = 
LoggerFactory.getLogger(ComponentRuntimeExtension.class);
+
+       private final AtomicInteger _mark = new AtomicInteger();
+       private final ContainerState _containerState;
+
+}


Reply via email to