Author: csierra
Date: Wed Mar  1 10:06:32 2017
New Revision: 1784896

URL: http://svn.apache.org/viewvc?rev=1784896&view=rev
Log:
[ARIES-CDI] large refactor based on the proposed changes

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

Added:
    aries/trunk/cdi/cdi-executable/log4j.properties
      - copied, changed from r1784895, 
aries/trunk/cdi/cdi-log4j-configuration-fragment/src/main/resources/log4j.properties
    
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/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
      - copied, changed from r1784895, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_2_Extension.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_Init.java
      - copied, changed from r1784895, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_1_Init.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_Publish.java
      - copied, changed from r1784895, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_4_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/literal/ServicePropertyLiteral.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/
    
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/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/ConfigurationModel.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/model/PropertyModel.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-extender/src/main/java/org/apache/aries/cdi/container/internal/model/XmlSchema.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/resources/META-INF/
    aries/trunk/cdi/cdi-extender/src/main/resources/META-INF/cdi.xsd
    aries/trunk/cdi/cdi-extender/src/test/
    aries/trunk/cdi/cdi-extender/src/test/java/
    aries/trunk/cdi/cdi-extender/src/test/java/org/
    aries/trunk/cdi/cdi-extender/src/test/java/org/apache/
    aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/
    aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/
    aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/
    
aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/
    
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/
    aries/trunk/cdi/cdi-extender/src/test/resources/OSGI-INF/
    aries/trunk/cdi/cdi-extender/src/test/resources/OSGI-INF/cdi/
    
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-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/tb3.bnd
    aries/trunk/cdi/cdi-itests/log4j.properties
      - copied, changed from r1784895, 
aries/trunk/cdi/cdi-log4j-configuration-fragment/src/main/resources/log4j.properties
    
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
      - copied, changed from r1784895, 
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/EventsTestCase.java
    
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/JndiExtensionTests.java
      - copied, changed from r1784895, 
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/CdiJndiExtensionTests.java
    
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/OSGiBeanDescriptorTests.java
      - copied, changed from r1784895, 
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/ManifestReferencesAndServicesTestCase.java
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb3/
    
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb3/ConfigurationBeanA.java
Removed:
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_1_Init.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_2_Extension.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_3_Reference.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_4_Publish.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/locate/ClassLocater.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/locate/ClassLocaterResult.java
    
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/CdiJndiExtensionTests.java
    
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/EventsTestCase.java
    
aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/ManifestReferencesAndServicesTestCase.java
    aries/trunk/cdi/cdi-log4j-configuration-fragment/LICENSE
    aries/trunk/cdi/cdi-log4j-configuration-fragment/NOTICE
    aries/trunk/cdi/cdi-log4j-configuration-fragment/bnd.bnd
    aries/trunk/cdi/cdi-log4j-configuration-fragment/pom.xml
    
aries/trunk/cdi/cdi-log4j-configuration-fragment/src/main/resources/log4j.properties
Modified:
    aries/trunk/cdi/cdi-executable/cdi-executable.bndrun
    aries/trunk/cdi/cdi-executable/pom.xml
    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/CdiBundleExtension.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/container/CdiContainerState.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/ServiceDeclaration.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/literal/ServiceLiteral.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Reflection.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Sets.java
    
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Throw.java
    aries/trunk/cdi/cdi-itests/bnd.bnd
    aries/trunk/cdi/cdi-itests/bnd/basic-beans.bnd
    aries/trunk/cdi/cdi-itests/bnd/basic-beans.xml
    aries/trunk/cdi/cdi-itests/bnd/tb1.bnd
    aries/trunk/cdi/cdi-itests/bnd/tb2.bnd
    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/BeanWithReference.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/AbstractTestCase.java
    aries/trunk/cdi/pom.xml

Modified: aries/trunk/cdi/cdi-executable/cdi-executable.bndrun
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-executable/cdi-executable.bndrun?rev=1784896&r1=1784895&r2=1784896&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-executable/cdi-executable.bndrun (original)
+++ aries/trunk/cdi/cdi-executable/cdi-executable.bndrun Wed Mar  1 10:06:32 
2017
@@ -6,32 +6,32 @@
 
 -runrequires: \
        osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.extender)',\
-       
osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.log4j.configuration.fragment)',\
+       osgi.identity;filter:='(osgi.identity=org.apache.felix.configadmin)',\
        osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.command)',\
        osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.jline)',\
        osgi.identity;filter:='(osgi.identity=slf4j.log4j12)'
 
 -runbundles: \
-       javax.enterprise.cdi-api; version='[1.2.0,1.2.1)',\
-       jboss-classfilewriter; version='[1.1.2,1.1.3)',\
-       log4j; version='[1.2.17,1.2.18)',\
-       org.apache.aries.cdi.extender; version='[0.0.1,0.0.2)',\
-       org.apache.aries.cdi.log4j.configuration.fragment; 
version='[0.0.1,0.0.2)',\
-       org.apache.aries.cdi.osgi.api; version='[0.0.1,0.0.2)',\
-       org.apache.felix.bundlerepository; version='[1.6.0,1.6.1)',\
-       org.apache.felix.gogo.command; version='[1.0.0,1.0.1)',\
-       org.apache.felix.gogo.jline; version='[1.0.0,1.0.1)',\
-       org.apache.felix.gogo.runtime; version='[1.0.0,1.0.1)',\
-       org.apache.logging.log4j.api; version='[2.7.0,2.7.1)',\
-       org.glassfish.hk2.external.javax.inject; version='[2.5.0,2.5.1)',\
-       org.jboss.logging.jboss-logging; version='[3.2.1,3.2.2)',\
-       org.jboss.spec.javax.annotation.jboss-annotations-api_1.2_spec; 
version='[1.0.0,1.0.1)',\
-       org.jboss.spec.javax.el.jboss-el-api_3.0_spec; version='[1.0.0,1.0.1)',\
-       org.jboss.spec.javax.interceptor.jboss-interceptors-api_1.2_spec; 
version='[1.0.0,1.0.1)',\
-       org.jboss.weld.osgi-bundle; version='[2.4.0,2.4.1)',\
-       org.jline; version='[3.0.0,3.0.1)',\
-       slf4j.api; version='[1.7.21,1.7.22)',\
-       slf4j.log4j12; version='[1.6.1,1.6.2)'
+       javax.enterprise.cdi-api;version='[1.2.0,1.2.1)',\
+       jboss-classfilewriter;version='[1.1.2,1.1.3)',\
+       log4j;version='[1.2.17,1.2.18)',\
+       org.apache.aries.cdi.extender;version='[0.0.1,0.0.2)',\
+       org.apache.felix.bundlerepository;version='[1.6.0,1.6.1)',\
+       org.apache.felix.configadmin;version='[1.8.12,1.8.13)',\
+       org.apache.felix.gogo.command;version='[1.0.0,1.0.1)',\
+       org.apache.felix.gogo.jline;version='[1.0.0,1.0.1)',\
+       org.apache.felix.gogo.runtime;version='[1.0.0,1.0.1)',\
+       org.apache.logging.log4j.api;version='[2.7.0,2.7.1)',\
+       org.glassfish.hk2.external.javax.inject;version='[2.5.0,2.5.1)',\
+       org.jboss.logging.jboss-logging;version='[3.2.1,3.2.2)',\
+       
org.jboss.spec.javax.annotation.jboss-annotations-api_1.2_spec;version='[1.0.0,1.0.1)',\
+       org.jboss.spec.javax.el.jboss-el-api_3.0_spec;version='[1.0.0,1.0.1)',\
+       
org.jboss.spec.javax.interceptor.jboss-interceptors-api_1.2_spec;version='[1.0.0,1.0.1)',\
+       org.jboss.weld.osgi-bundle;version='[2.4.0,2.4.1)',\
+       org.jline;version='[3.0.0,3.0.1)',\
+       org.osgi.service.cdi;version='[1.0.0,1.0.1)',\
+       slf4j.api;version='[1.7.21,1.7.22)',\
+       slf4j.log4j12;version='[1.6.1,1.6.2)'
 
 -resolve.effective: resolve, active
 -runee: JavaSE-1.8
@@ -40,6 +40,7 @@
        osgi.console.enable.builtin=false, \
        osgi.console=, \
        org.osgi.service.http.port=8080,\
-       org.jboss.logging.provider=slf4j
+       org.jboss.logging.provider=slf4j,\
+       log4j.configuration=file:${.}/log4j.properties
 -runsystemcapabilities.dflt: ${native_capability}
 -runsystempackages: javax.script

Copied: aries/trunk/cdi/cdi-executable/log4j.properties (from r1784895, 
aries/trunk/cdi/cdi-log4j-configuration-fragment/src/main/resources/log4j.properties)
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-executable/log4j.properties?p2=aries/trunk/cdi/cdi-executable/log4j.properties&p1=aries/trunk/cdi/cdi-log4j-configuration-fragment/src/main/resources/log4j.properties&r1=1784895&r2=1784896&rev=1784896&view=diff
==============================================================================
--- 
aries/trunk/cdi/cdi-log4j-configuration-fragment/src/main/resources/log4j.properties
 (original)
+++ aries/trunk/cdi/cdi-executable/log4j.properties Wed Mar  1 10:06:32 2017
@@ -9,4 +9,4 @@ log4j.appender.CONSOLE=org.apache.log4j.
 log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
 log4j.appender.CONSOLE.layout.ConversionPattern=[%t] %-5p %c:%L | %m%n
 
-log4j.logger.org.apache.aries.cdi=DEBUG
+log4j.logger.org.apache.aries.cdi.container.internal.container=DEBUG

Modified: aries/trunk/cdi/cdi-executable/pom.xml
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-executable/pom.xml?rev=1784896&r1=1784895&r2=1784896&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-executable/pom.xml (original)
+++ aries/trunk/cdi/cdi-executable/pom.xml Wed Mar  1 10:06:32 2017
@@ -26,14 +26,23 @@
                        </plugin>
                        <plugin>
                                <groupId>biz.aQute.bnd</groupId>
+                               
<artifactId>bnd-resolver-maven-plugin</artifactId>
+                               <configuration>
+                                       <failOnChanges>false</failOnChanges>
+                                       <bndruns>
+                                               
<bndrun>cdi-executable.bndrun</bndrun>
+                                       </bndruns>
+                               </configuration>
+                       </plugin>
+                       <plugin>
+                               <groupId>biz.aQute.bnd</groupId>
                                <artifactId>bnd-export-maven-plugin</artifactId>
                                <configuration>
                                        <failOnChanges>false</failOnChanges>
-                                       <resolve>true</resolve>
+                                       <resolve>false</resolve>
                                        <bndruns>
                                                
<bndrun>cdi-executable.bndrun</bndrun>
                                        </bndruns>
-                                       <targetDir>.</targetDir>
                                </configuration>
                        </plugin>
                </plugins>
@@ -84,7 +93,7 @@
                <dependency>
                        <groupId>org.apache.felix</groupId>
                        <artifactId>org.apache.felix.configadmin</artifactId>
-                       <version>1.8.8</version>
+                       <version>1.8.12</version>
                </dependency>
                <dependency>
                        <groupId>org.apache.felix</groupId>

Modified: aries/trunk/cdi/cdi-extender/pom.xml
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/pom.xml?rev=1784896&r1=1784895&r2=1784896&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/pom.xml (original)
+++ aries/trunk/cdi/cdi-extender/pom.xml Wed Mar  1 10:06:32 2017
@@ -50,7 +50,7 @@
                <dependency>
                        <groupId>org.apache.felix</groupId>
                        <artifactId>org.apache.felix.converter</artifactId>
-                       <version>0.1-SNAPSHOT</version>
+                       <version>0.1.0-SNAPSHOT</version>
                </dependency>
                <dependency>
                        <groupId>org.apache.felix</groupId>

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=1784896&r1=1784895&r2=1784896&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
 Wed Mar  1 10:06:32 2017
@@ -100,17 +100,20 @@ public class Activator extends AbstractE
 
        @Override
        protected void debug(Bundle bundle, String msg) {
-               _log.debug(msg);
        }
 
        @Override
        protected void warn(Bundle bundle, String msg, Throwable t) {
-               _log.warn(msg, t);
+               if (_log.isWarnEnabled()) {
+                       _log.warn(msg, t);
+               }
        }
 
        @Override
        protected void error(String msg, Throwable t) {
-               _log.error(msg, t);
+               if (_log.isErrorEnabled()) {
+                       _log.error(msg, t);
+               }
        }
 
        private final boolean requiresCdiExtender(Bundle bundle) {

Modified: 
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/CdiBundleExtension.java?rev=1784896&r1=1784895&r2=1784896&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/CdiBundleExtension.java
 Wed Mar  1 10:06:32 2017
@@ -21,7 +21,7 @@ import java.util.concurrent.locks.Reentr
 
 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_1_Init;
+import org.apache.aries.cdi.container.internal.container.Phase_Init;
 import org.apache.felix.utils.extender.Extension;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.ServiceReference;
@@ -65,17 +65,17 @@ public class CdiBundleExtension implemen
 
                        _command.add(_bundle.getBundleId(), cdiHelper);
 
-                       Phase_1_Init initPhase = null;
+                       Phase_Init initPhase = null;
 
                        try {
-                               initPhase = new Phase_1_Init(_bundle, 
cdiHelper);
+                               initPhase = new Phase_Init(_bundle, cdiHelper);
 
                                initPhase.open();
 
                                _initPhase = initPhase;
                        }
                        catch (Throwable t) {
-                               cdiHelper.fire(CdiEvent.State.FAILURE, t);
+                               cdiHelper.fire(CdiEvent.Type.FAILURE, t);
 
                                if (initPhase != null) {
                                        initPhase.close();
@@ -133,7 +133,7 @@ public class CdiBundleExtension implemen
        private final CdiCommand _command;
        private final Bundle _extenderBundle;
        private final Map<ServiceReference<CdiListener>, CdiListener> 
_listeners;
-       private Phase_1_Init _initPhase;
+       private Phase_Init _initPhase;
        private final Lock _stateLock = new ReentrantLock();
 
 }

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=1784896&r1=1784895&r2=1784896&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
 Wed Mar  1 10:06:32 2017
@@ -19,6 +19,7 @@ import java.util.Map;
 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;
 
@@ -51,6 +52,17 @@ public class CdiCommand {
                                System.out.printf("    %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(
+                                               "    %s\n      : %s\n", pid,
+                                               
!configurationDependency.isResolved(pid) ? " UNRESOLVED" : "resolved");
+                               }
+                       }
+               }
                List<ReferenceDependency> referenceDependencies = 
cdiContainerState.getReferenceDependencies();
                if (!referenceDependencies.isEmpty()) {
                        System.out.println("  [REFERENCES]");

Modified: 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/CdiContainerState.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/CdiContainerState.java?rev=1784896&r1=1784895&r2=1784896&view=diff
==============================================================================
--- 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/CdiContainerState.java
 (original)
+++ 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/CdiContainerState.java
 Wed Mar  1 10:06:32 2017
@@ -24,11 +24,13 @@ import javax.enterprise.inject.Any;
 import javax.enterprise.inject.spi.BeanManager;
 import javax.enterprise.util.AnnotationLiteral;
 
+import org.apache.aries.cdi.container.internal.model.BeansModel;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.ServiceReference;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.cdi.CdiContainer;
 import org.osgi.service.cdi.CdiEvent;
+import org.osgi.service.cdi.CdiEvent.Type;
 import org.osgi.service.cdi.CdiExtenderConstants;
 import org.osgi.service.cdi.CdiListener;
 import org.slf4j.Logger;
@@ -51,7 +53,7 @@ public class CdiContainerState {
 
                Hashtable<String, Object> properties = new Hashtable<>();
 
-               
properties.put(CdiExtenderConstants.CDI_EXTENDER_CONTAINER_STATE, 
CdiEvent.State.CREATING);
+               
properties.put(CdiExtenderConstants.CDI_EXTENDER_CONTAINER_STATE, 
CdiEvent.Type.CREATING);
 
                _cdiContainerRegistration = 
_bundle.getBundleContext().registerService(
                        CdiContainer.class, _cdiContainerService, properties);
@@ -77,6 +79,10 @@ public class CdiContainerState {
                return _beanManager;
        }
 
+       public BeansModel getBeansModel() {
+               return _beansModel;
+       }
+
        public Bundle getBundle() {
                return _bundle;
        }
@@ -85,29 +91,35 @@ public class CdiContainerState {
                return _extenderBundle;
        }
 
+       public List<ConfigurationDependency> getConfigurationDependencies() {
+               return _configurations;
+       }
+
        public List<ExtensionDependency> getExtensionDependencies() {
                return _extensionDependencies;
        }
 
+       public List<ReferenceDependency> getReferenceDependencies() {
+               return _references;
+       }
+
        public String getId() {
                return _bundle.getSymbolicName() + ":" + _bundle.getBundleId();
        }
 
-       public CdiEvent.State getLastState() {
+       public CdiEvent.Type getLastState() {
                return _lastState.get();
        }
 
-       public List<ReferenceDependency> getReferenceDependencies() {
-               return _referenceDependencies;
-       }
-
        public void fire(CdiEvent event) {
                try {
                        _lock.lock();
 
-                       if ((_lastState.get() == CdiEvent.State.DESTROYING) &&
-                               ((event.getState() == 
CdiEvent.State.WAITING_FOR_EXTENSIONS) ||
-                               (event.getState() == 
CdiEvent.State.WAITING_FOR_SERVICES))) {
+                       Type type = event.getType();
+
+                       if ((_lastState.get() == CdiEvent.Type.DESTROYING) &&
+                               ((type == CdiEvent.Type.WAITING_FOR_EXTENSIONS) 
||
+                               (type == CdiEvent.Type.WAITING_FOR_SERVICES))) {
 
                                return;
                        }
@@ -138,15 +150,15 @@ public class CdiContainerState {
                }
        }
 
-       public void fire(CdiEvent.State state) {
+       public void fire(CdiEvent.Type state) {
                fire(new CdiEvent(state, _bundle, _extenderBundle));
        }
 
-       public void fire(CdiEvent.State state, String payload) {
+       public void fire(CdiEvent.Type state, String payload) {
                fire(new CdiEvent(state, _bundle, _extenderBundle, payload, 
null));
        }
 
-       public void fire(CdiEvent.State state, Throwable cause) {
+       public void fire(CdiEvent.Type state, Throwable cause) {
                fire(new CdiEvent(state, _bundle, _extenderBundle, null, 
cause));
        }
 
@@ -155,25 +167,35 @@ public class CdiContainerState {
                _cdiContainerService.setBeanManager(beanManager);
        }
 
+       public void setBeansModel(BeansModel beansModel) {
+               _beansModel = beansModel;
+       }
+
+       public void setConfigurationDependencies(List<ConfigurationDependency> 
configurations) {
+               _configurations = configurations;
+       }
+
        public void setExtensionDependencies(List<ExtensionDependency> 
extensionDependencies) {
                _extensionDependencies = extensionDependencies;
        }
 
-       public void setReferenceDependency(List<ReferenceDependency> 
referenceDependencies) {
-               _referenceDependencies = referenceDependencies;
+       public void setReferenceDependencies(List<ReferenceDependency> 
references) {
+               _references = references;
        }
 
        private void updateState(CdiEvent event) {
                try {
                        _lock.lock();
 
+                       Type type = event.getType();
+
                        ServiceReference<CdiContainer> reference = 
_cdiContainerRegistration.getReference();
 
-                       if (event.getState() == 
reference.getProperty(CdiExtenderConstants.CDI_EXTENDER_CONTAINER_STATE)) {
+                       if (type == 
reference.getProperty(CdiExtenderConstants.CDI_EXTENDER_CONTAINER_STATE)) {
                                return;
                        }
 
-                       _lastState.set(event.getState());
+                       _lastState.set(type);
 
                        Hashtable<String, Object> properties = new 
Hashtable<>();
 
@@ -181,7 +203,7 @@ public class CdiContainerState {
                                properties.put(key, reference.getProperty(key));
                        }
 
-                       
properties.put(CdiExtenderConstants.CDI_EXTENDER_CONTAINER_STATE, 
event.getState());
+                       
properties.put(CdiExtenderConstants.CDI_EXTENDER_CONTAINER_STATE, type);
 
                        _cdiContainerRegistration.setProperties(properties);
                }
@@ -193,14 +215,16 @@ public class CdiContainerState {
        private static final Logger _log = 
LoggerFactory.getLogger(CdiContainerState.class);
 
        private volatile BeanManager _beanManager;
+       private BeansModel _beansModel;
        private final Bundle _bundle;
        private final ServiceRegistration<CdiContainer> 
_cdiContainerRegistration;
        private final CdiContainerService _cdiContainerService;
+       private List<ConfigurationDependency> _configurations;
        private final Bundle _extenderBundle;
        private List<ExtensionDependency> _extensionDependencies;
-       private AtomicReference<CdiEvent.State> _lastState = new 
AtomicReference<CdiEvent.State>(CdiEvent.State.CREATING);
+       private AtomicReference<CdiEvent.Type> _lastState = new 
AtomicReference<CdiEvent.Type>(CdiEvent.Type.CREATING);
        private final Map<ServiceReference<CdiListener>, CdiListener> 
_listeners;
        private final ReentrantLock _lock = new ReentrantLock();
-       private List<ReferenceDependency> _referenceDependencies;
+       private List<ReferenceDependency> _references;
 
 }
\ No newline at end of file

Added: 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ConfigurationDependency.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ConfigurationDependency.java?rev=1784896&view=auto
==============================================================================
--- 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ConfigurationDependency.java
 (added)
+++ 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ConfigurationDependency.java
 Wed Mar  1 10:06:32 2017
@@ -0,0 +1,33 @@
+package org.apache.aries.cdi.container.internal.container;
+
+import java.util.Arrays;
+
+public class ConfigurationDependency {
+
+       public ConfigurationDependency(String[] pids, String defaultPid) {
+               _pids = pids;
+
+               for (int i = 0; i > pids.length; i++) {
+                       if ("$".equals(_pids[i])) {
+                               _pids[i] = defaultPid;
+                       }
+               }
+       }
+
+       public boolean isResolved(String pid) {
+               // TODO Auto-generated method stub
+               return false;
+       }
+
+       public String[] pids() {
+               return _pids;
+       }
+
+       @Override
+       public String toString() {
+               return Arrays.toString(_pids);
+       }
+
+       private final String[] _pids;
+
+}

Added: 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ConfigurationExtension.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ConfigurationExtension.java?rev=1784896&view=auto
==============================================================================
--- 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ConfigurationExtension.java
 (added)
+++ 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ConfigurationExtension.java
 Wed Mar  1 10:06:32 2017
@@ -0,0 +1,65 @@
+/**
+ * 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.container;
+
+import java.util.List;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.Annotated;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.Extension;
+import javax.enterprise.inject.spi.InjectionPoint;
+import javax.enterprise.inject.spi.ProcessInjectionPoint;
+
+import org.osgi.service.cdi.annotations.Configuration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@ApplicationScoped
+public class ConfigurationExtension implements Extension {
+
+       public ConfigurationExtension(List<ConfigurationDependency> 
configurations) {
+               _configurations = configurations;
+       }
+
+       void processInjectionTarget(
+               @Observes @SuppressWarnings("rawtypes") ProcessInjectionPoint 
pip, BeanManager manager) {
+
+               InjectionPoint injectionPoint = pip.getInjectionPoint();
+               Annotated annotated = injectionPoint.getAnnotated();
+               Configuration configuration = 
annotated.getAnnotation(Configuration.class);
+
+               if (configuration == null) {
+                       return;
+               }
+
+               Class<?> beanClass = injectionPoint.getBean().getBeanClass();
+
+               ConfigurationDependency configurationDependency = new 
ConfigurationDependency(
+                       configuration.value(), beanClass.getName());
+
+               _configurations.add(configurationDependency);
+
+               if (_log.isDebugEnabled()) {
+                       _log.debug("CDIe - Found OSGi configuration dependency 
{}", configurationDependency);
+               }
+       }
+
+       private static final Logger _log = 
LoggerFactory.getLogger(ReferenceExtension.class);
+
+       private final List<ConfigurationDependency> _configurations;
+
+}

Added: 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java?rev=1784896&view=auto
==============================================================================
--- 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
 (added)
+++ 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
 Wed Mar  1 10:06:32 2017
@@ -0,0 +1,9 @@
+package org.apache.aries.cdi.container.internal.container;
+
+public interface Phase {
+
+       public void close();
+
+       public void open();
+
+}

Added: 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_Configuration.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_Configuration.java?rev=1784896&view=auto
==============================================================================
--- 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_Configuration.java
 (added)
+++ 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_Configuration.java
 Wed Mar  1 10:06:32 2017
@@ -0,0 +1,179 @@
+/**
+ * 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.container;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.Extension;
+
+import org.apache.aries.cdi.container.internal.model.BeansModel;
+import org.apache.aries.cdi.container.internal.model.ConfigurationModel;
+import org.jboss.weld.bootstrap.WeldBootstrap;
+import org.jboss.weld.bootstrap.spi.BeanDeploymentArchive;
+import org.jboss.weld.bootstrap.spi.Deployment;
+import org.jboss.weld.bootstrap.spi.Metadata;
+import org.jboss.weld.manager.BeanManagerImpl;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.wiring.BundleWiring;
+import org.osgi.service.cdi.CdiEvent;
+import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.service.cm.ConfigurationEvent;
+import org.osgi.service.cm.ConfigurationListener;
+import org.osgi.util.tracker.ServiceTracker;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class Phase_Configuration implements Phase {
+
+       public Phase_Configuration(
+               Bundle bundle, CdiContainerState cdiContainerState, 
Map<ServiceReference<Extension>,
+               Metadata<Extension>> extensions) {
+
+               _bundle = bundle;
+               _cdiContainerState = cdiContainerState;
+               _extensions = extensions;
+               _bundleContext = _bundle.getBundleContext();
+               _bundleWiring = _bundle.adapt(BundleWiring.class);
+
+               _configAdminTracker = new ServiceTracker<>(
+                       
_cdiContainerState.getExtenderBundle().getBundleContext(), 
ConfigurationAdmin.class, null);
+
+               _configAdminTracker.open();
+
+               
_cdiContainerState.setConfigurationDependencies(_configurations);
+               _cdiContainerState.setReferenceDependencies(_references);
+       }
+
+       @Override
+       public void close() {
+//             if (_serviceTracker != null) {
+//                     _serviceTracker.close();
+//
+//                     _serviceTracker = null;
+//             }
+//             else {
+                       if (_nextPhase != null) {
+                               _nextPhase.close();
+
+                               _nextPhase = null;
+                       }
+//             }
+
+               _configAdminTracker.close();
+       }
+
+       @Override
+       public void open() {
+               BeansModel beansModel = _cdiContainerState.getBeansModel();
+
+               BeanDeploymentArchive beanDeploymentArchive = new 
BundleDeploymentArchive(
+                       _bundleWiring, _cdiContainerState.getId(), 
beansModel.getBeanClassNames(), beansModel.getBeansXml(),
+                       _cdiContainerState.getExtenderBundle());
+
+               WeldBootstrap bootstrap = new WeldBootstrap();
+
+               List<Metadata<Extension>> extensions = new ArrayList<>();
+
+               // Add the internal extensions
+               extensions.add(
+                       new ExtensionMetadata(new 
ConfigurationExtension(_configurations), _bundle.toString()));
+               extensions.add(
+                       new ExtensionMetadata(new 
ReferenceExtension(_references, _bundleContext), _bundle.toString()));
+               extensions.add(new ExtensionMetadata(new 
ServiceExtension(_services), _bundle.toString()));
+
+               // Add extensions found from the bundle's classloader, such as 
those in the Bundle-ClassPath
+               for (Metadata<Extension> meta : 
bootstrap.loadExtensions(_bundleWiring.getClassLoader())) {
+                       extensions.add(meta);
+               }
+
+               // Add external extensions
+               for (Metadata<Extension> meta : _extensions.values()) {
+                       extensions.add(meta);
+               }
+
+               Deployment deployment = new BundleDeployment(extensions, 
beanDeploymentArchive);
+
+               bootstrap.startContainer(_cdiContainerState.getId(), new 
SimpleEnvironment(), deployment);
+
+               BeanManager beanManager = 
bootstrap.getManager(beanDeploymentArchive);
+
+               _cdiContainerState.setBeanManager(beanManager);
+
+               bootstrap.startInitialization();
+               bootstrap.deployBeans();
+
+               processDescriptorConfigurations((BeanManagerImpl)beanManager);
+
+               if (!_configurations.isEmpty()) {
+                       
_cdiContainerState.fire(CdiEvent.Type.WAITING_FOR_CONFIGURATIONS, 
_configurations.toString());
+
+                       // TODO configuration listener
+                       temporary: {
+                               _nextPhase = new Phase_Reference(_references, 
_services, _cdiContainerState, bootstrap);
+
+                               _nextPhase.open();
+                       }
+               }
+               else {
+                       _nextPhase = new Phase_Reference(_references, 
_services, _cdiContainerState, bootstrap);
+
+                       _nextPhase.open();
+               }
+       }
+
+       private void processConfigurationModel(ConfigurationModel 
configurationModel, BeanManagerImpl beanManagerImpl) {
+               _configurations.add(
+                       new ConfigurationDependency(new String[] 
{configurationModel.getPid()}, configurationModel.getPid()));
+       }
+
+       private void processDescriptorConfigurations(BeanManagerImpl 
beanManagerImpl) {
+               Collection<ConfigurationModel> configurationModels =
+                       
_cdiContainerState.getBeansModel().getConfigurationModels();
+
+               for (ConfigurationModel configurationModel : 
configurationModels) {
+                       processConfigurationModel(configurationModel, 
beanManagerImpl);
+               }
+       }
+
+       private static final Logger _log = 
LoggerFactory.getLogger(Phase_Configuration.class);
+
+       private final Bundle _bundle;
+       private final BundleContext _bundleContext;
+       private final BundleWiring _bundleWiring;
+       private final CdiContainerState _cdiContainerState;
+       private final ServiceTracker<ConfigurationAdmin, ConfigurationAdmin> 
_configAdminTracker;
+       private final List<ConfigurationDependency> _configurations = new 
CopyOnWriteArrayList<>();
+       private final Map<ServiceReference<Extension>, Metadata<Extension>> 
_extensions;
+       private Phase _nextPhase;
+       private final List<ReferenceDependency> _references = new 
CopyOnWriteArrayList<>();
+       private final List<ServiceDeclaration> _services = new 
CopyOnWriteArrayList<>();
+
+       class ConfigurationDependencyListener implements ConfigurationListener {
+
+               @Override
+               public void configurationEvent(ConfigurationEvent event) {
+                       _log.info("CDIe - configuration event {}", event);
+               }
+
+       }
+
+}
\ No newline at end of file

Copied: 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_Extension.java
 (from r1784895, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_2_Extension.java)
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_Extension.java?p2=aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_Extension.java&p1=aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_2_Extension.java&r1=1784895&r2=1784896&rev=1784896&view=diff
==============================================================================
--- 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_2_Extension.java
 (original)
+++ 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_Extension.java
 Wed Mar  1 10:06:32 2017
@@ -14,7 +14,6 @@
 
 package org.apache.aries.cdi.container.internal.container;
 
-import java.util.Collection;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
@@ -23,7 +22,6 @@ import java.util.concurrent.CopyOnWriteA
 
 import javax.enterprise.inject.spi.Extension;
 
-import org.jboss.weld.bootstrap.spi.BeansXml;
 import org.jboss.weld.bootstrap.spi.Metadata;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
@@ -38,24 +36,21 @@ import org.osgi.util.tracker.ServiceTrac
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class Phase_2_Extension {
-
-       public Phase_2_Extension(
-               Bundle bundle, CdiContainerState cdiContainerState, 
Collection<String> beanClassNames, BeansXml beansXml) {
+public class Phase_Extension implements Phase {
 
+       public Phase_Extension(Bundle bundle, CdiContainerState 
cdiContainerState) {
                _bundle = bundle;
                _cdiContainerState = cdiContainerState;
                _bundleContext = bundle.getBundleContext();
                _extensionDependencies = 
findExtensionDependencies(bundle.adapt(BundleWiring.class));
                _extensions = new 
ConcurrentSkipListMap<>(Comparator.reverseOrder());
-               _beanClassNames = beanClassNames;
-               _beansXml = beansXml;
 
                
_cdiContainerState.setExtensionDependencies(_extensionDependencies);
        }
 
+       @Override
        public void close() {
-               _cdiContainerState.fire(CdiEvent.State.DESTROYING);
+               _cdiContainerState.fire(CdiEvent.Type.DESTROYING);
 
                if (_extensionTracker != null) {
                        _extensionTracker.close();
@@ -63,32 +58,33 @@ public class Phase_2_Extension {
                        _extensionTracker = null;
                }
                else {
-                       _referencePhase.close();
+                       _nextPhase.close();
 
-                       _referencePhase = null;
+                       _nextPhase = null;
                }
 
-               _cdiContainerState.fire(CdiEvent.State.DESTROYED);
+               _cdiContainerState.fire(CdiEvent.Type.DESTROYED);
 
                _cdiContainerState.close();
        }
 
+       @Override
        public void open() {
-               _cdiContainerState.fire(CdiEvent.State.CREATING);
+               _cdiContainerState.fire(CdiEvent.Type.CREATING);
 
                if (!_extensionDependencies.isEmpty()) {
                        Filter filter = 
FilterBuilder.createExtensionFilter(_extensionDependencies);
 
-                       
_cdiContainerState.fire(CdiEvent.State.WAITING_FOR_EXTENSIONS, 
filter.toString());
+                       
_cdiContainerState.fire(CdiEvent.Type.WAITING_FOR_EXTENSIONS, 
filter.toString());
 
                        _extensionTracker = new 
ServiceTracker<>(_bundleContext, filter, new ExtensionPhaseCustomizer());
 
                        _extensionTracker.open();
                }
                else {
-                       _referencePhase = new Phase_3_Reference(_bundle, 
_cdiContainerState, _extensions, _beanClassNames, _beansXml);
+                       _nextPhase = new Phase_Configuration(_bundle, 
_cdiContainerState, _extensions);
 
-                       _referencePhase.open();
+                       _nextPhase.open();
                }
        }
 
@@ -112,16 +108,14 @@ public class Phase_2_Extension {
                return extensionDependencies;
        }
 
-       private static final Logger _log = 
LoggerFactory.getLogger(Phase_2_Extension.class);
+       private static final Logger _log = 
LoggerFactory.getLogger(Phase_Extension.class);
 
-       private final Collection<String> _beanClassNames;
-       private final BeansXml _beansXml;
        private final Bundle _bundle;
        private final BundleContext _bundleContext;
        private final CdiContainerState _cdiContainerState;
        private final Map<ServiceReference<Extension>, Metadata<Extension>> 
_extensions;
        private final List<ExtensionDependency> _extensionDependencies;
-       private Phase_3_Reference _referencePhase;
+       private Phase _nextPhase;
 
        private ServiceTracker<Extension, ExtensionDependency> 
_extensionTracker;
 
@@ -145,9 +139,9 @@ public class Phase_2_Extension {
                        }
 
                        if ((trackedDependency != null) && 
_extensionDependencies.isEmpty()) {
-                               _referencePhase = new 
Phase_3_Reference(_bundle, _cdiContainerState, _extensions, _beanClassNames, 
_beansXml);
+                               _nextPhase = new Phase_Configuration(_bundle, 
_cdiContainerState, _extensions);
 
-                               _referencePhase.open();
+                               _nextPhase.open();
                        }
                        else if (_log.isDebugEnabled()) {
                                _log.debug("CDIe - Still waiting for extensions 
{}", _extensionDependencies);
@@ -163,11 +157,11 @@ public class Phase_2_Extension {
                @Override
                public void removedService(ServiceReference<Extension> 
reference, ExtensionDependency extentionDependency) {
                        if (_extensionDependencies.isEmpty()) {
-                               _referencePhase.close();
+                               _nextPhase.close();
 
-                               _referencePhase = null;
+                               _nextPhase = null;
 
-                               
_cdiContainerState.fire(CdiEvent.State.WAITING_FOR_EXTENSIONS);
+                               
_cdiContainerState.fire(CdiEvent.Type.WAITING_FOR_EXTENSIONS);
                        }
                        _extensions.remove(reference);
 

Copied: 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_Init.java
 (from r1784895, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_1_Init.java)
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_Init.java?p2=aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_Init.java&p1=aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_1_Init.java&r1=1784895&r2=1784896&rev=1784896&view=diff
==============================================================================
--- 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_1_Init.java
 (original)
+++ 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_Init.java
 Wed Mar  1 10:06:32 2017
@@ -14,36 +14,33 @@
 
 package org.apache.aries.cdi.container.internal.container;
 
-import java.util.Collection;
-
-import org.apache.aries.cdi.container.internal.locate.ClassLocater;
-import org.apache.aries.cdi.container.internal.locate.ClassLocaterResult;
-import org.jboss.weld.bootstrap.spi.BeansXml;
-import org.jboss.weld.xml.BeansXmlParser;
+import org.apache.aries.cdi.container.internal.model.BeansModel;
+import org.apache.aries.cdi.container.internal.model.BeansModelBuilder;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.wiring.BundleWiring;
 
-public class Phase_1_Init {
+public class Phase_Init implements Phase {
 
-       public Phase_1_Init(Bundle bundle, CdiContainerState cdiContainerState) 
{
+       public Phase_Init(Bundle bundle, CdiContainerState cdiContainerState) {
                BundleWiring bundleWiring = bundle.adapt(BundleWiring.class);
 
-               ClassLocaterResult locatorResult = 
ClassLocater.locate(bundleWiring);
-               Collection<String> beanClassNames = 
locatorResult.getBeanClassNames();
-               BeansXmlParser beansXmlParser = new BeansXmlParser();
-               BeansXml beansXml = 
beansXmlParser.parse(locatorResult.getBeanDescriptorURLs());
+               BeansModel beansModel = new BeansModelBuilder(bundleWiring, 
cdiContainerState.getExtenderBundle()).build();
+
+               cdiContainerState.setBeansModel(beansModel);
 
-               _extensionPhase = new Phase_2_Extension(bundle, 
cdiContainerState, beanClassNames, beansXml);
+               _extensionPhase = new Phase_Extension(bundle, 
cdiContainerState);
        }
 
+       @Override
        public void close() {
                _extensionPhase.close();
        }
 
+       @Override
        public void open() {
                _extensionPhase.open();
        }
 
-       private final Phase_2_Extension _extensionPhase;
+       private final Phase _extensionPhase;
 
 }
\ No newline at end of file

Copied: 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_Publish.java
 (from r1784895, 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_4_Publish.java)
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_Publish.java?p2=aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_Publish.java&p1=aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_4_Publish.java&r1=1784895&r2=1784896&rev=1784896&view=diff
==============================================================================
--- 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_4_Publish.java
 (original)
+++ 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_Publish.java
 Wed Mar  1 10:06:32 2017
@@ -14,12 +14,8 @@
 
 package org.apache.aries.cdi.container.internal.container;
 
-import static org.osgi.namespace.extender.ExtenderNamespace.EXTENDER_NAMESPACE;
-import static org.osgi.service.cdi.CdiExtenderConstants.CDI_EXTENDER;
-import static 
org.osgi.service.cdi.CdiExtenderConstants.REQUIREMENT_SERVICES_DIRECTIVE;
-
 import java.util.ArrayList;
-import java.util.Arrays;
+import java.util.Collection;
 import java.util.Dictionary;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -36,30 +32,32 @@ import javax.naming.spi.ObjectFactory;
 import org.apache.aries.cdi.container.internal.bean.ReferenceBean;
 import org.apache.aries.cdi.container.internal.literal.AnyLiteral;
 import org.apache.aries.cdi.container.internal.literal.ServiceLiteral;
+import org.apache.aries.cdi.container.internal.model.ServiceModel;
 import org.jboss.weld.bootstrap.api.Bootstrap;
 import org.jboss.weld.manager.BeanManagerImpl;
 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.BundleRequirement;
-import org.osgi.framework.wiring.BundleWire;
-import org.osgi.framework.wiring.BundleWiring;
 import org.osgi.service.cdi.CdiEvent;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class Phase_4_Publish {
-
-       public Phase_4_Publish(
-               Phase_3_Reference referencePhase, Bootstrap bootstrap) {
+public class Phase_Publish implements Phase {
 
-               _referencePhase = referencePhase;
+       public Phase_Publish(
+               List<ReferenceDependency> references, List<ServiceDeclaration> 
services, CdiContainerState cdiContainerState,
+               Bootstrap bootstrap) {
+
+               _references = references;
+               _services = services;
+               _cdiContainerState = cdiContainerState;
                _bootstrap = bootstrap;
-               _bundle = _referencePhase._bundle;
-               _bundleContext = _referencePhase._bundle.getBundleContext();
+               _bundle = cdiContainerState.getBundle();
+               _bundleContext = _bundle.getBundleContext();
        }
 
+       @Override
        public void close() {
                for (ServiceRegistration<?> registration : _registrations) {
                        try {
@@ -99,10 +97,11 @@ public class Phase_4_Publish {
                _bootstrap.shutdown();
        }
 
+       @Override
        public void open() {
-               
_referencePhase._cdiContainerState.fire(CdiEvent.State.SATISFIED);
+               _cdiContainerState.fire(CdiEvent.Type.SATISFIED);
 
-               BeanManager beanManager = 
_referencePhase._cdiContainerState.getBeanManager();
+               BeanManager beanManager = _cdiContainerState.getBeanManager();
 
                processReferenceDependencies((BeanManagerImpl)beanManager);
 
@@ -115,44 +114,13 @@ public class Phase_4_Publish {
                _beanManagerRegistration = _bundleContext.registerService(
                        BeanManager.class, beanManager, null);
 
-               _referencePhase._cdiContainerState.fire(CdiEvent.State.CREATED);
-       }
-
-       private List<String> getServiceClassNames() {
-               List<String> serviceClassNames = new ArrayList<>();
-
-               BundleWiring bundleWiring = _bundle.adapt(BundleWiring.class);
-               List<BundleWire> requiredBundleWires = 
bundleWiring.getRequiredWires(EXTENDER_NAMESPACE);
-
-               for (BundleWire bundleWire : requiredBundleWires) {
-                       Map<String, Object> attributes = 
bundleWire.getCapability().getAttributes();
-
-                       if (attributes.containsKey(EXTENDER_NAMESPACE) &&
-                               
attributes.get(EXTENDER_NAMESPACE).equals(CDI_EXTENDER)) {
-
-                               BundleRequirement requirement = 
bundleWire.getRequirement();
-
-                               Map<String, String> directives = 
requirement.getDirectives();
-
-                               if 
(directives.containsKey(REQUIREMENT_SERVICES_DIRECTIVE)) {
-                                       String string = 
directives.get(REQUIREMENT_SERVICES_DIRECTIVE);
-
-                                       List<String> services = 
Arrays.asList(string.split("\\s*,\\s*"));
-
-                                       if (!services.isEmpty()) {
-                                               
serviceClassNames.addAll(services);
-                                       }
-                               }
-                       }
-               }
-
-               return serviceClassNames;
+               _cdiContainerState.fire(CdiEvent.Type.CREATED);
        }
 
        private void processReferenceDependencies(BeanManagerImpl 
beanManagerImpl) {
                Map<ServiceReference<?>, Set<ReferenceBean>> beans = new 
HashMap<>();
 
-               for (ReferenceDependency referenceDependency : 
_referencePhase._referenceDependencies) {
+               for (ReferenceDependency referenceDependency : _references) {
                        for (ServiceReference<?> matchingReference : 
referenceDependency.getMatchingReferences()) {
                                Set<ReferenceBean> set = 
beans.get(matchingReference);
 
@@ -194,36 +162,52 @@ public class Phase_4_Publish {
        }
 
        private void processRequirementDefinedServices(BeanManagerImpl 
beanManagerImpl) {
-               List<String> serviceClassNames = getServiceClassNames();
+               Collection<ServiceModel> serviceModels = 
_cdiContainerState.getBeansModel().getServiceModels();
 
-               for (String serviceClassName : serviceClassNames) {
+               for (ServiceModel serviceModel : serviceModels) {
                        try {
-                               Class<?> beanClass = 
_bundle.loadClass(serviceClassName);
+                               Class<?> beanClass = 
_bundle.loadClass(serviceModel.getBeanClass());
 
                                Set<Bean<?>> beans = 
beanManagerImpl.getBeans(beanClass, AnyLiteral.INSTANCE);
 
                                if (beans.isEmpty()) {
                                        _log.error(
-                                               "CDIe - MANIFEST service 
processing cannot find bean for class {}", serviceClassName);
+                                               "CDIe - MANIFEST service 
processing cannot find bean for class {}",
+                                               serviceModel.getBeanClass());
 
                                        continue;
                                }
 
                                Bean<?> bean = beanManagerImpl.resolve(beans);
                                CreationalContext<?> creationalContext = 
beanManagerImpl.createCreationalContext(bean);
+
+                               List<String> provides = 
serviceModel.getProvides();
+                               List<Class<?>> interfaces = new ArrayList<>();
+
+                               for (String provide : provides) {
+                                       try {
+                                               
interfaces.add(_bundle.loadClass(provide));
+                                       }
+                                       catch (Exception e) {
+                                               _log.error("CDIe - Failure 
loading provided interface for service {}", provide);
+                                       }
+                               }
+
                                ServiceDeclaration serviceDeclaration = new 
ServiceDeclaration(
-                                       ServiceLiteral.INSTANCE, bean, 
creationalContext);
+                                       
ServiceLiteral.from(interfaces.toArray(new Class<?>[0]), 
serviceModel.getProperties()), bean,
+                                       creationalContext);
 
                                processServiceDeclaration(serviceDeclaration);
                        }
                        catch (ClassNotFoundException cnfe) {
-                               _log.error("CDIe - MANIFEST service processing 
cannot load class {}", serviceClassName, cnfe);
+                               _log.error(
+                                       "CDIe - MANIFEST service processing 
cannot load class {}", serviceModel.getBeanClass(), cnfe);
                        }
                }
        }
 
        private void processServiceDeclarations() {
-               for (ServiceDeclaration serviceDeclaration : 
_referencePhase._services) {
+               for (ServiceDeclaration serviceDeclaration : _services) {
                        processServiceDeclaration(serviceDeclaration);
                }
        }
@@ -241,13 +225,15 @@ public class Phase_4_Publish {
                        _bundleContext.registerService(classNames, 
serviceInstance, properties));
        }
 
-       private static final Logger _log = 
LoggerFactory.getLogger(Phase_4_Publish.class);
+       private static final Logger _log = 
LoggerFactory.getLogger(Phase_Publish.class);
 
        private final Bootstrap _bootstrap;
        private final Bundle _bundle;
        private final BundleContext _bundleContext;
-       private final Phase_3_Reference _referencePhase;
+       private final CdiContainerState _cdiContainerState;
+       private final List<ReferenceDependency> _references;
        private final List<ServiceRegistration<?>> _registrations = new 
CopyOnWriteArrayList<>();
+       private final List<ServiceDeclaration> _services;
 
        private ServiceRegistration<BeanManager> _beanManagerRegistration;
        private ServiceRegistration<ObjectFactory> _objectFactoryRegistration;

Added: 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_Reference.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_Reference.java?rev=1784896&view=auto
==============================================================================
--- 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_Reference.java
 (added)
+++ 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase_Reference.java
 Wed Mar  1 10:06:32 2017
@@ -0,0 +1,221 @@
+package org.apache.aries.cdi.container.internal.container;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+import org.apache.aries.cdi.container.internal.literal.ReferenceLiteral;
+import org.apache.aries.cdi.container.internal.model.ReferenceInjectionPoint;
+import org.apache.aries.cdi.container.internal.model.ReferenceModel;
+import org.jboss.weld.bootstrap.api.Bootstrap;
+import org.jboss.weld.manager.BeanManagerImpl;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Filter;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.cdi.CdiEvent;
+import org.osgi.util.tracker.ServiceTracker;
+import org.osgi.util.tracker.ServiceTrackerCustomizer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class Phase_Reference implements Phase {
+
+       public Phase_Reference(
+               List<ReferenceDependency> references, List<ServiceDeclaration> 
services, CdiContainerState cdiContainerState,
+               Bootstrap bootstrap) {
+
+               _references = references;
+               _services = services;
+               _cdiContainerState = cdiContainerState;
+               _bootstrap = bootstrap;
+               _bundle = _cdiContainerState.getBundle();
+               _bundleContext = _bundle.getBundleContext();
+       }
+
+       @Override
+       public void close() {
+               if (_serviceTracker != null) {
+                       _serviceTracker.close();
+
+                       _serviceTracker = null;
+               }
+               else {
+                       _lock.lock();
+
+                       try {
+                               if (_nextPhase != null) {
+                                       _nextPhase.close();
+
+                                       _nextPhase = null;
+                               }
+                       }
+                       finally {
+                               _lock.unlock();
+                       }
+               }
+       }
+
+       @Override
+       public void open() {
+               
processDescriptorReferences((BeanManagerImpl)_cdiContainerState.getBeanManager());
+
+               if (!_references.isEmpty()) {
+                       Filter filter = 
FilterBuilder.createReferenceFilter(_references);
+
+                       
_cdiContainerState.fire(CdiEvent.Type.WAITING_FOR_SERVICES, filter.toString());
+
+                       _serviceTracker = new ServiceTracker<>(_bundleContext, 
filter, new ReferencePhaseCustomizer(_bootstrap));
+
+                       _serviceTracker.open();
+               }
+
+               _lock.lock();
+
+               try {
+                       if ((_nextPhase == null) && 
dependenciesAreEmptyOrAllOptional()) {
+                               _nextPhase = new Phase_Publish(_references, 
_services, _cdiContainerState, _bootstrap);
+
+                               _nextPhase.open();
+                       }
+               }
+               finally {
+                       _lock.unlock();
+               }
+       }
+
+       private boolean dependenciesAreEmptyOrAllOptional() {
+               if (_references.isEmpty()) {
+                       return true;
+               }
+
+               for (ReferenceDependency referenceDependency : _references) {
+                       if (referenceDependency.getMinCardinality() > 0) {
+                               return false;
+                       }
+               }
+
+               return true;
+       }
+
+       private void processDescriptorReferences(BeanManagerImpl 
beanManagerImpl) {
+               Collection<ReferenceModel> referenceModels = 
_cdiContainerState.getBeansModel().getReferenceModels();
+
+               for (ReferenceModel referenceModel : referenceModels) {
+                       processReferenceModel(referenceModel, beanManagerImpl);
+               }
+       }
+
+       private void processReferenceModel(ReferenceModel referenceModel, 
BeanManagerImpl beanManagerImpl) {
+               try {
+                       Class<?> beanClass = 
_bundle.loadClass(referenceModel.getBeanClass());
+
+                       ReferenceDependency referenceDependency = new 
ReferenceDependency(
+                               beanManagerImpl, 
ReferenceLiteral.fromTarget(referenceModel.getTarget()),
+                               new ReferenceInjectionPoint(beanClass, 
referenceModel.getTarget()));
+
+                       _references.add(referenceDependency);
+               }
+               catch (ClassNotFoundException cnfe) {
+                       _log.error(
+                               "CDIe - osgi bean descriptor reference 
processing cannot load class {}",
+                               referenceModel.getBeanClass(), cnfe);
+               }
+               catch (InvalidSyntaxException ise) {
+                       _log.error("CDIe - osgi bean descriptor reference 
processing error", ise);
+               }
+       }
+
+       private static final Logger _log = 
LoggerFactory.getLogger(Phase_Reference.class);
+
+       private final Bootstrap _bootstrap;
+       private final Bundle _bundle;
+       private final BundleContext _bundleContext;
+       private final CdiContainerState _cdiContainerState;
+       private final Lock _lock = new ReentrantLock(true);
+       private Phase _nextPhase;
+       private final List<ReferenceDependency> _references;
+       private final List<ServiceDeclaration> _services;
+
+       ServiceTracker<?, ?> _serviceTracker;
+
+       private class ReferencePhaseCustomizer implements 
ServiceTrackerCustomizer<Object, Object> {
+
+               public ReferencePhaseCustomizer(Bootstrap bootstrap) {
+                       _bootstrap = bootstrap;
+               }
+
+               @Override
+               public Object addingService(ServiceReference<Object> reference) 
{
+                       _lock.lock();
+
+                       try {
+                               if (_nextPhase != null) {
+                                       return null;
+                               }
+
+                               boolean matches = false;
+                               boolean resolved = true;
+
+                               for (ReferenceDependency referenceDependency : 
_references) {
+                                       if 
(referenceDependency.matches(reference)) {
+                                               
referenceDependency.resolve(reference);
+                                               matches = true;
+                                       }
+                                       if (!referenceDependency.isResolved()) {
+                                               resolved = false;
+                                       }
+                               }
+
+                               if (!matches) {
+                                       return null;
+                               }
+
+                               if (resolved) {
+                                       _nextPhase = new 
Phase_Publish(_references, _services, _cdiContainerState, _bootstrap);
+
+                                       _nextPhase.open();
+                               }
+
+                               return new Object();
+                       }
+                       finally {
+                               _lock.unlock();
+                       }
+               }
+
+               @Override
+               public void modifiedService(ServiceReference<Object> reference, 
Object object) {
+               }
+
+               @Override
+               public void removedService(ServiceReference<Object> reference, 
Object object) {
+                       _lock.lock();
+
+                       try {
+                               if (_nextPhase != null) {
+                                       _nextPhase.close();
+
+                                       _nextPhase = null;
+
+                                       
_cdiContainerState.fire(CdiEvent.Type.WAITING_FOR_SERVICES);
+                               }
+
+                               for (ReferenceDependency referenceDependency : 
_references) {
+                                       if 
(referenceDependency.matches(reference)) {
+                                               
referenceDependency.unresolve(reference);
+                                       }
+                               }
+                       }
+                       finally {
+                               _lock.unlock();
+                       }
+               }
+
+               private final Bootstrap _bootstrap;
+
+       }
+
+}

Modified: 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ReferenceDependency.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ReferenceDependency.java?rev=1784896&r1=1784895&r2=1784896&view=diff
==============================================================================
--- 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ReferenceDependency.java
 (original)
+++ 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ReferenceDependency.java
 Wed Mar  1 10:06:32 2017
@@ -17,7 +17,6 @@ package org.apache.aries.cdi.container.i
 import static org.apache.aries.cdi.container.internal.util.Reflection.cast;
 
 import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
 import java.lang.reflect.WildcardType;
@@ -29,7 +28,7 @@ import java.util.concurrent.ConcurrentSk
 import javax.enterprise.inject.Instance;
 import javax.enterprise.inject.spi.InjectionPoint;
 
-import org.apache.aries.cdi.container.internal.util.Strings;
+import org.apache.aries.cdi.container.internal.util.Maps;
 import org.jboss.weld.manager.BeanManagerImpl;
 import org.osgi.framework.Constants;
 import org.osgi.framework.Filter;
@@ -38,10 +37,11 @@ import org.osgi.framework.InvalidSyntaxE
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.cdi.annotations.MinCardinality;
 import org.osgi.service.cdi.annotations.Reference;
-import org.osgi.service.cdi.annotations.ReferenceFilterQualifier;
+import org.osgi.service.cdi.annotations.ReferenceFilter;
 import org.osgi.service.cdi.annotations.ReferenceScope;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.osgi.util.converter.Converter;
+import org.osgi.util.converter.StandardConverter;
+import org.osgi.util.converter.TypeReference;
 
 public class ReferenceDependency {
 
@@ -170,27 +170,10 @@ public class ReferenceDependency {
                }
 
                for (Annotation qualifier : qualifiers) {
-                       if 
(qualifier.annotationType().isAnnotationPresent(ReferenceFilterQualifier.class))
 {
-                               Class<?> clazz = qualifier.annotationType();
-                               try {
-                                       Method methodValue = 
clazz.getDeclaredMethod("value");
-                                       String value = 
String.valueOf(methodValue.invoke(qualifier));
-                                       append(sb, clazz.getSimpleName(), 
value);
-                               }
-                               catch (ReflectiveOperationException roe) {
-                                       Method[] methods = 
clazz.getDeclaredMethods();
+                       if 
(qualifier.annotationType().isAnnotationPresent(ReferenceFilter.class)) {
+                               Map<String, String> map = 
_converter.convert(qualifier).sourceAs(qualifier.annotationType()).to(_mapType);
 
-                                       for (Method method : methods) {
-                                               try {
-                                                       String value = 
String.valueOf(method.invoke(qualifier));
-                                                       append(sb, 
method.getName(), value);
-                                               } catch 
(ReflectiveOperationException roe2) {
-                                                       if 
(_log.isDebugEnabled()) {
-                                                               
_log.debug("CDIe - Failure in reference filter qualifier processing", roe2);
-                                                       }
-                                               }
-                                       }
-                               }
+                               Maps.appendFilter(sb, map);
                        }
                }
 
@@ -199,14 +182,6 @@ public class ReferenceDependency {
                return sb.toString();
        }
 
-       private void append(StringBuilder sb, String simpleName, String value) {
-               sb.append("(");
-               sb.append(Strings.camelCase(simpleName));
-               sb.append("=");
-               sb.append(value);
-               sb.append(")");
-       }
-
        private BindType getBindType(Type type) {
                if (type instanceof ParameterizedType) {
                        ParameterizedType parameterizedType = cast(type);
@@ -324,7 +299,9 @@ public class ReferenceDependency {
                return cast(first);
        }
 
-       private static final Logger _log = 
LoggerFactory.getLogger(ReferenceDependency.class);
+       private static final Converter _converter = new StandardConverter();
+
+       private static final TypeReference<Map<String, String>> _mapType = new 
TypeReference<Map<String, String>>(){};
 
        private final BeanManagerImpl _beanManagerImpl;
        private final BindType _bindType;

Modified: 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ServiceDeclaration.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ServiceDeclaration.java?rev=1784896&r1=1784895&r2=1784896&view=diff
==============================================================================
--- 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ServiceDeclaration.java
 (original)
+++ 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ServiceDeclaration.java
 Wed Mar  1 10:06:32 2017
@@ -15,30 +15,27 @@
 package org.apache.aries.cdi.container.internal.container;
 
 import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
 import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.Dictionary;
 import java.util.Hashtable;
 import java.util.List;
+import java.util.Map;
 
 import javax.enterprise.context.ApplicationScoped;
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.Bean;
 import javax.inject.Singleton;
 
-import org.apache.aries.cdi.container.internal.util.Strings;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.PrototypeServiceFactory;
 import org.osgi.framework.ServiceFactory;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.cdi.annotations.Service;
 import org.osgi.service.cdi.annotations.ServiceProperty;
-import org.osgi.service.cdi.annotations.ServicePropertyQualifier;
 import org.osgi.util.converter.Converter;
 import org.osgi.util.converter.StandardConverter;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.osgi.util.converter.TypeReference;
 
 public class ServiceDeclaration {
 
@@ -51,35 +48,16 @@ public class ServiceDeclaration {
                Dictionary<String, Object> properties = new Hashtable<>();
 
                for (Object object : bean.getQualifiers()) {
-                       Annotation qualifier = (Annotation)object;
-                       if 
(qualifier.annotationType().isAnnotationPresent(ServicePropertyQualifier.class))
 {
-                               Class<?> clazz = qualifier.annotationType();
-                               try {
-                                       Method methodValue = 
clazz.getDeclaredMethod("value");
-                                       put(properties, clazz.getSimpleName(), 
methodValue.invoke(qualifier));
-                               }
-                               catch (ReflectiveOperationException roe) {
-                                       Method[] methods = 
clazz.getDeclaredMethods();
+                       Annotation annotation = (Annotation)object;
+                       Map<String, Object> map = 
_converter.convert(annotation).sourceAs(annotation.annotationType()).to(_mapType);
 
-                                       for (Method method : methods) {
-                                               try {
-                                                       put(properties, 
method.getName(), method.invoke(qualifier));
-                                               } catch 
(ReflectiveOperationException roe2) {
-                                                       if 
(_log.isDebugEnabled()) {
-                                                               
_log.debug("CDIe - Failure in service property qualifier processing", roe2);
-                                                       }
-                                               }
-                                       }
-                               }
+                       for (Map.Entry<String, Object> entry : map.entrySet()) {
+                               properties.put(entry.getKey(), 
entry.getValue());
                        }
                }
 
                for (ServiceProperty serviceProperty : _service.properties()) {
-                       Type type = serviceProperty.type().getType();
-                       String[] value = 
serviceProperty.value().split("\\s*,\\s*");
-
-                       @SuppressWarnings("deprecation")
-                       Object object = _converter.convert(value).to(type);
+                       Object object = getValue(serviceProperty);
 
                        properties.put(serviceProperty.key(), object);
                }
@@ -87,10 +65,6 @@ public class ServiceDeclaration {
                _properties = properties;
        }
 
-       private void put(Dictionary<String, Object> properties, String 
simpleName, Object value) {
-               properties.put(Strings.camelCase(simpleName), value);
-       }
-
        @SuppressWarnings("rawtypes")
        public Bean getBean() {
                return _bean;
@@ -139,10 +113,16 @@ public class ServiceDeclaration {
                return new PrototypeScopeWrapper();
        }
 
-       @SuppressWarnings("deprecation")
+       Object getValue(ServiceProperty serviceProperty) {
+               Type type = serviceProperty.type().getType();
+               String[] value = serviceProperty.value();
+               Object object = _converter.convert(value).to(type);
+               return object;
+       }
+
        private static final Converter _converter = new StandardConverter();
 
-       private static final Logger _log = 
LoggerFactory.getLogger(ServiceDeclaration.class);
+       private static final TypeReference<Map<String, Object>> _mapType = new 
TypeReference<Map<String, Object>>(){};
 
        @SuppressWarnings("rawtypes")
        private final Bean _bean;

Modified: 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/literal/ReferenceLiteral.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/literal/ReferenceLiteral.java?rev=1784896&r1=1784895&r2=1784896&view=diff
==============================================================================
--- 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/literal/ReferenceLiteral.java
 (original)
+++ 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/literal/ReferenceLiteral.java
 Wed Mar  1 10:06:32 2017
@@ -8,7 +8,15 @@ import org.osgi.service.cdi.annotations.
 public class ReferenceLiteral extends AnnotationLiteral<Reference> implements 
Reference {
 
        private static final long serialVersionUID = 1L;
-       public static final Reference INSTANCE = new ReferenceLiteral();
+       public static final Reference INSTANCE = new ReferenceLiteral("");
+
+       public static ReferenceLiteral fromTarget(String target) {
+               return new ReferenceLiteral(target);
+       }
+
+       public ReferenceLiteral(String target) {
+               _target = target;
+       }
 
        @Override
        public ReferenceScope scope() {
@@ -17,7 +25,7 @@ public class ReferenceLiteral extends An
 
        @Override
        public String target() {
-               return "";
+               return _target;
        }
 
        @Override
@@ -25,4 +33,6 @@ public class ReferenceLiteral extends An
                return Object.class;
        }
 
+       private final String _target;
+
 }

Modified: 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/literal/ServiceLiteral.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/literal/ServiceLiteral.java?rev=1784896&r1=1784895&r2=1784896&view=diff
==============================================================================
--- 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/literal/ServiceLiteral.java
 (original)
+++ 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/literal/ServiceLiteral.java
 Wed Mar  1 10:06:32 2017
@@ -10,6 +10,10 @@ public class ServiceLiteral extends Anno
        private static final long serialVersionUID = 1L;
        public static final Service INSTANCE = new ServiceLiteral(new 
Class<?>[0], new ServiceProperty[0]);
 
+       public static ServiceLiteral from(Class<?>[] classes, ServiceProperty[] 
properties) {
+               return new ServiceLiteral(classes, properties);
+       }
+
        public ServiceLiteral(Class<?>[] classes, ServiceProperty[] properties) 
{
                _type = classes;
                _properties = properties;

Added: 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/literal/ServicePropertyLiteral.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/literal/ServicePropertyLiteral.java?rev=1784896&view=auto
==============================================================================
--- 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/literal/ServicePropertyLiteral.java
 (added)
+++ 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/literal/ServicePropertyLiteral.java
 Wed Mar  1 10:06:32 2017
@@ -0,0 +1,41 @@
+package org.apache.aries.cdi.container.internal.literal;
+
+import javax.enterprise.util.AnnotationLiteral;
+
+import org.osgi.service.cdi.annotations.PropertyType;
+import org.osgi.service.cdi.annotations.ServiceProperty;
+
+public class ServicePropertyLiteral extends AnnotationLiteral<ServiceProperty> 
implements ServiceProperty {
+
+       private static final long serialVersionUID = 1L;
+
+       public static ServicePropertyLiteral from(String key, String[] value, 
PropertyType type) {
+               return new ServicePropertyLiteral(key, value, type);
+       }
+
+       public ServicePropertyLiteral(String key, String[] value, PropertyType 
type) {
+               _key = key;
+               _value = value;
+               _type = type;
+       }
+
+       @Override
+       public String key() {
+               return _key;
+       }
+
+       @Override
+       public String[] value() {
+               return _value;
+       }
+
+       @Override
+       public PropertyType type() {
+               return _type;
+       }
+
+       private final String _key;
+       private final PropertyType _type;
+       private final String[] _value;
+
+}

Added: 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/AbstractModel.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/AbstractModel.java?rev=1784896&view=auto
==============================================================================
--- 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/AbstractModel.java
 (added)
+++ 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/AbstractModel.java
 Wed Mar  1 10:06:32 2017
@@ -0,0 +1,21 @@
+package org.apache.aries.cdi.container.internal.model;
+
+import org.xml.sax.Attributes;
+
+public class AbstractModel {
+
+       String getValue(String uri, String localName, Attributes attributes) {
+               String value = attributes.getValue(uri, localName);
+
+               if (value == null) {
+                       value = attributes.getValue("", localName);
+               }
+
+               if (value != null) {
+                       value = value.trim();
+               }
+
+               return value;
+       }
+
+}

Added: 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/AbstractModelBuilder.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/AbstractModelBuilder.java?rev=1784896&view=auto
==============================================================================
--- 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/AbstractModelBuilder.java
 (added)
+++ 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/AbstractModelBuilder.java
 Wed Mar  1 10:06:32 2017
@@ -0,0 +1,154 @@
+package org.apache.aries.cdi.container.internal.model;
+
+import static org.apache.aries.cdi.container.internal.util.Reflection.cast;
+import static 
org.osgi.service.cdi.CdiExtenderConstants.REQUIREMENT_BEANS_ATTRIBUTE;
+import static 
org.osgi.service.cdi.CdiExtenderConstants.REQUIREMENT_OSGI_BEANS_ATTRIBUTE;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import org.apache.aries.cdi.container.internal.util.Throw;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXNotRecognizedException;
+import org.xml.sax.SAXNotSupportedException;
+
+public abstract class AbstractModelBuilder {
+
+       public BeansModel build() {
+               List<URL> beanDescriptorURLs = new ArrayList<URL>();
+               Map<String, Object> attributes = getAttributes();
+
+               List<String> beanDescriptorPaths = 
cast(attributes.get(REQUIREMENT_BEANS_ATTRIBUTE));
+
+               if (beanDescriptorPaths != null) {
+                       for (String descriptorPath : beanDescriptorPaths) {
+                               Collection<String> resources = 
getResources(descriptorPath);
+
+                               if (resources != null) {
+                                       for (String resource : resources) {
+                                               URL url = getResource(resource);
+
+                                               if (url != null) {
+                                                       
beanDescriptorURLs.add(url);
+                                               }
+                                       }
+                               }
+                       }
+               }
+
+               String osgiBeansDescriptorPath = 
cast(attributes.get(REQUIREMENT_OSGI_BEANS_ATTRIBUTE));
+
+               if (osgiBeansDescriptorPath == null) {
+                       osgiBeansDescriptorPath = "OSGI-INF/cdi/osgi-beans.xml";
+               }
+
+               URL osgiBeansDescriptorURL = 
getResource(osgiBeansDescriptorPath);
+
+               return parse(osgiBeansDescriptorURL, beanDescriptorURLs);
+       }
+
+       abstract Map<String, Object> getAttributes();
+
+       abstract ClassLoader getClassLoader();
+
+       abstract URL getResource(String resource);
+
+       abstract Collection<String> getResources(String descriptorString);
+
+       private OSGiBeansHandler getHandler(List<URL> beanDescriptorURLs) {
+               return new OSGiBeansHandler(beanDescriptorURLs);
+       }
+
+       private BeansModel parse(URL osgiBeansDescriptorURL, List<URL> 
beanDescriptorURLs) {
+               SAXParserFactory factory = SAXParserFactory.newInstance();
+               factory.setValidating(false);
+               factory.setNamespaceAware(true);
+
+               if (osgiBeansDescriptorURL == null) {
+                       throw new IllegalArgumentException("Missing osgi-beans 
descriptor: " + osgiBeansDescriptorURL);
+               }
+
+               SAXParser parser;
+
+               try {
+                       parser = factory.newSAXParser();
+               }
+               catch (ParserConfigurationException | SAXException e) {
+                       return Throw.exception(e);
+               }
+
+               InputStream inputStream = null;
+
+               try {
+                       inputStream = osgiBeansDescriptorURL.openStream();
+                       InputSource source = new InputSource(inputStream);
+
+                       if (source.getByteStream().available() == 0) {
+                               throw new IllegalArgumentException(
+                                       "Specified osgi-beans descriptor is 
empty: " + osgiBeansDescriptorURL);
+                       }
+
+                       try {
+                               parser.setProperty(
+                                       
"http://java.sun.com/xml/jaxp/properties/schemaLanguage";, 
"http://www.w3.org/2001/XMLSchema";);
+                               
parser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaSource";, 
loadXsds());
+                       }
+                       catch (IllegalArgumentException | 
SAXNotRecognizedException | SAXNotSupportedException e) {
+                               // No op, we just don't validate the XML
+                       }
+
+                       OSGiBeansHandler handler = 
getHandler(beanDescriptorURLs);
+
+                       parser.parse(source, handler);
+
+                       return handler.createBeansModel();
+               }
+               catch (IOException | SAXException e) {
+                       return Throw.exception(e);
+               }
+               finally {
+                       if (inputStream != null) {
+                               try {
+                                       inputStream.close();
+                               }
+                               catch (IOException e) {
+                                       throw new IllegalStateException(e);
+                               }
+                       }
+               }
+       }
+
+       private InputSource loadXsd(String name) {
+               InputStream in = getClassLoader().getResourceAsStream(name);
+               if (in == null) {
+                       return null;
+               }
+               else {
+                       return new InputSource(in);
+               }
+       }
+
+       private InputSource[] loadXsds() {
+               List<InputSource> xsds = new ArrayList<InputSource>();
+
+               for (XmlSchema schema : XmlSchema.values()) {
+                       InputSource source = loadXsd(schema.getFileName());
+                       if (source != null) {
+                               xsds.add(source);
+                       }
+               }
+
+               return xsds.toArray(new InputSource[0]);
+       }
+
+}

Added: 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BeansModel.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BeansModel.java?rev=1784896&view=auto
==============================================================================
--- 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BeansModel.java
 (added)
+++ 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BeansModel.java
 Wed Mar  1 10:06:32 2017
@@ -0,0 +1,71 @@
+/**
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.aries.cdi.container.internal.model;
+
+import java.net.URL;
+import java.util.Collection;
+
+import org.jboss.weld.bootstrap.spi.BeansXml;
+import org.jboss.weld.xml.BeansXmlParser;
+
+public class BeansModel {
+
+       public BeansModel(
+               Collection<String> beanClasses, Collection<ConfigurationModel> 
configurationModels,
+               Collection<ReferenceModel> referenceModels, 
Collection<ServiceModel> serviceModels,
+               Collection<URL> beanDescriptorURLs) {
+
+               _beanClasses = beanClasses;
+               _configurationModels = configurationModels;
+               _referenceModels = referenceModels;
+               _serviceModels = serviceModels;
+
+               BeansXml beansXml = BeansXml.EMPTY_BEANS_XML;
+
+               if (!beanDescriptorURLs.isEmpty()) {
+                       BeansXmlParser beansXmlParser = new BeansXmlParser();
+                       beansXml = beansXmlParser.parse(beanDescriptorURLs);
+               }
+
+               _beansXml = beansXml;
+       }
+
+       public Collection<String> getBeanClassNames() {
+               return _beanClasses;
+       }
+
+       public BeansXml getBeansXml() {
+               return _beansXml;
+       }
+
+       public Collection<ConfigurationModel> getConfigurationModels() {
+               return _configurationModels;
+       }
+
+       public Collection<ReferenceModel> getReferenceModels() {
+               return _referenceModels;
+       }
+
+       public Collection<ServiceModel> getServiceModels() {
+               return _serviceModels;
+       }
+
+       private final Collection<String> _beanClasses;
+       private final BeansXml _beansXml;
+       private final Collection<ConfigurationModel> _configurationModels;
+       private final Collection<ReferenceModel> _referenceModels;
+       private final Collection<ServiceModel> _serviceModels;
+
+}
\ No newline at end of file

Added: 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BeansModelBuilder.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BeansModelBuilder.java?rev=1784896&view=auto
==============================================================================
--- 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BeansModelBuilder.java
 (added)
+++ 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BeansModelBuilder.java
 Wed Mar  1 10:06:32 2017
@@ -0,0 +1,87 @@
+/**
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.aries.cdi.container.internal.model;
+
+import static org.osgi.namespace.extender.ExtenderNamespace.EXTENDER_NAMESPACE;
+import static org.osgi.service.cdi.CdiExtenderConstants.CDI_EXTENDER;
+
+import java.net.URL;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.wiring.BundleCapability;
+import org.osgi.framework.wiring.BundleRequirement;
+import org.osgi.framework.wiring.BundleWire;
+import org.osgi.framework.wiring.BundleWiring;
+
+public class BeansModelBuilder extends AbstractModelBuilder {
+
+       public BeansModelBuilder(BundleWiring bundleWiring, Bundle 
extenderBundle) {
+               _bundleWiring = bundleWiring;
+               _extenderBundle = extenderBundle;
+               _bundle = _bundleWiring.getBundle();
+
+               List<BundleWire> wires = 
bundleWiring.getRequiredWires(EXTENDER_NAMESPACE);
+
+               Map<String, Object> cdiAttributes = Collections.emptyMap();
+
+               for (BundleWire wire : wires) {
+                       BundleCapability capability = wire.getCapability();
+                       Map<String, Object> attributes = 
capability.getAttributes();
+                       String extender = 
(String)attributes.get(EXTENDER_NAMESPACE);
+
+                       if (extender.equals(CDI_EXTENDER)) {
+                               BundleRequirement requirement = 
wire.getRequirement();
+                               cdiAttributes = requirement.getAttributes();
+                               break;
+                       }
+               }
+
+               _attributes = cdiAttributes;
+       }
+
+       @Override
+       Map<String, Object> getAttributes() {
+               return _attributes;
+       }
+
+       @Override
+       ClassLoader getClassLoader() {
+               return 
_extenderBundle.adapt(BundleWiring.class).getClassLoader();
+       }
+
+       @Override
+       URL getResource(String resource) {
+               return _bundle.getResource(resource);
+       }
+
+       @Override
+       Collection<String> getResources(String descriptorString) {
+               int pos = descriptorString.lastIndexOf('/');
+               String path = descriptorString.substring(0, pos);
+               String fileName = descriptorString.substring(pos, 
descriptorString.length());
+
+               return _bundleWiring.listResources(path, fileName, 
BundleWiring.LISTRESOURCES_LOCAL);
+       }
+
+       private final Map<String, Object> _attributes;
+       private final Bundle _bundle;
+       private final BundleWiring _bundleWiring;
+       private final Bundle _extenderBundle;
+
+}

Added: 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ConfigurationModel.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ConfigurationModel.java?rev=1784896&view=auto
==============================================================================
--- 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ConfigurationModel.java
 (added)
+++ 
aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ConfigurationModel.java
 Wed Mar  1 10:06:32 2017
@@ -0,0 +1,20 @@
+package org.apache.aries.cdi.container.internal.model;
+
+import static 
org.apache.aries.cdi.container.internal.model.Constants.CDI10_URI;
+import static 
org.apache.aries.cdi.container.internal.model.Constants.PID_ATTRIBUTE;
+
+import org.xml.sax.Attributes;
+
+public class ConfigurationModel extends AbstractModel {
+
+       public ConfigurationModel(Attributes attributes) {
+               _pid = getValue(CDI10_URI, PID_ATTRIBUTE, attributes);
+       }
+
+       public String getPid() {
+               return _pid;
+       }
+
+       private final String _pid;
+
+}


Reply via email to