You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by ro...@apache.org on 2019/11/25 18:43:19 UTC

[aries-cdi] branch rotty3000/cdi-spi updated (0cbdf78 -> 3c28c8a)

This is an automated email from the ASF dual-hosted git repository.

rotty3000 pushed a change to branch rotty3000/cdi-spi
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git.


 discard 0cbdf78  mp-config test
 discard 623d381  mp-config extension
 discard 144924a  don't set a global resolve execution
 discard 83ae755  use a base bndrun to avoid duplication
 discard da0bc84  make sure @ApplicationScoped services are published on the right thread
 discard 6d3e1a7  use release and widen blacklist of jobss APIs
 discard 4e1259f  cleanup
 discard 938d0e0  better SPI
 discard e43cb64  update tests
 discard 0f302de  test fixes
 discard c1f3201  readme updates
 discard f4a99ee  run test suite on both
 discard 2114e34  these extensions are for weld for the moment
 discard 7c6bb61  tweak jndi for better stability
 discard a8445c1  executables for each
 discard 4504483  add Weld CDI container that uses the Aries CDI SPI
 discard 4115bd7  always use a new classloader with each cdi container instance
 discard fab1a45  add OpenWebBeans CDI container that uses the Aries CDI SPI
 discard 71d3f55  rewrite the extender not to use any particular CDI container impl
 discard f8173f3  missing spi package export
 discard 715c113  rename spi loader
 discard 1cef6fc  add spi to bom
 discard 5db15fb  ignores
 discard 85f06de  spi
 discard cfa879f  use our own logic for discover to avoid double CDI container startup
 discard c77abe2  implement annotated
     add b342d26  cleanup
     add ae829c9  Merge pull request #3 from rotty3000/master
     add 88e93c0  [maven-release-plugin] prepare release org.apache.aries.cdi-1.0.3
     add 4b4e773  [maven-release-plugin] prepare for next development iteration
     new c26aa4f  implement annotated
     new 3c41531  use our own logic for discover to avoid double CDI container startup
     new d728ca7  spi
     new e230e86  ignores
     new 626b69d  add spi to bom
     new 744582b  rename spi loader
     new c3b157f  missing spi package export
     new dc9eb67  rewrite the extender not to use any particular CDI container impl
     new fdc50ee  add OpenWebBeans CDI container that uses the Aries CDI SPI
     new a101776  always use a new classloader with each cdi container instance
     new 1160239  add Weld CDI container that uses the Aries CDI SPI
     new b0f5ac4  executables for each
     new 353aff7  tweak jndi for better stability
     new bbad287  these extensions are for weld for the moment
     new e421358  run test suite on both
     new fd67de0  readme updates
     new 1e0219d  test fixes
     new 1980520  update tests
     new f1bbce5  better SPI
     new c9bb433  use release and widen blacklist of jobss APIs
     new 7b78262  make sure @ApplicationScoped services are published on the right thread
     new 874aaab  use a base bndrun to avoid duplication
     new e0b0c09  don't set a global resolve execution
     new df6d321  mp-config extension
     new ce32f13  mp-config test
     new 3faa1ac  update version
     new 3c28c8a  re-resolve

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (0cbdf78)
            \
             N -- N -- N   refs/heads/rotty3000/cdi-spi (3c28c8a)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 27 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 cdi-bom/pom.xml                                    |  2 +-
 cdi-executable/owb-executable.bndrun               |  8 ++--
 cdi-executable/pom.xml                             |  4 +-
 cdi-executable/weld-executable.bndrun              | 19 ++++----
 cdi-extender/pom.xml                               |  2 +-
 .../aries/cdi/container/internal/Activator.java    | 23 +++++-----
 .../internal/container/ContainerBootstrap.java     | 50 ++++++++++++++--------
 .../aries/cdi/container/internal/container/Op.java |  2 +-
 .../internal/container/RuntimeExtension.java       |  6 +--
 .../internal/phase/ContainerBootstrapTest.java     |  2 +-
 cdi-extension-el-jsp/pom.xml                       |  2 +-
 cdi-extension-http/pom.xml                         |  2 +-
 cdi-extension-jndi/pom.xml                         |  2 +-
 cdi-extension-mp-config/pom.xml                    |  2 +-
 cdi-extra/pom.xml                                  |  2 +-
 cdi-itests/owb-itest.bndrun                        | 14 +++---
 cdi-itests/pom.xml                                 |  2 +-
 .../apache/aries/cdi/test/cases/SlimTestCase.java  | 14 ++++++
 cdi-itests/weld-itest.bndrun                       | 16 +++----
 cdi-owb/pom.xml                                    |  2 +-
 .../aries/cdi/owb/OWBCDIContainerInitializer.java  | 18 +++-----
 cdi-spi/pom.xml                                    |  2 +-
 .../aries/cdi/spi/CDIContainerInitializer.java     | 25 +++++++++--
 cdi-weld/pom.xml                                   |  2 +-
 .../cdi/weld/WeldCDIContainerInitializer.java      | 27 +++++-------
 pom.xml                                            |  2 +-
 26 files changed, 140 insertions(+), 112 deletions(-)


[aries-cdi] 09/27: add OpenWebBeans CDI container that uses the Aries CDI SPI

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rotty3000 pushed a commit to branch rotty3000/cdi-spi
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit fdc50ee6b63330e26d6c9e13b8aefbc163ee7225
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Fri Nov 22 12:42:53 2019 -0500

    add OpenWebBeans CDI container that uses the Aries CDI SPI
    
    Signed-off-by: Raymond Augé <ro...@apache.org>
    Signed-off-by: Romain Manni-Bucau <rm...@gmail.com>
---
 cdi-bom/pom.xml                                    |   6 +
 .../{executable.bndrun => owb-executable.bndrun}   |  30 +-
 cdi-executable/pom.xml                             |   8 +-
 cdi-owb/pom.xml                                    | 149 +++++++++
 .../java/org/apache/aries/cdi/owb/Activator.java   |  74 +++++
 .../apache/aries/cdi/owb/CdiScannerService.java    |  62 ++++
 .../aries/cdi/owb/OSGiDefiningClassService.java    |  72 ++++
 .../aries/cdi/owb/OWBSeContainerInitializer.java   | 357 ++++++++++++++++++++
 .../cdi/owb/OWBSeContainerInitializerFactory.java  |  44 +++
 .../cdi/owb/OsgiApplicationBoundaryService.java    |  44 +++
 .../org/apache/aries/cdi/owb/package-info.java     |  23 ++
 .../aries/cdi/owb/web/UpdatableServletContext.java |  67 ++++
 .../org/apache/aries/cdi/owb/web/WebExtension.java | 367 +++++++++++++++++++++
 .../aries/cdi/owb/web/WebExtensionFactory.java     |  37 +++
 .../org/apache/aries/cdi/owb/web/package-info.java |  45 +++
 pom.xml                                            |   4 +-
 16 files changed, 1369 insertions(+), 20 deletions(-)

diff --git a/cdi-bom/pom.xml b/cdi-bom/pom.xml
index 794e2d1..d3b97c4 100644
--- a/cdi-bom/pom.xml
+++ b/cdi-bom/pom.xml
@@ -82,6 +82,12 @@
 				<scope>compile</scope>
 			</dependency>
 			<dependency>
+				<groupId>org.apache.aries.cdi</groupId>
+				<artifactId>org.apache.aries.cdi.owb</artifactId>
+				<version>${project.version}</version>
+				<scope>runtime</scope>
+			</dependency>
+			<dependency>
 				<groupId>org.apache.aries.spifly</groupId>
 				<artifactId>org.apache.aries.spifly.dynamic.framework.extension</artifactId>
 				<version>1.2</version>
diff --git a/cdi-executable/executable.bndrun b/cdi-executable/owb-executable.bndrun
similarity index 73%
rename from cdi-executable/executable.bndrun
rename to cdi-executable/owb-executable.bndrun
index 02b26d4..14a9500 100644
--- a/cdi-executable/executable.bndrun
+++ b/cdi-executable/owb-executable.bndrun
@@ -25,10 +25,7 @@
 
 -resolve.effective: resolve, active
 -runrequires: \
-	osgi.identity;filter:='(osgi.identity=javax.ejb-api)',\
-	osgi.identity;filter:='(osgi.identity=javax.transaction-api)',\
-	osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.extension.http)',\
-	osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.extra)',\
+	osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.owb)',\
 	osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.command)'
 
 -runpath: \
@@ -38,32 +35,35 @@
 	slf4j.api
 
 -runsystempackages: \
-	org.slf4j;version=1.7.25,\
-	org.slf4j.helpers;version=1.7.25,\
-	org.slf4j.spi;version=1.7.25,\
+	org.slf4j;version=1.7.28,\
+	org.slf4j.event;version=1.7.28,\
+	org.slf4j.helpers;version=1.7.28,\
+	org.slf4j.spi;version=1.7.28,\
 	sun.misc
 
 -runbundles: \
-	javax.ejb-api;version='[3.2.0,3.2.1)',\
-	javax.transaction-api;version='[1.2.0,1.2.1)',\
-	jboss-classfilewriter;version='[1.2.3,1.2.4)',\
+	javax.servlet.jsp-api;version='[2.3.3,2.3.4)',\
+	openwebbeans-impl;version='[2.0.13,2.0.14)',\
+	openwebbeans-spi;version='[2.0.13,2.0.14)',\
+	openwebbeans-web;version='[2.0.13,2.0.14)',\
 	org.apache.aries.cdi.extender;version='[1.0.3,1.0.4)',\
-	org.apache.aries.cdi.extension.http;version='[1.0.3,1.0.4)',\
 	org.apache.aries.cdi.extra;version='[1.0.3,1.0.4)',\
+	org.apache.aries.cdi.owb;version='[1.0.3,1.0.4)',\
+	org.apache.aries.cdi.spi;version='[1.0.3,1.0.4)',\
 	org.apache.aries.spifly.dynamic.framework.extension;version='[1.2.0,1.2.1)',\
 	org.apache.felix.configadmin;version='[1.9.10,1.9.11)',\
 	org.apache.felix.gogo.command;version='[1.1.0,1.1.1)',\
 	org.apache.felix.gogo.runtime;version='[1.1.2,1.1.3)',\
 	org.apache.felix.gogo.shell;version='[1.1.2,1.1.3)',\
-	org.apache.felix.http.jetty;version='[4.0.6,4.0.7)',\
 	org.apache.felix.http.servlet-api;version='[1.1.2,1.1.3)',\
 	org.apache.geronimo.specs.geronimo-annotation_1.3_spec;version='[1.1.0,1.1.1)',\
 	org.apache.geronimo.specs.geronimo-atinject_1.0_spec;version='[1.1.0,1.1.1)',\
 	org.apache.geronimo.specs.geronimo-el_2.2_spec;version='[1.1.0,1.1.1)',\
 	org.apache.geronimo.specs.geronimo-interceptor_1.2_spec;version='[1.1.0,1.1.1)',\
 	org.apache.geronimo.specs.geronimo-jcdi_2.0_spec;version='[1.1.0,1.1.1)',\
-	org.jboss.logging.jboss-logging;version='[3.3.2,3.3.3)',\
-	org.jboss.weld.osgi-bundle;version='[3.0.5,3.0.6)',\
+	org.apache.xbean.asm7-shaded;version='[4.13.0,4.13.1)',\
+	org.apache.xbean.bundleutils;version='[4.15.0,4.15.1)',\
+	org.apache.xbean.finder-shaded;version='[4.13.0,4.13.1)',\
 	org.osgi.service.cdi;version='[1.0.0,1.0.1)',\
 	org.osgi.util.function;version='[1.1.0,1.1.1)',\
-	org.osgi.util.promise;version='[1.1.0,1.1.1)',\
+	org.osgi.util.promise;version='[1.1.0,1.1.1)'
diff --git a/cdi-executable/pom.xml b/cdi-executable/pom.xml
index df95188..0cca58d 100644
--- a/cdi-executable/pom.xml
+++ b/cdi-executable/pom.xml
@@ -79,7 +79,7 @@
 				<artifactId>bnd-resolver-maven-plugin</artifactId>
 				<configuration>
 					<bndruns>
-						<bndrun>executable.bndrun</bndrun>
+						<bndrun>owb-executable.bndrun</bndrun>
 					</bndruns>
 					<includeDependencyManagement>true</includeDependencyManagement>
 				</configuration>
@@ -89,7 +89,7 @@
 				<artifactId>bnd-export-maven-plugin</artifactId>
 				<configuration>
 					<bndruns>
-						<bndrun>executable.bndrun</bndrun>
+						<bndrun>owb-executable.bndrun</bndrun>
 					</bndruns>
 					<includeDependencyManagement>true</includeDependencyManagement>
 				</configuration>
@@ -99,9 +99,9 @@
 				<artifactId>bnd-run-maven-plugin</artifactId>
 				<executions>
 					<execution>
-						<id>executable</id>
+						<id>owb-executable</id>
 						<configuration>
-							<bndrun>executable.bndrun</bndrun>
+							<bndrun>owb-executable.bndrun</bndrun>
 						</configuration>
 					</execution>
 				</executions>
diff --git a/cdi-owb/pom.xml b/cdi-owb/pom.xml
new file mode 100644
index 0000000..d700abe
--- /dev/null
+++ b/cdi-owb/pom.xml
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<groupId>org.apache.aries.cdi</groupId>
+		<artifactId>org.apache.aries.cdi</artifactId>
+		<version>1.0.3-SNAPSHOT</version>
+		<relativePath>..</relativePath>
+	</parent>
+
+	<artifactId>org.apache.aries.cdi.owb</artifactId>
+	<name>Apache Aries CDI - Container using Apache OpenWebBeans</name>
+	<description>Apache Aries CDI - Container using Apache OpenWebBeans</description>
+
+	<licenses>
+		<license>
+			<name>ASL 2.0</name>
+			<url>https://www.apache.org/licenses/LICENSE-2.0</url>
+		</license>
+	</licenses>
+
+	<scm>
+		<connection>scm:git:git@github.com:apache/aries-cdi.git</connection>
+		<developerConnection>scm:git:git@github.com:apache/aries-cdi.git</developerConnection>
+		<tag>HEAD</tag>
+		<url>https://github.com/apache/aries-cdi</url>
+	</scm>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>biz.aQute.bnd</groupId>
+				<artifactId>bnd-maven-plugin</artifactId>
+				<configuration>
+					<bnd><![CDATA[
+						-cdiannotations:
+						-noclassforname: true
+						#Import-Package: \
+						#	org.apache.webbeans.servlet;resolution:=optional,\
+						#	org.apache.webbeans.web.*;resolution:=optional,\
+						#	javax.servlet.*;resolution:=optional,\
+						#	*
+					]]></bnd>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.apache.aries.cdi</groupId>
+			<artifactId>org.apache.aries.cdi.extra</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.aries.cdi</groupId>
+			<artifactId>org.apache.aries.cdi.spi</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.geronimo.specs</groupId>
+			<artifactId>geronimo-annotation_1.3_spec</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.geronimo.specs</groupId>
+			<artifactId>geronimo-atinject_1.0_spec</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.geronimo.specs</groupId>
+			<artifactId>geronimo-interceptor_1.2_spec</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.geronimo.specs</groupId>
+			<artifactId>geronimo-jcdi_2.0_spec</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.openwebbeans</groupId>
+			<artifactId>openwebbeans-impl</artifactId>
+			<version>${owb.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.openwebbeans</groupId>
+			<artifactId>openwebbeans-web</artifactId>
+			<version>${owb.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.xbean</groupId>
+			<artifactId>xbean-bundleutils</artifactId>
+			<version>4.15</version>
+			<exclusions>
+				<exclusion>
+					<groupId>org.slf4j</groupId>
+					<artifactId>slf4j-api</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.felix</groupId>
+			<artifactId>org.apache.felix.http.servlet-api</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.osgi</groupId>
+			<artifactId>org.osgi.namespace.extender</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.osgi</groupId>
+			<artifactId>org.osgi.namespace.implementation</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.osgi</groupId>
+			<artifactId>org.osgi.namespace.service</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.osgi</groupId>
+			<artifactId>org.osgi.service.cdi</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.osgi</groupId>
+			<artifactId>org.osgi.service.http.whiteboard</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.osgi</groupId>
+			<artifactId>osgi.annotation</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.osgi</groupId>
+			<artifactId>osgi.core</artifactId>
+		</dependency>
+	</dependencies>
+
+</project>
\ No newline at end of file
diff --git a/cdi-owb/src/main/java/org/apache/aries/cdi/owb/Activator.java b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/Activator.java
new file mode 100644
index 0000000..8a17c96
--- /dev/null
+++ b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/Activator.java
@@ -0,0 +1,74 @@
+/**
+ * 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.owb;
+
+import static org.osgi.framework.Constants.BUNDLE_ACTIVATOR;
+import static org.osgi.framework.Constants.SERVICE_DESCRIPTION;
+import static org.osgi.framework.Constants.SERVICE_VENDOR;
+import static org.osgi.service.cdi.CDIConstants.CDI_EXTENSION_PROPERTY;
+
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+import javax.enterprise.inject.se.SeContainerInitializer;
+import javax.enterprise.inject.spi.Extension;
+
+import org.osgi.annotation.bundle.Header;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
+
+@Header(
+	name = BUNDLE_ACTIVATOR,
+	value = "${@class}"
+)
+public class Activator implements BundleActivator {
+
+	public static final boolean webEnabled = true;
+
+	@Override
+	public void start(BundleContext bundleContext) throws Exception {
+		System.setProperty("openwebbeans.web.sci.active", "false"); // we handle it ourself, disable this jetty feature
+		Dictionary<String, Object> properties = new Hashtable<>();
+		properties.put(SERVICE_DESCRIPTION, "Aries CDI - OpenWebBeans SeContainerInitializer Factory");
+		properties.put(SERVICE_VENDOR, "Apache Software Foundation");
+		properties.put("aries.cdi.spi", "OpenWebBeans");
+
+		_seContainerInitializer = bundleContext.registerService(
+			SeContainerInitializer.class, new OWBSeContainerInitializerFactory(bundleContext), properties);
+
+		if (webEnabled) {
+			properties = new Hashtable<>();
+			properties.put(CDI_EXTENSION_PROPERTY, "aries.cdi.http");
+			properties.put(SERVICE_DESCRIPTION, "Aries CDI - OpenWebBeans Web Extension Factory");
+			properties.put(SERVICE_VENDOR, "Apache Software Foundation");
+
+			_webExtension = bundleContext.registerService(
+				Extension.class, new org.apache.aries.cdi.owb.web.WebExtensionFactory(), properties);
+		}
+	}
+
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		_seContainerInitializer.unregister();
+		if (_webExtension != null) {
+			_webExtension.unregister();
+		}
+	}
+
+	private ServiceRegistration<SeContainerInitializer> _seContainerInitializer;
+	private ServiceRegistration<Extension> _webExtension;
+
+}
diff --git a/cdi-owb/src/main/java/org/apache/aries/cdi/owb/CdiScannerService.java b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/CdiScannerService.java
new file mode 100644
index 0000000..b0dcb30
--- /dev/null
+++ b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/CdiScannerService.java
@@ -0,0 +1,62 @@
+package org.apache.aries.cdi.owb;
+
+import static java.util.Collections.*;
+
+import java.net.URL;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.webbeans.corespi.se.DefaultBDABeansXmlScanner;
+import org.apache.webbeans.spi.BDABeansXmlScanner;
+import org.apache.webbeans.spi.ScannerService;
+
+// todo: bda support
+@SuppressWarnings("deprecation")
+public class CdiScannerService implements ScannerService {
+	private final Set<Class<?>> classes;
+	private final Set<URL> beansXml;
+	private BDABeansXmlScanner bdaBeansXmlScanner = new DefaultBDABeansXmlScanner();
+
+	public CdiScannerService(final Set<Class<?>> beanClassNames,
+							final Collection<URL> beansXml) {
+		this.classes = beanClassNames;
+		this.beansXml = beansXml == null ? emptySet() : new HashSet<>(beansXml);
+	}
+
+	@Override
+	public void init(final Object object) {
+		// no-op
+	}
+
+	@Override
+	public void scan() {
+		// we already scanned
+	}
+
+	@Override
+	public void release() {
+		// no-op
+	}
+
+	@Override
+	public Set<URL> getBeanXmls() {
+		return beansXml;
+	}
+
+	@Override
+	public Set<Class<?>> getBeanClasses() {
+		return classes;
+	}
+
+	@Override
+	public boolean isBDABeansXmlScanningEnabled() {
+		return false;
+	}
+
+	@Override
+	public BDABeansXmlScanner getBDABeansXmlScanner() {
+		return bdaBeansXmlScanner;
+	}
+
+}
\ No newline at end of file
diff --git a/cdi-owb/src/main/java/org/apache/aries/cdi/owb/OSGiDefiningClassService.java b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/OSGiDefiningClassService.java
new file mode 100644
index 0000000..62c5e71
--- /dev/null
+++ b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/OSGiDefiningClassService.java
@@ -0,0 +1,72 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.owb;
+
+import java.lang.reflect.Modifier;
+
+import org.apache.aries.cdi.spi.loader.SpiLoader;
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.proxy.Unsafe;
+import org.apache.webbeans.spi.DefiningClassService;
+
+public class OSGiDefiningClassService implements DefiningClassService {
+	private final Unsafe unsafe;
+	private final ClassLoaders classloaders;
+
+	public OSGiDefiningClassService(final WebBeansContext context) {
+		this.unsafe = new Unsafe();
+		this.classloaders = context.getService(ClassLoaders.class);
+	}
+
+	@Override
+	public ClassLoader getProxyClassLoader(final Class<?> aClass) {
+		return classloaders.loader;
+	}
+
+	/**
+	 * We prefer to register the proxy in the dedicated cdi classloader but due to classloader rules it is not always possible.
+	 * In such cases we try to use unsafe.
+	 *
+	 * @param name proxy name.
+	 * @param bytes proxy bytecode.
+	 * @param proxied proxied class.
+	 * @param <T> proxied type.
+	 * @return the proxy class instance.
+	 */
+	@Override
+	public <T> Class<T> defineAndLoad(final String name, final byte[] bytes, final Class<T> proxied) {
+		if (requiresUnsafe(proxied)) { // todo: today we don't really support that
+			final ClassLoader classLoader = proxied.getClassLoader();
+			if (classLoader != classloaders.bundleLoader) {
+				// todo: log a warning?
+			}
+			return unsafe.defineAndLoadClass(classLoader, name, bytes);
+		}
+		return (Class<T>) classloaders.loader.getOrRegister(name, bytes, proxied.getPackage(), proxied.getProtectionDomain());
+	}
+
+	private boolean requiresUnsafe(final Class<?> aClass) {
+		return !Modifier.isPublic(aClass.getModifiers());
+	}
+
+	public static class ClassLoaders {
+		private final ClassLoader bundleLoader;
+		private final SpiLoader loader;
+
+		public ClassLoaders(final ClassLoader bundleLoader, final SpiLoader loader) {
+			this.bundleLoader = bundleLoader;
+			this.loader = loader;
+		}
+	}
+}
diff --git a/cdi-owb/src/main/java/org/apache/aries/cdi/owb/OWBSeContainerInitializer.java b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/OWBSeContainerInitializer.java
new file mode 100644
index 0000000..f37abdb
--- /dev/null
+++ b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/OWBSeContainerInitializer.java
@@ -0,0 +1,357 @@
+package org.apache.aries.cdi.owb;
+
+import static java.util.Collections.list;
+import static java.util.Objects.requireNonNull;
+import static org.apache.aries.cdi.spi.Keys.BEANS_XML_PROPERTY;
+import static org.apache.aries.cdi.spi.Keys.BUNDLECONTEXT_PROPERTY;
+
+import java.io.IOException;
+import java.lang.annotation.Annotation;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Properties;
+import java.util.Set;
+
+import javax.enterprise.inject.Instance;
+import javax.enterprise.inject.se.SeContainer;
+import javax.enterprise.inject.se.SeContainerInitializer;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.Extension;
+import javax.enterprise.util.TypeLiteral;
+
+import org.apache.aries.cdi.spi.loader.SpiLoader;
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.config.WebBeansFinder;
+import org.apache.webbeans.corespi.DefaultSingletonService;
+import org.apache.webbeans.portable.events.ExtensionLoader;
+import org.apache.webbeans.spi.ApplicationBoundaryService;
+import org.apache.webbeans.spi.ContainerLifecycle;
+import org.apache.webbeans.spi.ContextsService;
+import org.apache.webbeans.spi.ConversationService;
+import org.apache.webbeans.spi.DefiningClassService;
+import org.apache.webbeans.spi.ScannerService;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.namespace.PackageNamespace;
+import org.osgi.framework.wiring.BundleCapability;
+import org.osgi.framework.wiring.BundleWire;
+import org.osgi.framework.wiring.BundleWiring;
+
+public class OWBSeContainerInitializer extends SeContainerInitializer {
+
+	public OWBSeContainerInitializer(BundleContext bundleContext) {
+		owbBundleContext = bundleContext;
+	}
+
+	@Override
+	public SeContainerInitializer addBeanClasses(Class<?>... classes) {
+		beanClasses.addAll(Arrays.asList(classes));
+		return this;
+	}
+
+	@Override
+	public SeContainerInitializer addPackages(Class<?>... packageClasses) {
+		// TODO Auto-generated method stub
+		return this;
+	}
+
+	@Override
+	public SeContainerInitializer addPackages(boolean scanRecursively, Class<?>... packageClasses) {
+		// TODO Auto-generated method stub
+		return this;
+	}
+
+	@Override
+	public SeContainerInitializer addPackages(Package... packages) {
+		// TODO Auto-generated method stub
+		return this;
+	}
+
+	@Override
+	public SeContainerInitializer addPackages(boolean scanRecursively, Package... packages) {
+		// TODO Auto-generated method stub
+		return this;
+	}
+
+	@Override
+	public SeContainerInitializer addExtensions(Extension... extensions) {
+		this.extensions.addAll(Arrays.asList(extensions));
+		return this;
+	}
+
+	@Override
+	public SeContainerInitializer addExtensions(Class<? extends Extension>... extensions) {
+		this.extensionClasses.addAll(Arrays.asList(extensions));
+		return this;
+	}
+
+	@Override
+	public SeContainerInitializer enableInterceptors(Class<?>... interceptorClasses) {
+		// TODO Auto-generated method stub
+		return this;
+	}
+
+	@Override
+	public SeContainerInitializer enableDecorators(Class<?>... decoratorClasses) {
+		// TODO Auto-generated method stub
+		return this;
+	}
+
+	@Override
+	public SeContainerInitializer selectAlternatives(Class<?>... alternativeClasses) {
+		// TODO Auto-generated method stub
+		return this;
+	}
+
+	@Override
+	public SeContainerInitializer selectAlternativeStereotypes(
+		Class<? extends Annotation>... alternativeStereotypeClasses) {
+
+		// TODO Auto-generated method stub
+		return this;
+	}
+
+	@Override
+	public SeContainerInitializer addProperty(String key, Object value) {
+		properties.putIfAbsent(key, value);
+		return this;
+	}
+
+	@Override
+	public SeContainerInitializer setProperties(Map<String, Object> properties) {
+		properties.putAll(properties);
+		return this;
+	}
+
+	@Override
+	public SeContainerInitializer disableDiscovery() {
+		// TODO Auto-generated method stub
+		return this;
+	}
+
+	@Override
+	public SeContainerInitializer setClassLoader(ClassLoader classLoader) {
+		this.classLoader = (SpiLoader)classLoader;
+		return this;
+	}
+
+	@Override
+	@SuppressWarnings("unchecked")
+	public SeContainer initialize() {
+		requireNonNull(classLoader).handleResources(
+			s -> (s != null) && s.startsWith("META-INF/openwebbeans/"),
+			this::getResources
+		).findClass(
+			s -> (s != null) && (s.startsWith("org.apache.webbeans.") || s.startsWith("sun.misc.")),
+			this::loadClass);
+
+		classLoader.getBundles().add(owbBundleContext.getBundle());
+
+		BundleWiring bundleWiring = owbBundleContext.getBundle().adapt(BundleWiring.class);
+		List<BundleWire> requiredWires = bundleWiring.getRequiredWires(PackageNamespace.PACKAGE_NAMESPACE);
+
+		for (BundleWire bundleWire : requiredWires) {
+			BundleCapability capability = bundleWire.getCapability();
+			Map<String, Object> attributes = capability.getAttributes();
+			String packageName = (String)attributes.get(PackageNamespace.PACKAGE_NAMESPACE);
+			if (!packageName.startsWith("org.apache.webbeans.")) {
+				continue;
+			}
+
+			Bundle wireBundle = bundleWire.getProvider().getBundle();
+			if (!classLoader.getBundles().contains(wireBundle)) {
+				classLoader.getBundles().add(wireBundle);
+			}
+		}
+
+		Thread currentThread = Thread.currentThread();
+		ClassLoader current = currentThread.getContextClassLoader();
+
+		try {
+			currentThread.setContextClassLoader(classLoader);
+			clientBundleContext = requireNonNull(BundleContext.class.cast(properties.get(BUNDLECONTEXT_PROPERTY)));
+			startObject = clientBundleContext;
+
+			final Map<Class<?>, Object> services = new HashMap<>();
+			properties.setProperty(
+				DefiningClassService.class.getName(),
+				OSGiDefiningClassService.class.getName());
+
+			services.put(
+				OSGiDefiningClassService.ClassLoaders.class,
+				new OSGiDefiningClassService.ClassLoaders(current, classLoader));
+			services.put(
+				ApplicationBoundaryService.class,
+				new OsgiApplicationBoundaryService(current, classLoader));
+			services.put(
+				ScannerService.class,
+				new CdiScannerService(beanClasses, Collection.class.cast(properties.get(BEANS_XML_PROPERTY))));
+			services.put(BundleContext.class, clientBundleContext);
+
+			if (Activator.webEnabled) {
+				// Web mode - minimal set, see META-INF/openwebbeans/openwebbeans.properties in openwebbeans-web for details
+				// todo: enable to not use web?
+				properties.setProperty(
+					ContainerLifecycle.class.getName(),
+					org.apache.webbeans.web.lifecycle.WebContainerLifecycle.class.getName());
+				properties.setProperty(
+					ContextsService.class.getName(),
+					org.apache.webbeans.web.context.WebContextsService.class.getName());
+				properties.setProperty(
+					ConversationService.class.getName(),
+					org.apache.webbeans.web.context.WebConversationService.class.getName());
+
+				startObject = new org.apache.aries.cdi.owb.web.UpdatableServletContext(bootstrap, clientBundleContext);
+				services.put(org.apache.aries.cdi.owb.web.UpdatableServletContext.class, startObject);
+			}
+
+			Optional.ofNullable(clientBundleContext.getBundle().getHeaders()).ifPresent(
+				headers -> list(headers.elements()).stream()
+					.filter(it -> it.startsWith("org.apache.openwebbeans."))
+					.forEach(key -> properties.setProperty(key, headers.get(key))
+				)
+			);
+
+			bootstrap = new WebBeansContext(services, properties) {
+				private final ExtensionLoader overridenExtensionLoader = new ExtensionLoader(this) {
+					@Override
+					public void loadExtensionServices() {
+						extensions.removeIf(ext -> {addExtension(ext); return true;});
+					}
+				};
+
+				@Override
+				public ExtensionLoader getExtensionLoader() {
+					return overridenExtensionLoader;
+				}
+			};
+
+			final DefaultSingletonService singletonService = getSingletonService();
+			singletonService.register(classLoader, bootstrap);
+			final ContainerLifecycle lifecycle = bootstrap.getService(ContainerLifecycle.class);
+			lifecycle.startApplication(startObject);
+
+			return new OWBSeContainer();
+		}
+		finally {
+			currentThread.setContextClassLoader(current);
+		}
+	}
+
+	protected Enumeration<URL> getResources(String name) {
+		try {
+			return WebBeansContext.class.getClassLoader().getResources(name);
+		} catch (IOException e) {
+			throwsUnchecked(e);
+			return null; // unreachable
+		}
+	}
+
+	protected Class<?> loadClass(String name) {
+		try {
+			return WebBeansContext.class.getClassLoader().loadClass(name);
+		} catch (ClassNotFoundException e) {
+			throwsUnchecked(e);
+			return null; // unreachable
+		}
+	}
+
+	protected DefaultSingletonService getSingletonService() {
+		return DefaultSingletonService.class.cast(WebBeansFinder.getSingletonService());
+	}
+
+	@SuppressWarnings("unchecked")
+	private static <E extends Throwable> void throwsUnchecked(Throwable throwable) throws E {
+		throw (E) throwable;
+	}
+
+	private volatile WebBeansContext bootstrap;
+	private volatile BundleContext clientBundleContext;
+	private volatile SpiLoader classLoader;
+	private final Set<Class<?>> beanClasses = new HashSet<>();
+	private final List<Extension> extensions = new ArrayList<>();
+	private final List<Class<? extends Extension>> extensionClasses = new ArrayList<>();
+	private final BundleContext owbBundleContext;
+	private final Properties properties = new Properties();
+	private Object startObject;
+
+	private class OWBSeContainer implements SeContainer {
+
+		private volatile boolean running = true;
+
+		@Override
+		public void close() {
+			running = false;
+			Thread currentThread = Thread.currentThread();
+			ClassLoader current = currentThread.getContextClassLoader();
+			try {
+				currentThread.setContextClassLoader(requireNonNull(classLoader));
+				bootstrap.getService(ContainerLifecycle.class).stopApplication(startObject);
+			}
+			finally {
+				currentThread.setContextClassLoader(current);
+			}
+		}
+
+		@Override
+		public Instance<Object> select(Annotation... qualifiers) {
+			return bootstrap.getBeanManagerImpl().createInstance().select(qualifiers);
+		}
+
+		@Override
+		public <U> Instance<U> select(Class<U> subtype, Annotation... qualifiers) {
+			return bootstrap.getBeanManagerImpl().createInstance().select(subtype, qualifiers);
+		}
+
+		@Override
+		public <U> Instance<U> select(TypeLiteral<U> subtype, Annotation... qualifiers) {
+			return bootstrap.getBeanManagerImpl().createInstance().select(subtype, qualifiers);
+		}
+
+		@Override
+		public boolean isUnsatisfied() {
+			return bootstrap.getBeanManagerImpl().createInstance().isUnsatisfied();
+		}
+
+		@Override
+		public boolean isAmbiguous() {
+			return bootstrap.getBeanManagerImpl().createInstance().isAmbiguous();
+		}
+
+		@Override
+		public void destroy(Object instance) {
+			bootstrap.getBeanManagerImpl().createInstance().destroy(instance);
+		}
+
+		@Override
+		public Iterator<Object> iterator() {
+			return bootstrap.getBeanManagerImpl().createInstance().iterator();
+		}
+
+		@Override
+		public boolean isRunning() {
+			return running;
+		}
+
+		@Override
+		public BeanManager getBeanManager() {
+			return bootstrap.getBeanManagerImpl();
+		}
+
+		@Override
+		public Object get() {
+			return bootstrap.getBeanManagerImpl().createInstance().get();
+		}
+
+	}
+
+}
diff --git a/cdi-owb/src/main/java/org/apache/aries/cdi/owb/OWBSeContainerInitializerFactory.java b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/OWBSeContainerInitializerFactory.java
new file mode 100644
index 0000000..87e1b7c
--- /dev/null
+++ b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/OWBSeContainerInitializerFactory.java
@@ -0,0 +1,44 @@
+/**
+ * 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.owb;
+
+import javax.enterprise.inject.se.SeContainerInitializer;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.PrototypeServiceFactory;
+import org.osgi.framework.ServiceRegistration;
+
+public class OWBSeContainerInitializerFactory implements PrototypeServiceFactory<SeContainerInitializer> {
+
+	public OWBSeContainerInitializerFactory(BundleContext bundleContext) {
+		this.bundleContext = bundleContext;
+	}
+
+	@Override
+	public SeContainerInitializer getService(
+		Bundle bundle, ServiceRegistration<SeContainerInitializer> registration) {
+
+		return new OWBSeContainerInitializer(bundleContext);
+	}
+
+	@Override
+	public void ungetService(
+		Bundle bundle, ServiceRegistration<SeContainerInitializer> registration, SeContainerInitializer service) {
+	}
+
+	private final BundleContext bundleContext;
+
+}
diff --git a/cdi-owb/src/main/java/org/apache/aries/cdi/owb/OsgiApplicationBoundaryService.java b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/OsgiApplicationBoundaryService.java
new file mode 100644
index 0000000..a9da88f
--- /dev/null
+++ b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/OsgiApplicationBoundaryService.java
@@ -0,0 +1,44 @@
+/**
+ * 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.owb;
+
+import org.apache.webbeans.spi.ApplicationBoundaryService;
+
+public class OsgiApplicationBoundaryService implements ApplicationBoundaryService {
+    private final ClassLoader bundleLoader;
+    private final ClassLoader loader;
+
+    public OsgiApplicationBoundaryService(final ClassLoader bundleLoader, final ClassLoader loader) {
+        this.bundleLoader = bundleLoader;
+        this.loader = loader;
+    }
+
+    @Override
+    public ClassLoader getApplicationClassLoader() {
+        return bundleLoader;
+    }
+
+    @Override
+    public ClassLoader getBoundaryClassLoader(final Class aClass) {
+        final ClassLoader classToProxyCl = aClass.getClassLoader();
+        if (classToProxyCl == null || classToProxyCl == loader) {
+            return loader;
+        }
+        if (classToProxyCl == bundleLoader) {
+            return classToProxyCl;
+        }
+        // todo: refine if needed
+        return classToProxyCl;
+    }
+}
diff --git a/cdi-owb/src/main/java/org/apache/aries/cdi/owb/package-info.java b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/package-info.java
new file mode 100644
index 0000000..063d4c7
--- /dev/null
+++ b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/package-info.java
@@ -0,0 +1,23 @@
+/**
+ * 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.
+ */
+
+@org.osgi.annotation.bundle.Capability(
+	attribute = {
+		"objectClass:List<String>=javax.enterprise.inject.se.SeContainerInitializer",
+		"aries.cdi.spi=OpenWebBeans"
+	},
+	namespace = org.osgi.namespace.service.ServiceNamespace.SERVICE_NAMESPACE
+)
+@org.osgi.service.cdi.annotations.RequireCDIImplementation
+package org.apache.aries.cdi.owb;
diff --git a/cdi-owb/src/main/java/org/apache/aries/cdi/owb/web/UpdatableServletContext.java b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/web/UpdatableServletContext.java
new file mode 100644
index 0000000..a732a3e
--- /dev/null
+++ b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/web/UpdatableServletContext.java
@@ -0,0 +1,67 @@
+/**
+ * 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.owb.web;
+
+import static java.util.Optional.ofNullable;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Proxy;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletContextEvent;
+
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.web.lifecycle.test.MockServletContext;
+import org.osgi.framework.BundleContext;
+
+@SuppressWarnings("serial")
+public class UpdatableServletContext extends ServletContextEvent {
+	private final WebBeansContext bootstrap;
+	private final BundleContext bundleContext;
+	private final ServletContext context;
+	private ServletContext delegate;
+
+	public UpdatableServletContext(WebBeansContext bootstrap, BundleContext bundleContext) {
+		super(new MockServletContext());
+		this.bootstrap = bootstrap;
+		this.bundleContext = bundleContext;
+
+		// ensure we can switch the impl and keep ServletContextBean working with an updated context
+		this.context = ServletContext.class.cast(Proxy.newProxyInstance(ServletContext.class.getClassLoader(),
+				new Class<?>[]{ServletContext.class},
+				(proxy, method, args) -> {
+					try {
+						return method.invoke(ofNullable(delegate).orElseGet(UpdatableServletContext.super::getServletContext), args);
+					}
+					catch (final InvocationTargetException ite) {
+						throw ite.getTargetException();
+					}
+				}));
+	}
+
+	public void setDelegate(final ServletContext delegate) {
+		this.delegate = delegate;
+		this.delegate.setAttribute(BundleContext.class.getName(), bundleContext);
+		this.delegate.setAttribute(WebBeansContext.class.getName(), bootstrap);
+	}
+
+	public ServletContext getOriginal() {
+		return super.getServletContext();
+	}
+
+	@Override
+	public ServletContext getServletContext() {
+		return context;
+	}
+}
diff --git a/cdi-owb/src/main/java/org/apache/aries/cdi/owb/web/WebExtension.java b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/web/WebExtension.java
new file mode 100644
index 0000000..d07a618
--- /dev/null
+++ b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/web/WebExtension.java
@@ -0,0 +1,367 @@
+/**
+ * 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.owb.web;
+
+import static java.util.Collections.list;
+import static javax.interceptor.Interceptor.Priority.LIBRARY_AFTER;
+import static org.osgi.framework.Constants.SERVICE_DESCRIPTION;
+import static org.osgi.framework.Constants.SERVICE_RANKING;
+import static org.osgi.framework.Constants.SERVICE_VENDOR;
+import static org.osgi.namespace.extender.ExtenderNamespace.EXTENDER_NAMESPACE;
+import static org.osgi.service.cdi.CDIConstants.CDI_CAPABILITY_NAME;
+import static org.osgi.service.http.whiteboard.HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_SELECT;
+import static org.osgi.service.http.whiteboard.HttpWhiteboardConstants.HTTP_WHITEBOARD_LISTENER;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Dictionary;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import javax.annotation.Priority;
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.AfterDeploymentValidation;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.BeforeShutdown;
+import javax.enterprise.inject.spi.Extension;
+import javax.enterprise.inject.spi.ProcessAnnotatedType;
+import javax.enterprise.inject.spi.WithAnnotations;
+import javax.servlet.Filter;
+import javax.servlet.Servlet;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+import javax.servlet.ServletRequestListener;
+import javax.servlet.annotation.MultipartConfig;
+import javax.servlet.annotation.WebFilter;
+import javax.servlet.annotation.WebListener;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpSessionListener;
+
+import org.apache.aries.cdi.extra.propertytypes.HttpWhiteboardContextSelect;
+import org.apache.aries.cdi.extra.propertytypes.HttpWhiteboardFilterAsyncSupported;
+import org.apache.aries.cdi.extra.propertytypes.HttpWhiteboardFilterDispatcher;
+import org.apache.aries.cdi.extra.propertytypes.HttpWhiteboardFilterName;
+import org.apache.aries.cdi.extra.propertytypes.HttpWhiteboardFilterPattern;
+import org.apache.aries.cdi.extra.propertytypes.HttpWhiteboardFilterServlet;
+import org.apache.aries.cdi.extra.propertytypes.HttpWhiteboardListener;
+import org.apache.aries.cdi.extra.propertytypes.HttpWhiteboardServletAsyncSupported;
+import org.apache.aries.cdi.extra.propertytypes.HttpWhiteboardServletMultipart;
+import org.apache.aries.cdi.extra.propertytypes.HttpWhiteboardServletName;
+import org.apache.aries.cdi.extra.propertytypes.HttpWhiteboardServletPattern;
+import org.apache.aries.cdi.extra.propertytypes.ServiceDescription;
+import org.apache.aries.cdi.extra.propertytypes.ServiceRanking;
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.spi.ContainerLifecycle;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.framework.wiring.BundleCapability;
+import org.osgi.framework.wiring.BundleRequirement;
+import org.osgi.framework.wiring.BundleWire;
+import org.osgi.framework.wiring.BundleWiring;
+import org.osgi.service.cdi.annotations.Service;
+
+public class WebExtension implements Extension {
+
+	public WebExtension(Bundle bundle) {
+		_bundle = bundle;
+	}
+
+	<X> void processWebFilter(@Observes @WithAnnotations(WebFilter.class) ProcessAnnotatedType<X> pat) {
+		final AnnotatedType<X> annotatedType = pat.getAnnotatedType();
+
+		WebFilter webFilter = annotatedType.getAnnotation(WebFilter.class);
+
+		final Set<Annotation> annotationsToAdd = new HashSet<>();
+
+		if (!annotatedType.isAnnotationPresent(Service.class)) {
+			annotationsToAdd.add(Service.Literal.of(new Class[] {Filter.class}));
+		}
+
+		if(!annotatedType.isAnnotationPresent(HttpWhiteboardContextSelect.class)) {
+			annotationsToAdd.add(HttpWhiteboardContextSelect.Literal.of(getSelectedContext()));
+		}
+
+		if (!webFilter.description().isEmpty()) {
+			annotationsToAdd.add(ServiceDescription.Literal.of(webFilter.description()));
+		}
+
+		if (!webFilter.filterName().isEmpty()) {
+			annotationsToAdd.add(HttpWhiteboardFilterName.Literal.of(webFilter.filterName()));
+		}
+
+		if (webFilter.servletNames().length > 0) {
+			annotationsToAdd.add(HttpWhiteboardFilterServlet.Literal.of(webFilter.servletNames()));
+		}
+
+		if (webFilter.value().length > 0) {
+			annotationsToAdd.add(HttpWhiteboardFilterPattern.Literal.of(webFilter.value()));
+		}
+		else if (webFilter.urlPatterns().length > 0) {
+			annotationsToAdd.add(HttpWhiteboardFilterPattern.Literal.of(webFilter.urlPatterns()));
+		}
+
+		if (webFilter.dispatcherTypes().length > 0) {
+			annotationsToAdd.add(HttpWhiteboardFilterDispatcher.Literal.of(webFilter.dispatcherTypes()));
+		}
+
+		annotationsToAdd.add(HttpWhiteboardFilterAsyncSupported.Literal.of(webFilter.asyncSupported()));
+
+		if (!annotationsToAdd.isEmpty()) {
+			annotationsToAdd.forEach(pat.configureAnnotatedType()::add);
+		}
+	}
+
+	<X> void processWebListener(@Observes @WithAnnotations(WebListener.class) ProcessAnnotatedType<X> pat) {
+		final AnnotatedType<X> annotatedType = pat.getAnnotatedType();
+
+		WebListener webListener = annotatedType.getAnnotation(WebListener.class);
+
+		final Set<Annotation> annotationsToAdd = new HashSet<>();
+
+		if (!annotatedType.isAnnotationPresent(Service.class)) {
+			List<Class<?>> listenerTypes = new ArrayList<>();
+
+			Class<X> javaClass = annotatedType.getJavaClass();
+
+			if (javax.servlet.ServletContextListener.class.isAssignableFrom(javaClass)) {
+				listenerTypes.add(javax.servlet.ServletContextListener.class);
+			}
+			if (javax.servlet.ServletContextAttributeListener.class.isAssignableFrom(javaClass)) {
+				listenerTypes.add(javax.servlet.ServletContextAttributeListener.class);
+			}
+			if (javax.servlet.ServletRequestListener.class.isAssignableFrom(javaClass)) {
+				listenerTypes.add(javax.servlet.ServletRequestListener.class);
+			}
+			if (javax.servlet.ServletRequestAttributeListener.class.isAssignableFrom(javaClass)) {
+				listenerTypes.add(javax.servlet.ServletRequestAttributeListener.class);
+			}
+			if (javax.servlet.http.HttpSessionListener.class.isAssignableFrom(javaClass)) {
+				listenerTypes.add(javax.servlet.http.HttpSessionListener.class);
+			}
+			if (javax.servlet.http.HttpSessionAttributeListener.class.isAssignableFrom(javaClass)) {
+				listenerTypes.add(javax.servlet.http.HttpSessionAttributeListener.class);
+			}
+			if (javax.servlet.http.HttpSessionIdListener.class.isAssignableFrom(javaClass)) {
+				listenerTypes.add(javax.servlet.http.HttpSessionIdListener.class);
+			}
+
+			annotationsToAdd.add(Service.Literal.of(listenerTypes.toArray(new Class<?>[0])));
+		}
+
+		if(!annotatedType.isAnnotationPresent(HttpWhiteboardContextSelect.class)) {
+			annotationsToAdd.add(HttpWhiteboardContextSelect.Literal.of(getSelectedContext()));
+		}
+
+		annotationsToAdd.add(HttpWhiteboardListener.Literal.INSTANCE);
+
+		if (!webListener.value().isEmpty()) {
+			annotationsToAdd.add(ServiceDescription.Literal.of(webListener.value()));
+		}
+
+		if (!annotationsToAdd.isEmpty()) {
+			annotationsToAdd.forEach(pat.configureAnnotatedType()::add);
+		}
+	}
+
+	<X> void processWebServlet(@Observes @WithAnnotations(WebServlet.class) ProcessAnnotatedType<X> pat) {
+		final AnnotatedType<X> annotatedType = pat.getAnnotatedType();
+
+		WebServlet webServlet = annotatedType.getAnnotation(WebServlet.class);
+
+		final Set<Annotation> annotationsToAdd = new HashSet<>();
+
+		if (!annotatedType.isAnnotationPresent(Service.class)) {
+			annotationsToAdd.add(Service.Literal.of(new Class[] {Servlet.class}));
+		}
+
+		if(!annotatedType.isAnnotationPresent(HttpWhiteboardContextSelect.class)) {
+			annotationsToAdd.add(HttpWhiteboardContextSelect.Literal.of(getSelectedContext()));
+		}
+
+		if (!webServlet.name().isEmpty()) {
+			annotationsToAdd.add(HttpWhiteboardServletName.Literal.of(webServlet.name()));
+		}
+
+		if (webServlet.value().length > 0) {
+			annotationsToAdd.add(HttpWhiteboardServletPattern.Literal.of(webServlet.value()));
+		}
+		else if (webServlet.urlPatterns().length > 0) {
+			annotationsToAdd.add(HttpWhiteboardServletPattern.Literal.of(webServlet.urlPatterns()));
+		}
+
+		annotationsToAdd.add(ServiceRanking.Literal.of(webServlet.loadOnStartup()));
+
+		// TODO Howto: INIT PARAMS ???
+
+		annotationsToAdd.add(HttpWhiteboardServletAsyncSupported.Literal.of(webServlet.asyncSupported()));
+
+		if (!webServlet.description().isEmpty()) {
+			annotationsToAdd.add(ServiceDescription.Literal.of(webServlet.description()));
+		}
+
+		MultipartConfig multipartConfig = annotatedType.getAnnotation(MultipartConfig.class);
+
+		if (multipartConfig != null) {
+			annotationsToAdd.add(HttpWhiteboardServletMultipart.Literal.of(true, multipartConfig.fileSizeThreshold(), multipartConfig.location(), multipartConfig.maxFileSize(), multipartConfig.maxRequestSize()));
+		}
+
+		// TODO HowTo: ServletSecurity ???
+
+		if (!annotationsToAdd.isEmpty()) {
+			annotationsToAdd.forEach(pat.configureAnnotatedType()::add);
+		}
+	}
+
+	void afterDeploymentValidation(
+		@Observes @Priority(LIBRARY_AFTER + 800)
+		AfterDeploymentValidation adv, BeanManager beanManager) {
+
+		Dictionary<String, Object> properties = new Hashtable<>();
+		properties.put(SERVICE_DESCRIPTION, "Aries CDI - HTTP Portable Extension");
+		properties.put(SERVICE_VENDOR, "Apache Software Foundation");
+		properties.put(HTTP_WHITEBOARD_CONTEXT_SELECT, getSelectedContext());
+		properties.put(HTTP_WHITEBOARD_LISTENER, Boolean.TRUE.toString());
+		properties.put(SERVICE_RANKING, Integer.MAX_VALUE - 100);
+
+		_listenerRegistration = _bundle.getBundleContext().registerService(
+			LISTENER_CLASSES, new CdiListener(WebBeansContext.currentInstance()), properties);
+	}
+
+	void beforeShutdown(@Observes BeforeShutdown bs) {
+		if (_listenerRegistration != null && !destroyed.get()) {
+			try {
+				_listenerRegistration.unregister();
+			}
+			catch (IllegalStateException ise) {
+				// the service was already unregistered.
+			}
+		}
+	}
+
+	private Map<String, Object> getAttributes() {
+		BundleWiring bundleWiring = _bundle.adapt(BundleWiring.class);
+
+		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_CAPABILITY_NAME)) {
+				BundleRequirement requirement = wire.getRequirement();
+				cdiAttributes = requirement.getAttributes();
+				break;
+			}
+		}
+
+		return cdiAttributes;
+	}
+
+	private String getSelectedContext() {
+		if (_contextSelect != null) {
+			return _contextSelect;
+		}
+
+		return _contextSelect = getSelectedContext0();
+	}
+
+	private String getSelectedContext0() {
+		Map<String, Object> attributes = getAttributes();
+
+		if (attributes.containsKey(HTTP_WHITEBOARD_CONTEXT_SELECT)) {
+			return (String)attributes.get(HTTP_WHITEBOARD_CONTEXT_SELECT);
+		}
+
+		Dictionary<String,String> headers = _bundle.getHeaders();
+
+		if (headers.get(WEB_CONTEXT_PATH) != null) {
+			return CONTEXT_PATH_PREFIX + headers.get(WEB_CONTEXT_PATH) + ')';
+		}
+
+		return DEFAULT_CONTEXT_FILTER;
+	}
+
+	private static final String CONTEXT_PATH_PREFIX = "(osgi.http.whiteboard.context.path=";
+	private static final String DEFAULT_CONTEXT_FILTER = "(osgi.http.whiteboard.context.name=default)";
+	private static final String[] LISTENER_CLASSES = new String[] {
+		ServletContextListener.class.getName(),
+		ServletRequestListener.class.getName(),
+		HttpSessionListener.class.getName()
+	};
+	private static final String WEB_CONTEXT_PATH = "Web-ContextPath";
+
+	private final Bundle _bundle;
+	private String _contextSelect;
+	private volatile ServiceRegistration<?> _listenerRegistration;
+	private final AtomicBoolean destroyed = new AtomicBoolean(false);
+
+	private class CdiListener extends org.apache.webbeans.servlet.WebBeansConfigurationListener {
+		private final WebBeansContext webBeansContext;
+
+		private CdiListener(final WebBeansContext webBeansContext) {
+			this.webBeansContext = webBeansContext;
+		}
+
+		@Override
+		public void contextInitialized(ServletContextEvent event) {
+			// update the sce to have the real one in CDI
+			try {
+				final Class<?> usc = event.getServletContext().getClassLoader()
+						.loadClass("org.apache.aries.cdi.container.internal.servlet.UpdatableServletContext");
+				final Object uscInstance = webBeansContext.getService(usc);
+				usc.getMethod("setDelegate", ServletContext.class)
+						.invoke(uscInstance, event.getServletContext());
+
+				// propagate attributes from the temporary sc
+				final ServletContext original = ServletContext.class.cast(usc.getMethod("getOriginal").invoke(uscInstance));
+				list(original.getAttributeNames())
+					.forEach(attr -> event.getServletContext().setAttribute(attr, original.getAttribute(attr)));
+			}
+			catch (final ClassNotFoundException | NoSuchMethodException | IllegalAccessException cnfe) {
+				// no-op, weirdly using another extender impl
+			}
+			catch (final InvocationTargetException ite) {
+				throw new IllegalStateException(ite.getTargetException());
+			}
+
+			// already started in the activator so let's skip it, just ensure it is skipped if re-called
+			event.getServletContext().setAttribute(getClass().getName(), true);
+			if (lifeCycle == null) {
+				lifeCycle = webBeansContext.getService(ContainerLifecycle.class);
+			}
+		}
+
+		@Override
+		public void contextDestroyed(ServletContextEvent sce) {
+			try {
+				super.contextDestroyed(sce);
+			}
+			finally {
+				destroyed.set(true);
+			}
+		}
+	}
+}
diff --git a/cdi-owb/src/main/java/org/apache/aries/cdi/owb/web/WebExtensionFactory.java b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/web/WebExtensionFactory.java
new file mode 100644
index 0000000..8d1d045
--- /dev/null
+++ b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/web/WebExtensionFactory.java
@@ -0,0 +1,37 @@
+/**
+ * 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.owb.web;
+
+import javax.enterprise.inject.spi.Extension;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.PrototypeServiceFactory;
+import org.osgi.framework.ServiceRegistration;
+
+public class WebExtensionFactory implements PrototypeServiceFactory<Extension> {
+
+	@Override
+	public Extension getService(
+		Bundle bundle, ServiceRegistration<Extension> registration) {
+
+		return new WebExtension(bundle);
+	}
+
+	@Override
+	public void ungetService(
+		Bundle bundle, ServiceRegistration<Extension> registration, Extension service) {
+	}
+
+}
diff --git a/cdi-owb/src/main/java/org/apache/aries/cdi/owb/web/package-info.java b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/web/package-info.java
new file mode 100644
index 0000000..2312388
--- /dev/null
+++ b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/web/package-info.java
@@ -0,0 +1,45 @@
+/**
+ * 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.
+ */
+
+@org.osgi.annotation.bundle.Capability(
+	attribute = "objectClass:List<String>=javax.enterprise.inject.spi.Extension",
+	namespace = SERVICE_NAMESPACE
+)
+@org.osgi.annotation.bundle.Capability(
+	name = "aries.cdi.http",
+	namespace = CDI_EXTENSION_PROPERTY,
+	uses= {
+		javax.annotation.Priority.class,
+		javax.enterprise.context.spi.Context.class,
+		javax.enterprise.event.Observes.class,
+		javax.enterprise.inject.spi.Extension.class,
+		javax.servlet.ServletContextListener.class,
+		javax.servlet.http.HttpSessionListener.class
+	},
+	version = "1.0.0"
+)
+//Deliberately depend on Http Whiteboard version 1.0.0 (the spec annotation starts at 1.1.0)
+@org.osgi.annotation.bundle.Requirement(
+	name = "osgi.http",
+	namespace = IMPLEMENTATION_NAMESPACE,
+	version = "1.0.0",
+	resolution = OPTIONAL
+)
+@org.osgi.service.cdi.annotations.RequireCDIImplementation
+package org.apache.aries.cdi.owb.web;
+
+import static org.osgi.annotation.bundle.Requirement.Resolution.OPTIONAL;
+import static org.osgi.namespace.implementation.ImplementationNamespace.IMPLEMENTATION_NAMESPACE;
+import static org.osgi.namespace.service.ServiceNamespace.SERVICE_NAMESPACE;
+import static org.osgi.service.cdi.CDIConstants.CDI_EXTENSION_PROPERTY;
diff --git a/pom.xml b/pom.xml
index 8768ef8..a5958da 100644
--- a/pom.xml
+++ b/pom.xml
@@ -37,8 +37,9 @@
 		<jsp.version>2.0</jsp.version>
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 		<surefire.version>2.12</surefire.version>
-		<slf4j.version>1.7.25</slf4j.version>
+		<slf4j.version>1.7.28</slf4j.version>
 		<weld.version>3.0.5.Final</weld.version>
+		<owb.version>2.0.13-SNAPSHOT</owb.version>
 	</properties>
 
 	<licenses>
@@ -62,6 +63,7 @@
 		<module>cdi-extension-el-jsp</module>
 		<module>cdi-extension-http</module>
 		<module>cdi-extension-jndi</module>
+		<module>cdi-owb</module>
 		<module>cdi-bom</module>
 		<module>cdi-itests</module>
 		<module>cdi-executable</module>


[aries-cdi] 27/27: re-resolve

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rotty3000 pushed a commit to branch rotty3000/cdi-spi
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit 3c28c8a81da1893994e635155ef34b264cac6bea
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Mon Nov 25 13:39:54 2019 -0500

    re-resolve
    
    Signed-off-by: Raymond Augé <ro...@apache.org>
---
 cdi-executable/owb-executable.bndrun  |  8 ++++----
 cdi-executable/pom.xml                |  2 ++
 cdi-executable/weld-executable.bndrun | 19 ++++++++++---------
 cdi-itests/owb-itest.bndrun           | 14 +++++++-------
 cdi-itests/weld-itest.bndrun          | 16 ++++++++--------
 5 files changed, 31 insertions(+), 28 deletions(-)

diff --git a/cdi-executable/owb-executable.bndrun b/cdi-executable/owb-executable.bndrun
index 82ee3f4..46820c6 100644
--- a/cdi-executable/owb-executable.bndrun
+++ b/cdi-executable/owb-executable.bndrun
@@ -51,10 +51,10 @@
 	openwebbeans-impl;version='[2.0.13,2.0.14)',\
 	openwebbeans-spi;version='[2.0.13,2.0.14)',\
 	openwebbeans-web;version='[2.0.13,2.0.14)',\
-	org.apache.aries.cdi.extender;version='[1.0.3,1.0.4)',\
-	org.apache.aries.cdi.extra;version='[1.0.3,1.0.4)',\
-	org.apache.aries.cdi.owb;version='[1.0.3,1.0.4)',\
-	org.apache.aries.cdi.spi;version='[1.0.3,1.0.4)',\
+	org.apache.aries.cdi.extender;version='[1.1.0,1.1.1)',\
+	org.apache.aries.cdi.extra;version='[1.1.0,1.1.1)',\
+	org.apache.aries.cdi.owb;version='[1.1.0,1.1.1)',\
+	org.apache.aries.cdi.spi;version='[1.1.0,1.1.1)',\
 	org.apache.aries.spifly.dynamic.framework.extension;version='[1.2.0,1.2.1)',\
 	org.apache.felix.configadmin;version='[1.9.10,1.9.11)',\
 	org.apache.felix.gogo.command;version='[1.1.0,1.1.1)',\
diff --git a/cdi-executable/pom.xml b/cdi-executable/pom.xml
index 52607c6..57e17d0 100644
--- a/cdi-executable/pom.xml
+++ b/cdi-executable/pom.xml
@@ -83,6 +83,7 @@
 				<executions>
 					<execution>
 						<id>owb-resolve</id>
+						<phase>package</phase>
 						<goals>
 							<goal>resolve</goal>
 						</goals>
@@ -94,6 +95,7 @@
 					</execution>
 					<execution>
 						<id>weld-resolve</id>
+						<phase>package</phase>
 						<goals>
 							<goal>resolve</goal>
 						</goals>
diff --git a/cdi-executable/weld-executable.bndrun b/cdi-executable/weld-executable.bndrun
index 956b6bc..1c46fa3 100644
--- a/cdi-executable/weld-executable.bndrun
+++ b/cdi-executable/weld-executable.bndrun
@@ -49,8 +49,13 @@
 	osgi.identity;filter:='(osgi.identity=org.jboss.spec.*)'
 
 -runbundles: \
-	org.apache.aries.cdi.extender;version='[1.0.3,1.0.4)',\
-	org.apache.aries.cdi.spi;version='[1.0.3,1.0.4)',\
+	javax.ejb-api;version='[3.2.0,3.2.1)',\
+	javax.enterprise.cdi-api;version='[2.0.0,2.0.1)',\
+	javax.transaction-api;version='[1.2.0,1.2.1)',\
+	jboss-classfilewriter;version='[1.2.3,1.2.4)',\
+	org.apache.aries.cdi.extender;version='[1.1.0,1.1.1)',\
+	org.apache.aries.cdi.spi;version='[1.1.0,1.1.1)',\
+	org.apache.aries.cdi.weld;version='[1.1.0,1.1.1)',\
 	org.apache.aries.spifly.dynamic.framework.extension;version='[1.2.0,1.2.1)',\
 	org.apache.felix.configadmin;version='[1.9.10,1.9.11)',\
 	org.apache.felix.gogo.command;version='[1.1.0,1.1.1)',\
@@ -61,12 +66,8 @@
 	org.apache.geronimo.specs.geronimo-el_2.2_spec;version='[1.1.0,1.1.1)',\
 	org.apache.geronimo.specs.geronimo-interceptor_1.2_spec;version='[1.1.0,1.1.1)',\
 	org.apache.geronimo.specs.geronimo-jcdi_2.0_spec;version='[1.1.0,1.1.1)',\
+	org.jboss.logging.jboss-logging;version='[3.3.2,3.3.3)',\
+	org.jboss.weld.osgi-bundle;version='[3.0.5,3.0.6)',\
 	org.osgi.service.cdi;version='[1.0.0,1.0.1)',\
 	org.osgi.util.function;version='[1.1.0,1.1.1)',\
-	org.osgi.util.promise;version='[1.1.0,1.1.1)',\
-	javax.ejb-api;version='[3.2.0,3.2.1)',\
-	javax.transaction-api;version='[1.2.0,1.2.1)',\
-	jboss-classfilewriter;version='[1.2.3,1.2.4)',\
-	org.apache.aries.cdi.weld;version='[1.0.3,1.0.4)',\
-	org.jboss.logging.jboss-logging;version='[3.3.2,3.3.3)',\
-	org.jboss.weld.osgi-bundle;version='[3.0.5,3.0.6)'
+	org.osgi.util.promise;version='[1.1.0,1.1.1)'
diff --git a/cdi-itests/owb-itest.bndrun b/cdi-itests/owb-itest.bndrun
index e6fb820..5cafc6e 100644
--- a/cdi-itests/owb-itest.bndrun
+++ b/cdi-itests/owb-itest.bndrun
@@ -29,13 +29,13 @@
 	openwebbeans-impl;version='[2.0.13,2.0.14)',\
 	openwebbeans-spi;version='[2.0.13,2.0.14)',\
 	openwebbeans-web;version='[2.0.13,2.0.14)',\
-	org.apache.aries.cdi.extender;version='[1.0.3,1.0.4)',\
-	org.apache.aries.cdi.extension.jndi;version='[1.0.3,1.0.4)',\
-	org.apache.aries.cdi.extension.mp-config;version='[1.0.3,1.0.4)',\
-	org.apache.aries.cdi.extra;version='[1.0.3,1.0.4)',\
-	org.apache.aries.cdi.itests;version='[1.0.3,1.0.4)',\
-	org.apache.aries.cdi.owb;version='[1.0.3,1.0.4)',\
-	org.apache.aries.cdi.spi;version='[1.0.3,1.0.4)',\
+	org.apache.aries.cdi.extender;version='[1.1.0,1.1.1)',\
+	org.apache.aries.cdi.extension.jndi;version='[1.1.0,1.1.1)',\
+	org.apache.aries.cdi.extension.mp-config;version='[1.1.0,1.1.1)',\
+	org.apache.aries.cdi.extra;version='[1.1.0,1.1.1)',\
+	org.apache.aries.cdi.itests;version='[1.1.0,1.1.1)',\
+	org.apache.aries.cdi.owb;version='[1.1.0,1.1.1)',\
+	org.apache.aries.cdi.spi;version='[1.1.0,1.1.1)',\
 	org.apache.aries.jndi.api;version='[1.1.0,1.1.1)',\
 	org.apache.aries.jndi.core;version='[1.0.2,1.0.3)',\
 	org.apache.aries.spifly.dynamic.framework.extension;version='[1.2.0,1.2.1)',\
diff --git a/cdi-itests/weld-itest.bndrun b/cdi-itests/weld-itest.bndrun
index 2c4d345..a88a2b5 100644
--- a/cdi-itests/weld-itest.bndrun
+++ b/cdi-itests/weld-itest.bndrun
@@ -37,14 +37,14 @@
 	javax.ejb-api;version='[3.2.0,3.2.1)',\
 	javax.transaction-api;version='[1.2.0,1.2.1)',\
 	jboss-classfilewriter;version='[1.2.3,1.2.4)',\
-	org.apache.aries.cdi.extender;version='[1.0.3,1.0.4)',\
-	org.apache.aries.cdi.extension.http;version='[1.0.3,1.0.4)',\
-	org.apache.aries.cdi.extension.jndi;version='[1.0.3,1.0.4)',\
-	org.apache.aries.cdi.extension.mp-config;version='[1.0.3,1.0.4)',\
-	org.apache.aries.cdi.extra;version='[1.0.3,1.0.4)',\
-	org.apache.aries.cdi.itests;version='[1.0.3,1.0.4)',\
-	org.apache.aries.cdi.spi;version='[1.0.3,1.0.4)',\
-	org.apache.aries.cdi.weld;version='[1.0.3,1.0.4)',\
+	org.apache.aries.cdi.extender;version='[1.1.0,1.1.1)',\
+	org.apache.aries.cdi.extension.http;version='[1.1.0,1.1.1)',\
+	org.apache.aries.cdi.extension.jndi;version='[1.1.0,1.1.1)',\
+	org.apache.aries.cdi.extension.mp-config;version='[1.1.0,1.1.1)',\
+	org.apache.aries.cdi.extra;version='[1.1.0,1.1.1)',\
+	org.apache.aries.cdi.itests;version='[1.1.0,1.1.1)',\
+	org.apache.aries.cdi.spi;version='[1.1.0,1.1.1)',\
+	org.apache.aries.cdi.weld;version='[1.1.0,1.1.1)',\
 	org.apache.aries.jndi.api;version='[1.1.0,1.1.1)',\
 	org.apache.aries.jndi.core;version='[1.0.2,1.0.3)',\
 	org.apache.aries.spifly.dynamic.framework.extension;version='[1.2.0,1.2.1)',\


[aries-cdi] 06/27: rename spi loader

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rotty3000 pushed a commit to branch rotty3000/cdi-spi
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit 744582bf4d3eb9685f7509d0ee3f509eddbe58e2
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Fri Nov 22 11:43:14 2019 -0500

    rename spi loader
    
    Signed-off-by: Raymond Augé <ro...@apache.org>
---
 .../aries/cdi/spi/loader/{BundleClassLoader.java => SpiLoader.java} | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/cdi-spi/src/main/java/org/apache/aries/cdi/spi/loader/BundleClassLoader.java b/cdi-spi/src/main/java/org/apache/aries/cdi/spi/loader/SpiLoader.java
similarity index 88%
rename from cdi-spi/src/main/java/org/apache/aries/cdi/spi/loader/BundleClassLoader.java
rename to cdi-spi/src/main/java/org/apache/aries/cdi/spi/loader/SpiLoader.java
index c450bbb..69360ad 100644
--- a/cdi-spi/src/main/java/org/apache/aries/cdi/spi/loader/BundleClassLoader.java
+++ b/cdi-spi/src/main/java/org/apache/aries/cdi/spi/loader/SpiLoader.java
@@ -23,7 +23,7 @@ import java.util.function.Predicate;
 
 import org.osgi.framework.Bundle;
 
-public abstract class BundleClassLoader extends ClassLoader {
+public abstract class SpiLoader extends ClassLoader {
 
 	public abstract List<Bundle> getBundles();
 
@@ -31,11 +31,11 @@ public abstract class BundleClassLoader extends ClassLoader {
 		final String proxyClassName, final byte[] proxyBytes,
 		final Package pck, final ProtectionDomain protectionDomain);
 
-	public abstract BundleClassLoader handleResources(
+	public abstract SpiLoader handleResources(
 		final Predicate<String> predicate,
 		final Function<String, Enumeration<URL>> function);
 
-	public abstract BundleClassLoader findClass(
+	public abstract SpiLoader findClass(
 		final Predicate<String> predicate,
 		final Function<String, Class<?>> function);
 


[aries-cdi] 20/27: use release and widen blacklist of jobss APIs

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rotty3000 pushed a commit to branch rotty3000/cdi-spi
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit c9bb4338a191eff901a6e1079f2bb70d6e136c0c
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Sun Nov 24 12:05:06 2019 -0500

    use release and widen blacklist of jobss APIs
    
    Signed-off-by: Raymond Augé <ro...@apache.org>
---
 cdi-executable/owb-executable.bndrun  | 2 +-
 cdi-executable/weld-executable.bndrun | 3 +--
 cdi-itests/owb-itest.bndrun           | 2 +-
 cdi-itests/weld-itest.bndrun          | 2 +-
 pom.xml                               | 2 +-
 5 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/cdi-executable/owb-executable.bndrun b/cdi-executable/owb-executable.bndrun
index ce1b2c1..82ee3f4 100644
--- a/cdi-executable/owb-executable.bndrun
+++ b/cdi-executable/owb-executable.bndrun
@@ -44,7 +44,7 @@
 
 -runblacklist: \
 	osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.weld)',\
-	osgi.identity;filter:='(osgi.identity=org.jboss.spec.javax.el.jboss-el-api_3.0_spec)'
+	osgi.identity;filter:='(osgi.identity=org.jboss.spec.*)'
 
 -runbundles: \
 	javax.servlet.jsp-api;version='[2.3.3,2.3.4)',\
diff --git a/cdi-executable/weld-executable.bndrun b/cdi-executable/weld-executable.bndrun
index 8322ec8..956b6bc 100644
--- a/cdi-executable/weld-executable.bndrun
+++ b/cdi-executable/weld-executable.bndrun
@@ -46,7 +46,7 @@
 
 -runblacklist: \
 	osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.owb)',\
-	osgi.identity;filter:='(osgi.identity=org.jboss.spec.javax.el.jboss-el-api_3.0_spec)'
+	osgi.identity;filter:='(osgi.identity=org.jboss.spec.*)'
 
 -runbundles: \
 	org.apache.aries.cdi.extender;version='[1.0.3,1.0.4)',\
@@ -65,7 +65,6 @@
 	org.osgi.util.function;version='[1.1.0,1.1.1)',\
 	org.osgi.util.promise;version='[1.1.0,1.1.1)',\
 	javax.ejb-api;version='[3.2.0,3.2.1)',\
-	javax.enterprise.cdi-api;version='[2.0.0,2.0.1)',\
 	javax.transaction-api;version='[1.2.0,1.2.1)',\
 	jboss-classfilewriter;version='[1.2.3,1.2.4)',\
 	org.apache.aries.cdi.weld;version='[1.0.3,1.0.4)',\
diff --git a/cdi-itests/owb-itest.bndrun b/cdi-itests/owb-itest.bndrun
index 91fed8e..7636162 100644
--- a/cdi-itests/owb-itest.bndrun
+++ b/cdi-itests/owb-itest.bndrun
@@ -31,7 +31,7 @@
 
 -runblacklist: \
 	osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.weld)',\
-	osgi.identity;filter:='(osgi.identity=org.jboss.spec.javax.el.jboss-el-api_3.0_spec)'
+	osgi.identity;filter:='(osgi.identity=org.jboss.spec.*)'
 
 -runpath: \
 	ch.qos.logback.classic,\
diff --git a/cdi-itests/weld-itest.bndrun b/cdi-itests/weld-itest.bndrun
index 669ba00..3b4c242 100644
--- a/cdi-itests/weld-itest.bndrun
+++ b/cdi-itests/weld-itest.bndrun
@@ -33,7 +33,7 @@
 
 -runblacklist: \
 	osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.owb)',\
-	osgi.identity;filter:='(osgi.identity=org.jboss.spec.javax.el.jboss-el-api_3.0_spec)'
+	osgi.identity;filter:='(osgi.identity=org.jboss.spec.*)'
 
 -runpath: \
 	ch.qos.logback.classic,\
diff --git a/pom.xml b/pom.xml
index d58238a..e78d8c0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -39,7 +39,7 @@
 		<surefire.version>2.12</surefire.version>
 		<slf4j.version>1.7.28</slf4j.version>
 		<weld.version>3.0.5.Final</weld.version>
-		<owb.version>2.0.13-SNAPSHOT</owb.version>
+		<owb.version>2.0.13</owb.version>
 	</properties>
 
 	<licenses>


[aries-cdi] 08/27: rewrite the extender not to use any particular CDI container impl

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rotty3000 pushed a commit to branch rotty3000/cdi-spi
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit dc9eb675d3f5ca04c0cb38d47bc6b6f42475be63
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Fri Nov 22 12:35:25 2019 -0500

    rewrite the extender not to use any particular CDI container impl
    
    Signed-off-by: Raymond Augé <ro...@apache.org>
    Signed-off-by: Romain Manni-Bucau <rm...@gmail.com>
---
 cdi-extender/pom.xml                               |  16 ++-
 .../aries/cdi/container/internal/Activator.java    |  76 ++++++++----
 .../internal/bean/ComponentPropertiesBean.java     |   4 +-
 .../cdi/container/internal/bean/ReferenceBean.java |  21 +---
 .../cdi/container/internal/command/CDICommand.java |  75 +++++++++---
 .../container/internal/container/CDIBundle.java    |  27 ++--
 .../internal/container/ConfigurationListener.java  |   1 -
 .../internal/container/ContainerBootstrap.java     | 131 +++++++++-----------
 .../internal/container/ContainerDeployment.java    |  66 ----------
 .../container/ContainerDeploymentArchive.java      |  84 -------------
 .../internal/container/ContainerEnvironment.java   |  43 -------
 .../internal/container/ContainerState.java         |  56 ++-------
 .../internal/container/ExtensionMetadata.java      |  41 -------
 .../internal/container/MarkedInjectionPoint.java   |  58 ---------
 .../internal/container/RuntimeExtension.java       |  68 +++++++----
 .../internal/loader/BundleClassLoader.java         | 110 +++++++++++++++--
 .../internal/loader/BundleResourcesLoader.java     | 136 ---------------------
 .../cdi/container/internal/model/BeansModel.java   |  17 +--
 .../internal/model/ComponentPropertiesModel.java   |   3 +-
 .../container/internal/provider/CDIProvider.java   |  40 +++---
 .../cdi/container/internal/util/Annotates.java     |  10 +-
 .../apache/aries/cdi/container/package-info.java   |   9 +-
 .../internal/phase/ContainerBootstrapTest.java     |  17 ++-
 .../container/internal/phase/TemplatesTests.java   |  10 +-
 .../container/test/MockBeanDeploymentArchive.java  |  69 -----------
 .../aries/cdi/container/test/MockCdiContainer.java |  89 --------------
 .../cdi/container/test/MockInjectionPoint.java     |   2 -
 .../apache/aries/cdi/container/test/TestUtil.java  |  10 +-
 28 files changed, 416 insertions(+), 873 deletions(-)

diff --git a/cdi-extender/pom.xml b/cdi-extender/pom.xml
index 7131fc6..e849995 100644
--- a/cdi-extender/pom.xml
+++ b/cdi-extender/pom.xml
@@ -53,6 +53,7 @@
 					<bnd><![CDATA[
 						-cdiannotations:
 						-conditionalpackage: \
+							aQute.lib.exceptions,\
 							org.apache.felix.utils.extender,\
 							org.osgi.util.converter
 					]]></bnd>
@@ -63,6 +64,11 @@
 
 	<dependencies>
 		<dependency>
+			<groupId>org.apache.aries.cdi</groupId>
+			<artifactId>org.apache.aries.cdi.spi</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.converter</artifactId>
 		</dependency>
@@ -87,10 +93,6 @@
 			<artifactId>geronimo-jcdi_2.0_spec</artifactId>
 		</dependency>
 		<dependency>
-			<groupId>org.jboss.weld</groupId>
-			<artifactId>weld-osgi-bundle</artifactId>
-		</dependency>
-		<dependency>
 			<groupId>org.osgi</groupId>
 			<artifactId>osgi.annotation</artifactId>
 		</dependency>
@@ -130,6 +132,12 @@
 			<groupId>org.osgi</groupId>
 			<artifactId>osgi.core</artifactId>
 		</dependency>
+		<dependency>
+			<groupId>biz.aQute.bnd</groupId>
+			<artifactId>biz.aQute.bndlib</artifactId>
+			<version>${bnd.version}</version>
+			<scope>provided</scope>
+		</dependency>
 
 		<dependency>
 			<groupId>ch.qos.logback</groupId>
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/Activator.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/Activator.java
index b0c7881..ca885f1 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/Activator.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/Activator.java
@@ -14,6 +14,7 @@
 
 package org.apache.aries.cdi.container.internal;
 
+import static org.apache.aries.cdi.container.internal.util.Filters.asFilter;
 import static org.osgi.namespace.extender.ExtenderNamespace.EXTENDER_NAMESPACE;
 import static org.osgi.service.cdi.CDIConstants.CDI_CAPABILITY_NAME;
 import static org.osgi.service.cdi.CDIConstants.REQUIREMENT_BEANS_ATTRIBUTE;
@@ -27,7 +28,9 @@ import java.util.Observer;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
-import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.TimeUnit;
+
+import javax.enterprise.inject.se.SeContainerInitializer;
 
 import org.apache.aries.cdi.container.internal.command.CDICommand;
 import org.apache.aries.cdi.container.internal.container.CDIBundle;
@@ -50,6 +53,8 @@ import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
 import org.osgi.framework.FrameworkUtil;
 import org.osgi.framework.ServiceFactory;
+import org.osgi.framework.ServiceObjects;
+import org.osgi.framework.ServiceReference;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.framework.wiring.BundleRequirement;
 import org.osgi.framework.wiring.BundleWire;
@@ -61,6 +66,7 @@ import org.osgi.service.log.Logger;
 import org.osgi.service.log.LoggerFactory;
 import org.osgi.util.promise.PromiseFactory;
 import org.osgi.util.tracker.ServiceTracker;
+import org.osgi.util.tracker.ServiceTrackerCustomizer;
 
 @Header(
 	name = Constants.BUNDLE_ACTIVATOR,
@@ -69,26 +75,48 @@ import org.osgi.util.tracker.ServiceTracker;
 @RequireConfigurationAdmin
 public class Activator extends AbstractExtender {
 
-	private static final Logs _logs = new Logs.Builder(FrameworkUtil.getBundle(Activator.class).getBundleContext()).build();
-	private static final Logger _log = _logs.getLogger(Activator.class);
-	private static final ThreadGroup _threadGroup = new ThreadGroup("Apache Aries CCR - CDI");
-	private static final ExecutorService _executorService = Executors.newFixedThreadPool(
-		1,
-		new ThreadFactory() {
-
-			@Override
-			public Thread newThread(Runnable r) {
-				Thread t = new Thread(_threadGroup, r, "Aries CCR Thread");
-				t.setDaemon(true);
-				return t;
-			}
-
-		}
-	);
-	private static final PromiseFactory _promiseFactory = new PromiseFactory(_executorService);
-	public static final CCR ccr = new CCR(_promiseFactory, _logs);
+	private final CCR _ccr;
+	private final ExecutorService _executorService;
+	private final Logger _log;
+	private final Logs _logs;
+	private final PromiseFactory _promiseFactory;
+	private final ServiceTracker<SeContainerInitializer, ServiceObjects<SeContainerInitializer>> _containerTracker;
 
 	public Activator() {
+		final BundleContext bundleContext = FrameworkUtil.getBundle(getClass()).getBundleContext();
+		_logs = new Logs.Builder(bundleContext).build();
+		_log = _logs.getLogger(Activator.class);
+		_containerTracker = new ServiceTracker<>(
+			bundleContext,
+			asFilter("(&(objectClass=%s)(aries.cdi.spi=*))", SeContainerInitializer.class.getName()),
+			new ServiceTrackerCustomizer<SeContainerInitializer, ServiceObjects<SeContainerInitializer>>() {
+
+				@Override
+				public ServiceObjects<SeContainerInitializer> addingService(
+						ServiceReference<SeContainerInitializer> reference) {
+					return bundleContext.getServiceObjects(reference);
+				}
+
+				@Override
+				public void modifiedService(ServiceReference<SeContainerInitializer> reference,
+						ServiceObjects<SeContainerInitializer> service) {
+				}
+
+				@Override
+				public void removedService(ServiceReference<SeContainerInitializer> reference,
+						ServiceObjects<SeContainerInitializer> service) {
+				}
+			}
+		);
+		_containerTracker.open();
+		_executorService = Executors.newSingleThreadExecutor(worker -> {
+			Thread t = new Thread(new ThreadGroup("Apache Aries CCR - CDI"), worker, "Aries CCR Thread (" + hashCode() + ")");
+			t.setDaemon(false);
+			return t;
+		});
+		_promiseFactory = new PromiseFactory(_executorService);
+		_ccr = new CCR(_promiseFactory, _logs);
+		_command = new CDICommand(_ccr);
 		setSynchronous(true);
 	}
 
@@ -98,8 +126,6 @@ public class Activator extends AbstractExtender {
 			_log.debug("CCR starting {}", bundleContext.getBundle());
 		}
 
-		_command = new CDICommand(ccr);
-
 		_bundleContext = bundleContext;
 
 		registerCCR();
@@ -150,6 +176,8 @@ public class Activator extends AbstractExtender {
 		if (_log.isDebugEnabled()) {
 			_log.debug("CCR stoped {}", bundleContext.getBundle());
 		}
+		_executorService.shutdownNow();
+		_executorService.awaitTermination(2, TimeUnit.SECONDS); // not important but just to avoid to quit too fast
 	}
 
 	@Override
@@ -172,7 +200,7 @@ public class Activator extends AbstractExtender {
 			bundle, _bundleContext.getBundle(), _ccrChangeCount, _promiseFactory, caTracker, _logs);
 
 		// the CDI bundle
-		return new CDIBundle(ccr, containerState,
+		return new CDIBundle(_ccr, containerState,
 			// handle extensions
 			new ExtensionPhase(containerState,
 				// listen for configurations of the container component
@@ -183,7 +211,7 @@ public class Activator extends AbstractExtender {
 						new ContainerActivator.Builder(containerState,
 							// when the active container bootstraps CDI
 							new ContainerBootstrap(
-								containerState,
+								containerState, _containerTracker,
 								// when CDI is bootstrapping is complete and is up and running
 								// activate the configuration listeners for single and factory components
 								new ConfigurationListener.Builder(containerState),
@@ -264,7 +292,7 @@ public class Activator extends AbstractExtender {
 
 			_registrations.add(registration);
 
-			return ccr;
+			return _ccr;
 		}
 
 		@Override
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/bean/ComponentPropertiesBean.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/bean/ComponentPropertiesBean.java
index 8155ac9..db9d8d5 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/bean/ComponentPropertiesBean.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/bean/ComponentPropertiesBean.java
@@ -21,7 +21,7 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
 
-import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.context.Dependent;
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.Default;
 import javax.enterprise.inject.spi.Bean;
@@ -98,7 +98,7 @@ public class ComponentPropertiesBean implements Bean<Object> {
 		ExtendedActivationDTO current = ComponentContext.With.current();
 
 		if (current == null) {
-			return ApplicationScoped.class;
+			return Dependent.class;
 		}
 
 		return ComponentScoped.class;
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/bean/ReferenceBean.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/bean/ReferenceBean.java
index c1ac4b8..c6d7a76 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/bean/ReferenceBean.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/bean/ReferenceBean.java
@@ -149,26 +149,7 @@ public class ReferenceBean implements Bean<Object> {
 
 //		TODO do we want to support decorators/interceptors on in-bound services one day???
 //		==================================================================================
-
-//		if (s == null) return null;
-//
-//		List<javax.enterprise.inject.spi.Decorator<?>> decorators = _bm.resolveDecorators(
-//			Collections.singleton(_template.serviceClass),
-//			new Annotation[0]);
-//
-//		if (decorators.isEmpty()) {
-//			return s;
-//		}
-//
-//		org.jboss.weld.manager.BeanManagerImpl bmi =
-//			((org.jboss.weld.bean.builtin.BeanManagerProxy)_bm).delegate();
-//		org.jboss.weld.injection.CurrentInjectionPoint cip = bmi.getServices().get(
-//			org.jboss.weld.injection.CurrentInjectionPoint.class);
-//		InjectionPoint ip = cip.peek();
-//		return org.jboss.weld.util.Decorators.getOuterDelegate(
-//			(Bean<S>)this, s, c, (Class<S>)_template.serviceClass,
-//			(org.jboss.weld.injection.EmptyInjectionPoint.INSTANCE.equals(ip) ? null : ip),
-//			bmi, decorators);
+//  	If so, use InterceptionFactory instead of doing it manually
 	}
 
 	@Override
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/command/CDICommand.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/command/CDICommand.java
index 8631e3a..4a642b0 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/command/CDICommand.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/command/CDICommand.java
@@ -14,7 +14,8 @@
 
 package org.apache.aries.cdi.container.internal.command;
 
-import static java.util.stream.Collectors.*;
+import static java.util.stream.Collectors.partitioningBy;
+import static java.util.stream.Collectors.toList;
 
 import java.util.Collection;
 import java.util.Formatter;
@@ -33,10 +34,12 @@ import org.osgi.service.cdi.runtime.dto.ComponentDTO;
 import org.osgi.service.cdi.runtime.dto.ComponentInstanceDTO;
 import org.osgi.service.cdi.runtime.dto.ConfigurationDTO;
 import org.osgi.service.cdi.runtime.dto.ContainerDTO;
+import org.osgi.service.cdi.runtime.dto.ExtensionDTO;
 import org.osgi.service.cdi.runtime.dto.ReferenceDTO;
 import org.osgi.service.cdi.runtime.dto.template.ActivationTemplateDTO;
 import org.osgi.service.cdi.runtime.dto.template.ComponentTemplateDTO;
 import org.osgi.service.cdi.runtime.dto.template.ConfigurationTemplateDTO;
+import org.osgi.service.cdi.runtime.dto.template.ExtensionTemplateDTO;
 import org.osgi.service.cdi.runtime.dto.template.ReferenceTemplateDTO;
 
 public class CDICommand {
@@ -93,10 +96,34 @@ public class CDICommand {
 			containerDTO.bundle.symbolicName,
 			containerDTO.bundle.id);
 
+		if (!containerDTO.template.extensions.isEmpty()) {
+			f.format(
+				"%s%sEXTENSIONS%n",
+				(hasNext ? PSSS : SSSS),
+				TLLS);
+
+			for (Iterator<ExtensionTemplateDTO> itr1 = containerDTO.template.extensions.iterator(); itr1.hasNext();) {
+				ExtensionTemplateDTO templateDTO = itr1.next();
+				ExtensionDTO extensionDTO = containerDTO.extensions.stream().filter(extInstance -> templateDTO == extInstance.template).findFirst().orElse(null);
+
+				f.format(
+					"%s%sFILTER: %s%n",
+					(hasNext ? PSSS : SSSS) + PSSS,
+					(itr1.hasNext() ? TLLS : CLLS),
+					templateDTO.serviceFilter);
+				f.format(
+					"%s%s%sMATCH: %s%n",
+					(hasNext ? PSSS : SSSS) + PSSS,
+					(itr1.hasNext() ? PSSS : SSSS),
+					CLLS,
+					(extensionDTO == null) ? "null*" : extensionDTO.service);
+			}
+		}
+
 		f.format(
 			"%s%sCOMPONENTS%n",
 			(hasNext ? PSSS : SSSS),
-			curb);
+			CLLS);
 
 		Map<Boolean, List<ComponentTemplateDTO>> componentTemplateDTOs = containerDTO.template.components.stream().collect(
 			partitioningBy(c -> c.type == ComponentType.CONTAINER)
@@ -160,20 +187,35 @@ public class CDICommand {
 			c -> c.template.name.equals(componentTemplateDTO.name)
 		).findFirst().orElse(null);
 
-		if ((componentDTO != null) && !componentDTO.instances.isEmpty()) {
-			Iterator<ComponentInstanceDTO> itr3 = componentDTO.instances.iterator();
+		if (componentDTO != null) {
+			if (!componentDTO.instances.isEmpty()) {
+				Iterator<ComponentInstanceDTO> itr3 = componentDTO.instances.iterator();
 
-			for (;itr3.hasNext();) {
-				ComponentInstanceDTO instanceDTO = itr3.next();
+				for (;itr3.hasNext();) {
+					ComponentInstanceDTO instanceDTO = itr3.next();
 
+					formatInstance(
+						f,
+						prefix,
+						componentDTO,
+						componentTemplateDTO,
+						instanceDTO,
+						pids(instanceDTO, configMap),
+						hasNext,
+						itr3.hasNext(),
+						verbose);
+				}
+			}
+			else {
 				formatInstance(
 					f,
 					prefix,
 					componentDTO,
-					instanceDTO,
-					pids(instanceDTO, configMap),
+					componentTemplateDTO,
+					null,
+					configMap.get(Boolean.FALSE).stream().map(c -> c.pid).collect(toList()).toString(),
 					hasNext,
-					itr3.hasNext(),
+					false,
 					verbose);
 			}
 		}
@@ -182,6 +224,7 @@ public class CDICommand {
 				f,
 				prefix,
 				componentDTO,
+				componentTemplateDTO,
 				null,
 				configMap.get(Boolean.FALSE).stream().map(c -> c.pid).collect(toList()).toString(),
 				hasNext,
@@ -191,7 +234,7 @@ public class CDICommand {
 	}
 
 	private void formatInstance(
-		Formatter f, String prefix, ComponentDTO componentDTO,
+		Formatter f, String prefix, ComponentDTO componentDTO, ComponentTemplateDTO templateDTO,
 		ComponentInstanceDTO instanceDTO, String pids,
 		boolean hasNext, boolean hasNext2, boolean verbose) {
 
@@ -201,7 +244,7 @@ public class CDICommand {
 				prefix,
 				(hasNext ? PSSS : SSSS),
 				TLLS,
-				componentDTO.template.beans.toString());
+				templateDTO.beans.toString());
 
 			f.format(
 				"%s%s%sCONFIGURATIONS%n",
@@ -209,7 +252,7 @@ public class CDICommand {
 				(hasNext ? PSSS : SSSS),
 				TLLS);
 
-			for (Iterator<ConfigurationTemplateDTO> itr = componentDTO.template.configurations.iterator();itr.hasNext();) {
+			for (Iterator<ConfigurationTemplateDTO> itr = templateDTO.configurations.iterator();itr.hasNext();) {
 				ConfigurationTemplateDTO conf = itr.next();
 
 				ConfigurationDTO configurationDTO = null;
@@ -266,14 +309,14 @@ public class CDICommand {
 				}
 			}
 
-			if (!componentDTO.template.references.isEmpty()) {
+			if (!templateDTO.references.isEmpty()) {
 				f.format(
 					"%s%s%sREFERENCES%n",
 					prefix,
 					(hasNext ? PSSS : SSSS),
 					TLLS);
 
-				for (Iterator<ReferenceTemplateDTO> itr = componentDTO.template.references.iterator(); itr.hasNext();) {
+				for (Iterator<ReferenceTemplateDTO> itr = templateDTO.references.iterator(); itr.hasNext();) {
 					ReferenceTemplateDTO dto = itr.next();
 
 					ReferenceDTO referenceDTO = null;
@@ -345,14 +388,14 @@ public class CDICommand {
 				}
 			}
 
-			if (!componentDTO.template.activations.isEmpty()) {
+			if (!templateDTO.activations.isEmpty()) {
 				f.format(
 					"%s%s%sACTIVATIONS%n",
 					prefix,
 					(hasNext ? PSSS : SSSS),
 					TLLS);
 
-				for (Iterator<ActivationTemplateDTO> itr = componentDTO.template.activations.iterator(); itr.hasNext();) {
+				for (Iterator<ActivationTemplateDTO> itr = templateDTO.activations.iterator(); itr.hasNext();) {
 					ActivationTemplateDTO dto = itr.next();
 
 					ActivationDTO activationDTO = null;
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/CDIBundle.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/CDIBundle.java
index c9816bd..3c58d88 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/CDIBundle.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/CDIBundle.java
@@ -31,23 +31,25 @@ public class CDIBundle extends Phase implements Extension {
 	@Override
 	public boolean close() {
 		try (Syncro open = syncro.open()) {
+			if (!running) return false;
+
 			containerState.closing();
 
 			return next.map(
-					next -> {
-						submit(next.closeOp(), next::close).onFailure(
-								f -> {
-									_log.error(l -> l.error("CCR Error in cdibundle CLOSE on {}", bundle(), f));
+				next -> {
+					submit(next.closeOp(), next::close).onFailure(
+						f -> {
+							_log.error(l -> l.error("CCR Error in cdibundle CLOSE on {}", bundle(), f));
 
-									error(f);
-								}
-								);
+							error(f);
+						}
+					);
 
-						_ccr.remove(bundle());
+					_ccr.remove(bundle());
 
-						return true;
-					}
-					).orElse(true);
+					return true;
+				}
+			).orElse(true);
 		}
 	}
 
@@ -64,7 +66,7 @@ public class CDIBundle extends Phase implements Extension {
 	@Override
 	public boolean open() {
 		try (Syncro open = syncro.open()) {
-			return next.map(
+			return running = next.map(
 				next -> {
 					_ccr.add(containerState.bundle(), containerState);
 
@@ -94,5 +96,6 @@ public class CDIBundle extends Phase implements Extension {
 
 	private final CCR _ccr;
 	private final Logger _log;
+	private volatile boolean running = false;
 
 }
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ConfigurationListener.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ConfigurationListener.java
index 9a89301..494de1c 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ConfigurationListener.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ConfigurationListener.java
@@ -29,7 +29,6 @@ import org.apache.aries.cdi.container.internal.util.Maps;
 import org.apache.aries.cdi.container.internal.util.Predicates;
 import org.apache.aries.cdi.container.internal.util.Syncro;
 import org.apache.aries.cdi.container.internal.util.Throw;
-import org.jboss.weld.exceptions.IllegalArgumentException;
 import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.cdi.ConfigurationPolicy;
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerBootstrap.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerBootstrap.java
index c67a26e..4d573da 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerBootstrap.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerBootstrap.java
@@ -14,29 +14,33 @@
 
 package org.apache.aries.cdi.container.internal.container;
 
+import static org.apache.aries.cdi.spi.Keys.BEANS_XML_PROPERTY;
+import static org.apache.aries.cdi.spi.Keys.BUNDLECONTEXT_PROPERTY;
+
+import java.util.ArrayList;
 import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.ServiceLoader;
 
+import javax.enterprise.inject.se.SeContainer;
+import javax.enterprise.inject.se.SeContainerInitializer;
 import javax.enterprise.inject.spi.Extension;
 
 import org.apache.aries.cdi.container.internal.container.Op.Mode;
 import org.apache.aries.cdi.container.internal.container.Op.Type;
-import org.apache.aries.cdi.container.internal.loader.BundleResourcesLoader;
 import org.apache.aries.cdi.container.internal.model.ExtendedExtensionDTO;
 import org.apache.aries.cdi.container.internal.model.FactoryComponent;
+import org.apache.aries.cdi.container.internal.model.OSGiBean;
 import org.apache.aries.cdi.container.internal.model.SingleComponent;
 import org.apache.aries.cdi.container.internal.util.Syncro;
-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.util.ServiceLoader;
+import org.osgi.framework.ServiceObjects;
 import org.osgi.service.log.Logger;
+import org.osgi.util.tracker.ServiceTracker;
 
 public class ContainerBootstrap extends Phase {
 
 	public ContainerBootstrap(
 		ContainerState containerState,
+		ServiceTracker<SeContainerInitializer, ServiceObjects<SeContainerInitializer>> containerTracker,
 		ConfigurationListener.Builder configurationBuilder,
 		SingleComponent.Builder singleBuilder,
 		FactoryComponent.Builder factoryBuilder) {
@@ -44,24 +48,34 @@ public class ContainerBootstrap extends Phase {
 		super(containerState, null);
 
 		_configurationBuilder = configurationBuilder;
+		_containerTracker = containerTracker;
 		_singleBuilder = singleBuilder;
 		_factoryBuilder = factoryBuilder;
 		_log = containerState.containerLogs().getLogger(getClass());
+
+		_serviceObjects = _containerTracker.getService();
+		_seContainerInitializerInstance = _serviceObjects.getService();
 	}
 
 	@Override
 	public boolean close() {
 		try (Syncro syncro = _lock.open()) {
-			if (_bootstrap != null) {
-				_log.debug(l -> l.debug("CCR container bootstrap shutdown on {}", _bootstrap));
-				_bootstrap.shutdown();
-				_bootstrap = null;
+			if (_seContainer != null) {
+				_log.debug(l -> l.debug("CCR container shutdown for {}", bundle()));
+				_seContainer.close();
+				try {
+					_serviceObjects.ungetService(_seContainerInitializerInstance);
+				}
+				catch (Throwable t) {
+					_log.trace(l -> l.trace("CCR Failure in returning initializer instance on {}", bundle(), t));
+				}
+				_seContainer = null;
 			}
 
 			return true;
 		}
 		catch (Throwable t) {
-			_log.error(l -> l.error("CCR Failure in container bootstrap shutdown on {}", _bootstrap, t));
+			_log.error(l -> l.error("CCR Failure in container bootstrap shutdown on {}", bundle(), t));
 
 			return false;
 		}
@@ -80,7 +94,7 @@ public class ContainerBootstrap extends Phase {
 				return false;
 			}
 
-			if (_bootstrap != null) {
+			if (_seContainer != null) {
 				return true;
 			}
 
@@ -88,62 +102,16 @@ public class ContainerBootstrap extends Phase {
 				return false;
 			}
 
-			List<Metadata<Extension>> extensions = new CopyOnWriteArrayList<>();
-
-			// Add the internal extensions
-			extensions.add(
-				new ExtensionMetadata(
-					new BundleContextExtension(containerState.bundleContext()),
-					containerState.id()));
-			extensions.add(
-				new ExtensionMetadata(
-					new RuntimeExtension(containerState, _configurationBuilder, _singleBuilder, _factoryBuilder),
-					containerState.id()));
-			extensions.add(
-				new ExtensionMetadata(
-					new LoggerExtension(containerState),
-					containerState.id()));
-
-			Thread currentThread = Thread.currentThread();
-			ClassLoader current = currentThread.getContextClassLoader();
-			BundleResourcesLoader.Builder builder = new BundleResourcesLoader.Builder(containerState.bundle(), containerState.extenderBundle());
-
-			try {
-				currentThread.setContextClassLoader(containerState.classLoader());
-
-				// Add extensions found from the bundle's class loader, such as those in the Bundle-ClassPath
-				ServiceLoader.load(Extension.class, containerState.classLoader()).forEach(extensions::add);
-
-				// Add external extensions
-				containerState.containerDTO().extensions.stream().map(
-					ExtendedExtensionDTO.class::cast
-				).map(
-					e -> {
-						builder.add(e.serviceReference.getBundle());
-						return new ExtensionMetadata(e.extension.getService(), e.template.serviceFilter);
-					}
-				).forEach(extensions::add);
-
-				_bootstrap = new WeldBootstrap();
-
-				BeanDeploymentArchive beanDeploymentArchive = new ContainerDeploymentArchive(
-					builder.build(),
-					containerState.id(),
-					containerState.beansModel().getBeanClassNames(),
-					containerState.beansModel().getBeansXml());
-
-				Deployment deployment = new ContainerDeployment(extensions, beanDeploymentArchive);
-
-				_bootstrap.startExtensions(extensions);
-				_bootstrap.startContainer(containerState.id(), new ContainerEnvironment(), deployment);
-				_bootstrap.startInitialization();
-				_bootstrap.deployBeans();
-				_bootstrap.validateBeans();
-				_bootstrap.endInitialization();
-			}
-			finally {
-				currentThread.setContextClassLoader(current);
-			}
+			_log.debug(log -> log.debug("CCR container startup for {}", bundle()));
+
+			_seContainer = _seContainerInitializerInstance
+				.setClassLoader(containerState.classLoader())
+				.addBeanClasses(containerState.beansModel().getOSGiBeans().stream().map(OSGiBean::getBeanClass).toArray(Class<?>[]::new))
+				.setProperties(containerState.containerComponentTemplateDTO().properties)
+				.addProperty(BEANS_XML_PROPERTY, containerState.beansModel().getBeansXml())
+				.addProperty(BUNDLECONTEXT_PROPERTY, bundle().getBundleContext())
+				.addExtensions(getExtensions().toArray(new Extension[0]))
+				.initialize();
 
 			return true;
 		}
@@ -154,10 +122,33 @@ public class ContainerBootstrap extends Phase {
 		return Op.of(Mode.OPEN, Type.CONTAINER_BOOTSTRAP, containerState.id());
 	}
 
+	protected List<Extension> getExtensions() {
+		List<Extension> extensions = new ArrayList<>();
+
+		// Add the internal extensions
+		extensions.add(new BundleContextExtension(containerState.bundleContext()));
+		extensions.add(new RuntimeExtension(containerState, _configurationBuilder, _singleBuilder, _factoryBuilder));
+		extensions.add(new LoggerExtension(containerState));
+
+		// Add extensions found from the bundle's class loader, such as those in the Bundle-ClassPath
+		ServiceLoader.load(Extension.class, containerState.classLoader()).forEach(extensions::add);
+
+		// Add external extensions
+		containerState.containerDTO().extensions.stream().map(
+			ExtendedExtensionDTO.class::cast
+		).map(
+			e -> e.extension.getService()
+		).forEach(extensions::add);
+
+		return extensions;
+	}
 
-	private volatile WeldBootstrap _bootstrap;
+	private volatile SeContainer _seContainer;
+	private final ServiceTracker<SeContainerInitializer, ServiceObjects<SeContainerInitializer>> _containerTracker;
 	private final ConfigurationListener.Builder _configurationBuilder;
 	private final FactoryComponent.Builder _factoryBuilder;
+	private final SeContainerInitializer _seContainerInitializerInstance;
+	private final ServiceObjects<SeContainerInitializer> _serviceObjects;
 	private final SingleComponent.Builder _singleBuilder;
 	private final Syncro _lock = new Syncro(true);
 	private final Logger _log;
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerDeployment.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerDeployment.java
deleted file mode 100644
index 7e838a5..0000000
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerDeployment.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * 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 javax.enterprise.inject.spi.Extension;
-
-import org.jboss.weld.bootstrap.api.ServiceRegistry;
-import org.jboss.weld.bootstrap.spi.BeanDeploymentArchive;
-import org.jboss.weld.bootstrap.spi.CDI11Deployment;
-import org.jboss.weld.bootstrap.spi.Metadata;
-
-public class ContainerDeployment implements CDI11Deployment {
-
-	public ContainerDeployment(Iterable<Metadata<Extension>> extensions, BeanDeploymentArchive beanDeploymentArchive) {
-		_extensions = extensions;
-		_beanDeploymentArchive = beanDeploymentArchive;
-
-		_beanDeploymentArchives = new ArrayList<BeanDeploymentArchive>();
-		_beanDeploymentArchives.add(beanDeploymentArchive);
-	}
-
-	@Override
-	public BeanDeploymentArchive getBeanDeploymentArchive(Class<?> beanClass) {
-		return _beanDeploymentArchive;
-	}
-
-	@Override
-	public Collection<BeanDeploymentArchive> getBeanDeploymentArchives() {
-		return _beanDeploymentArchives;
-	}
-
-	@Override
-	public Iterable<Metadata<Extension>> getExtensions() {
-		return _extensions;
-	}
-
-	@Override
-	public ServiceRegistry getServices() {
-		return _beanDeploymentArchive.getServices();
-	}
-
-	@Override
-	public BeanDeploymentArchive loadBeanDeploymentArchive(Class<?> aClass) {
-		return _beanDeploymentArchive;
-	}
-
-	private final BeanDeploymentArchive _beanDeploymentArchive;
-	private final Collection<BeanDeploymentArchive> _beanDeploymentArchives;
-	private final Iterable<Metadata<Extension>> _extensions;
-
-}
\ No newline at end of file
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerDeploymentArchive.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerDeploymentArchive.java
deleted file mode 100644
index 4fbca9b..0000000
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerDeploymentArchive.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * 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.Collection;
-import java.util.Collections;
-
-import org.jboss.weld.bootstrap.api.ServiceRegistry;
-import org.jboss.weld.bootstrap.api.helpers.SimpleServiceRegistry;
-import org.jboss.weld.bootstrap.spi.BeanDeploymentArchive;
-import org.jboss.weld.bootstrap.spi.BeansXml;
-import org.jboss.weld.bootstrap.spi.EEModuleDescriptor;
-import org.jboss.weld.bootstrap.spi.EEModuleDescriptor.ModuleType;
-import org.jboss.weld.bootstrap.spi.helpers.EEModuleDescriptorImpl;
-import org.jboss.weld.ejb.spi.EjbDescriptor;
-import org.jboss.weld.resources.spi.ResourceLoader;
-import org.jboss.weld.serialization.spi.ProxyServices;
-
-public class ContainerDeploymentArchive
-	implements BeanDeploymentArchive {
-
-	public <T extends ResourceLoader & ProxyServices> ContainerDeploymentArchive(
-		T loader, String id, Collection<String> beanClassNames, BeansXml beansXml) {
-
-		_id = id;
-		_beanClassNames = beanClassNames;
-		_beansXml = beansXml;
-		_services = new SimpleServiceRegistry();
-
-		if (loader != null) {
-			_services.add(ResourceLoader.class, loader);
-			_services.add(ProxyServices.class, loader);
-			_services.add(EEModuleDescriptor.class, new EEModuleDescriptorImpl(id, ModuleType.WEB));
-		}
-	}
-
-	@Override
-	public Collection<String> getBeanClasses() {
-		return _beanClassNames;
-	}
-
-	@Override
-	public Collection<BeanDeploymentArchive> getBeanDeploymentArchives() {
-		return Collections.emptyList();
-	}
-
-	@Override
-	public BeansXml getBeansXml() {
-		return _beansXml;
-	}
-
-	@Override
-	public Collection<EjbDescriptor<?>> getEjbs() {
-		return Collections.emptyList();
-	}
-
-	@Override
-	public String getId() {
-		return _id;
-	}
-
-	@Override
-	public ServiceRegistry getServices() {
-		return _services;
-	}
-
-	private final Collection<String> _beanClassNames;
-	private final BeansXml _beansXml;
-	private final String _id;
-	private final ServiceRegistry _services;
-
-}
\ No newline at end of file
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerEnvironment.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerEnvironment.java
deleted file mode 100644
index a968c32..0000000
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerEnvironment.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * 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.HashSet;
-import java.util.Set;
-
-import org.jboss.weld.bootstrap.api.Environment;
-import org.jboss.weld.bootstrap.api.Service;
-
-public class ContainerEnvironment implements Environment {
-
-	public ContainerEnvironment() {
-		_requiredBeanDeploymentArchiveServices = new HashSet<Class<? extends Service>>();
-		_requiredDeploymentServices = new HashSet<Class<? extends Service>>();
-	}
-
-	@Override
-	public Set<Class<? extends Service>> getRequiredBeanDeploymentArchiveServices() {
-		return _requiredBeanDeploymentArchiveServices;
-	}
-
-	@Override
-	public Set<Class<? extends Service>> getRequiredDeploymentServices() {
-		return _requiredDeploymentServices;
-	}
-
-	private final Set<Class<? extends Service>> _requiredBeanDeploymentArchiveServices;
-	private final Set<Class<? extends Service>> _requiredDeploymentServices;
-
-}
\ No newline at end of file
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java
index f04cb9e..bd3a8a2 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java
@@ -14,9 +14,11 @@
 
 package org.apache.aries.cdi.container.internal.container;
 
-import static org.apache.aries.cdi.container.internal.util.Filters.*;
-import static org.osgi.namespace.extender.ExtenderNamespace.*;
-import static org.osgi.service.cdi.CDIConstants.*;
+import static org.apache.aries.cdi.container.internal.util.Filters.asFilter;
+import static org.osgi.namespace.extender.ExtenderNamespace.EXTENDER_NAMESPACE;
+import static org.osgi.service.cdi.CDIConstants.CDI_CAPABILITY_NAME;
+import static org.osgi.service.cdi.CDIConstants.CDI_CONTAINER_ID;
+import static org.osgi.service.cdi.CDIConstants.CDI_EXTENSION_PROPERTY;
 
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
@@ -30,26 +32,20 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import javax.enterprise.inject.Any;
 import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.util.AnnotationLiteral;
 
 import org.apache.aries.cdi.container.internal.ChangeCount;
 import org.apache.aries.cdi.container.internal.loader.BundleClassLoader;
-import org.apache.aries.cdi.container.internal.loader.BundleResourcesLoader;
 import org.apache.aries.cdi.container.internal.model.BeansModel;
 import org.apache.aries.cdi.container.internal.model.BeansModelBuilder;
 import org.apache.aries.cdi.container.internal.model.ExtendedConfigurationTemplateDTO;
 import org.apache.aries.cdi.container.internal.model.ExtendedExtensionTemplateDTO;
 import org.apache.aries.cdi.container.internal.util.Logs;
 import org.apache.aries.cdi.container.internal.util.Throw;
-import org.jboss.weld.resources.spi.ResourceLoader;
-import org.jboss.weld.serialization.spi.ProxyServices;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
 import org.osgi.framework.dto.BundleDTO;
-import org.osgi.framework.namespace.PackageNamespace;
 import org.osgi.framework.wiring.BundleCapability;
 import org.osgi.framework.wiring.BundleRequirement;
 import org.osgi.framework.wiring.BundleWire;
@@ -71,10 +67,6 @@ import org.osgi.util.tracker.ServiceTracker;
 
 public class ContainerState {
 
-	public static final AnnotationLiteral<Any> ANY = new AnnotationLiteral<Any>() {
-		private static final long serialVersionUID = 1L;
-	};
-
 	public ContainerState(
 		Bundle bundle,
 		Bundle extenderBundle,
@@ -195,8 +187,6 @@ public class ContainerState {
 
 		_beansModel = new BeansModelBuilder(this, _aggregateClassLoader, bundleWiring, cdiAttributes).build();
 
-		_bundleClassLoader = bundleWiring.getClassLoader();
-
 		try {
 			new Discovery(this).discover();
 		}
@@ -238,10 +228,6 @@ public class ContainerState {
 		return _bundle;
 	}
 
-	public ClassLoader bundleClassLoader() {
-		return _bundleClassLoader;
-	}
-
 	public BundleContext bundleContext() {
 		return _bundleContext;
 	}
@@ -254,7 +240,7 @@ public class ContainerState {
 		return _ccrLogs;
 	}
 
-	public ClassLoader classLoader() {
+	public BundleClassLoader classLoader() {
 		return _aggregateClassLoader;
 	}
 
@@ -328,11 +314,6 @@ public class ContainerState {
 		_changeCount.incrementAndGet();
 	}
 
-	@SuppressWarnings("unchecked")
-	public <T extends ResourceLoader & ProxyServices> T loader() {
-		return (T)new BundleResourcesLoader.Builder(_bundle, _extenderBundle).build();
-	}
-
 	public PromiseFactory promiseFactory() {
 		return _promiseFactory;
 	}
@@ -378,39 +359,20 @@ public class ContainerState {
 		return promise;
 	}
 
-	private static Bundle[] getBundles(Bundle bundle, Bundle extenderBundle) {
+	private static List<Bundle> getBundles(Bundle bundle, Bundle extenderBundle) {
 		List<Bundle> bundles = new ArrayList<>();
 
 		bundles.add(bundle);
 		bundles.add(extenderBundle);
 
-		BundleWiring extenderWiring = extenderBundle.adapt(BundleWiring.class);
-
-		List<BundleWire> requiredWires = extenderWiring.getRequiredWires(PackageNamespace.PACKAGE_NAMESPACE);
-
-		for (BundleWire bundleWire : requiredWires) {
-			BundleCapability capability = bundleWire.getCapability();
-			Map<String, Object> attributes = capability.getAttributes();
-			String packageName = (String)attributes.get(PackageNamespace.PACKAGE_NAMESPACE);
-			if (!packageName.startsWith("org.jboss.weld.")) {
-				continue;
-			}
-
-			Bundle wireBundle = bundleWire.getProvider().getBundle();
-			if (!bundles.contains(wireBundle)) {
-				bundles.add(wireBundle);
-			}
-		}
-
-		return bundles.toArray(new Bundle[0]);
+		return bundles;
 	}
 
-	private final ClassLoader _aggregateClassLoader;
+	private final BundleClassLoader _aggregateClassLoader;
 	private volatile Deferred<BeanManager> _beanManagerDeferred;
 	private final BeansModel _beansModel;
 	private final Bundle _bundle;
 	private final BundleContext _bundleContext;
-	private final ClassLoader _bundleClassLoader;
 	private final Map<CheckedCallback<?, ?>, Deferred<?>> _callbacks = new ConcurrentHashMap<>();
 	private final ServiceTracker<ConfigurationAdmin, ConfigurationAdmin> _caTracker;
 	private final Logger _log;
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ExtensionMetadata.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ExtensionMetadata.java
deleted file mode 100644
index 7ae345c..0000000
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ExtensionMetadata.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * 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 javax.enterprise.inject.spi.Extension;
-
-import org.jboss.weld.bootstrap.spi.Metadata;
-
-public class ExtensionMetadata implements Metadata<Extension> {
-
-	public ExtensionMetadata(Extension extension, String location) {
-		_extension = extension;
-		_location = location;
-	}
-
-	@Override
-	public Extension getValue() {
-		return _extension;
-	}
-
-	@Override
-	public String getLocation() {
-		return _location;
-	}
-
-	private final Extension _extension;
-	private final String _location;
-
-}
\ No newline at end of file
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/MarkedInjectionPoint.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/MarkedInjectionPoint.java
deleted file mode 100644
index 0433f2e..0000000
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/MarkedInjectionPoint.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * 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.lang.annotation.Annotation;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import javax.enterprise.inject.spi.InjectionPoint;
-
-import org.apache.aries.cdi.container.internal.util.Sets;
-import org.jboss.weld.injection.ForwardingInjectionPoint;
-
-public class MarkedInjectionPoint extends ForwardingInjectionPoint {
-
-	public MarkedInjectionPoint(InjectionPoint injectionPoint) {
-		_delegate = injectionPoint;
-		_mark = Mark.Literal.from(counter.incrementAndGet());
-		_qualifiers = Sets.hashSet(injectionPoint.getQualifiers(), _mark);
-	}
-
-	@Override
-	protected InjectionPoint delegate() {
-		return _delegate;
-	}
-
-	public InjectionPoint getDelegate() {
-		return delegate();
-	}
-
-	public Mark getMark() {
-		return _mark;
-	}
-
-	@Override
-	public Set<Annotation> getQualifiers() {
-		return _qualifiers;
-	}
-
-	private static final AtomicInteger counter = new AtomicInteger();
-
-	private final InjectionPoint _delegate;
-	private final Mark _mark;
-	private final Set<Annotation> _qualifiers;
-
-}
\ No newline at end of file
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/RuntimeExtension.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/RuntimeExtension.java
index 697b6f6..02d44ab 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/RuntimeExtension.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/RuntimeExtension.java
@@ -14,7 +14,7 @@
 
 package org.apache.aries.cdi.container.internal.container;
 
-import static javax.interceptor.Interceptor.Priority.*;
+import static javax.interceptor.Interceptor.Priority.PLATFORM_AFTER;
 
 import java.util.ArrayList;
 import java.util.Dictionary;
@@ -23,6 +23,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
 import javax.annotation.Priority;
@@ -182,10 +183,7 @@ public class RuntimeExtension implements Extension {
 				for (ActivationTemplateDTO at : _containerTemplate.activations) {
 					ExtendedActivationTemplateDTO extended = (ExtendedActivationTemplateDTO)at;
 					if (extended.declaringClass.equals(declaringClass) &&
-						(((extended.producer == null) && (producer == null)) ||
-						(extended.producer != null) &&
-						(producer != null) &&
-						Objects.equals(extended.producer.getJavaMember(), producer.getJavaMember()))) {
+							equals(extended.producer, producer)) {
 
 						activationTemplate = extended;
 						break;
@@ -245,6 +243,8 @@ public class RuntimeExtension implements Extension {
 
 			registerService(serviceTypes, bm, properties);
 
+			_log.debug(l -> l.debug("CCR Container READY for {}", _containerState.bundle()));
+
 			return s;
 		});
 	}
@@ -292,7 +292,7 @@ public class RuntimeExtension implements Extension {
 					).findFirst().map(
 						ExtendedReferenceDTO.class::cast
 					).ifPresent(
-						r -> bean.setReferenceDTO(r)
+						bean::setReferenceDTO
 					);
 				}
 
@@ -329,6 +329,18 @@ public class RuntimeExtension implements Extension {
 		return producerFactory.createProducer(bean);
 	}
 
+	// Objects.equals(producer, producer1) is not expected to work so impl it as expected there
+	private boolean equals(AnnotatedMember<?> producerA, AnnotatedMember<?> producerB) {
+		if ((producerA == null) && (producerB == null)) return true;
+		if (!Objects.equals(producerA.getJavaMember(), producerB.getJavaMember())) {
+			return false;
+		}
+		if (!Objects.equals(producerA.getAnnotations(), producerB.getAnnotations())) {
+			return false;
+		}
+		return true;
+	}
+
 	private Promise<Boolean> initComponents() {
 		_containerState.containerDTO().template.components.stream().filter(
 			t -> t.type != ComponentType.CONTAINER
@@ -368,7 +380,7 @@ public class RuntimeExtension implements Extension {
 		return _containerState.submit(cl.openOp(), cl::open);
 	}
 
-	private boolean matchConfiguration(OSGiBean osgiBean, ProcessInjectionPoint<?, ?> pip) {
+	private void processConfiguration(OSGiBean osgiBean, ProcessInjectionPoint<?, ?> pip) {
 		InjectionPoint injectionPoint = pip.getInjectionPoint();
 
 		Class<?> declaringClass = Annotates.declaringClass(injectionPoint.getAnnotated());
@@ -379,22 +391,18 @@ public class RuntimeExtension implements Extension {
 			injectionPoint.getQualifiers()
 		).build().toDTO();
 
-		return osgiBean.getComponent().configurations.stream().map(
+		osgiBean.getComponent().configurations.stream().map(
 			t -> (ExtendedConfigurationTemplateDTO)t
 		).filter(
 			t -> current.equals(t)
-		).findFirst().map(
+		).findFirst().ifPresent(
 			t -> {
-				MarkedInjectionPoint markedInjectionPoint = new MarkedInjectionPoint(injectionPoint);
-
-				pip.setInjectionPoint(markedInjectionPoint);
-
-				t.bean.setInjectionPoint(injectionPoint);
-				t.bean.setMark(markedInjectionPoint.getMark());
+				final Mark mark = Mark.Literal.from(MARK_IP_COUNTER.incrementAndGet());
+				pip.configureInjectionPoint().addQualifiers(mark);
 
-				return true;
+				t.bean.setMark(mark);
 			}
-		).orElse(false);
+		);
 	}
 
 	private boolean matchReference(OSGiBean osgiBean, ProcessInjectionPoint<?, ?> pip) {
@@ -414,11 +422,10 @@ public class RuntimeExtension implements Extension {
 			t -> current.equals(t)
 		).findFirst().map(
 			t -> {
-				MarkedInjectionPoint markedInjectionPoint = new MarkedInjectionPoint(injectionPoint);
+				final Mark mark = Mark.Literal.from(MARK_IP_COUNTER.incrementAndGet());
+				pip.configureInjectionPoint().addQualifier(mark);
 
-				pip.setInjectionPoint(markedInjectionPoint);
-
-				t.bean.setMark(markedInjectionPoint.getMark());
+				t.bean.setMark(mark);
 
 				_log.debug(l -> l.debug("CCR maping InjectionPoint {} to reference template {}", injectionPoint, t));
 
@@ -449,7 +456,21 @@ public class RuntimeExtension implements Extension {
 		}
 
 		if (componentProperties != null) {
-			matchConfiguration(osgiBean, pip);
+			processConfiguration(osgiBean, pip);
+		}
+	}
+
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	private void registerServiceHandleFailure(
+		ExtendedComponentInstanceDTO componentInstance,
+		ExtendedActivationTemplateDTO activationTemplate,
+		BeanManager bm) {
+
+		try {
+			registerService(componentInstance, activationTemplate, bm);
+		}
+		catch (Throwable t) {
+			_log.error("CDI - An error occured", t);
 		}
 	}
 
@@ -553,7 +574,7 @@ public class RuntimeExtension implements Extension {
 		componentDTO.template.activations.stream().map(
 			ExtendedActivationTemplateDTO.class::cast
 		).forEach(
-			a -> registerService((ExtendedComponentInstanceDTO)componentDTO.instances.get(0), a, bm)
+			a -> registerServiceHandleFailure((ExtendedComponentInstanceDTO)componentDTO.instances.get(0), a, bm)
 		);
 
 		return true;
@@ -568,4 +589,5 @@ public class RuntimeExtension implements Extension {
 	private final List<ServiceRegistration<?>> _registrations = new CopyOnWriteArrayList<>();
 	private final SingleComponent.Builder _singleBuilder;
 
+	private static final AtomicInteger MARK_IP_COUNTER = new AtomicInteger();
 }
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/loader/BundleClassLoader.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/loader/BundleClassLoader.java
index 9246c04..bf8f863 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/loader/BundleClassLoader.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/loader/BundleClassLoader.java
@@ -14,22 +14,26 @@
 
 package org.apache.aries.cdi.container.internal.loader;
 
+import static java.util.Objects.requireNonNull;
+
 import java.io.IOException;
 import java.net.URL;
-import java.net.URLClassLoader;
+import java.security.ProtectionDomain;
 import java.util.Collections;
 import java.util.Enumeration;
+import java.util.List;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
+import java.util.function.Function;
+import java.util.function.Predicate;
 
+import org.apache.aries.cdi.spi.loader.SpiLoader;
 import org.osgi.framework.Bundle;
 
-public class BundleClassLoader extends URLClassLoader {
-
-	public BundleClassLoader(Bundle[] bundles) {
-		super(new URL[0]);
+public class BundleClassLoader extends SpiLoader {
 
-		if (bundles.length == 0) {
+	public BundleClassLoader(List<Bundle> bundles) {
+		if (bundles.isEmpty()) {
 			throw new IllegalArgumentException(
 				"At least one bundle is required");
 		}
@@ -53,6 +57,9 @@ public class BundleClassLoader extends URLClassLoader {
 	@Override
 	public Enumeration<URL> findResources(String name) {
 		for (Bundle bundle : _bundles) {
+			if ((bundle.getState() & Bundle.UNINSTALLED) == Bundle.UNINSTALLED) {
+				continue;
+			}
 			try {
 				Enumeration<URL> enumeration = bundle.getResources(name);
 
@@ -62,12 +69,17 @@ public class BundleClassLoader extends URLClassLoader {
 			}
 			catch (IOException ioe) {
 			}
+
+			if (resourcePredicate != null && resourcePredicate.test(name)) {
+				return resourceFunction.apply(name);
+			}
 		}
 
 		return Collections.emptyEnumeration();
 	}
 
-	public Bundle[] getBundles() {
+	@Override
+	public List<Bundle> getBundles() {
 		return _bundles;
 	}
 
@@ -82,11 +94,34 @@ public class BundleClassLoader extends URLClassLoader {
 	}
 
 	@Override
+	public BundleClassLoader handleResources(
+		Predicate<String> predicate, Function<String, Enumeration<URL>> function) {
+
+		resourcePredicate = requireNonNull(predicate);
+		resourceFunction = requireNonNull(function);
+
+		return this;
+	}
+
+	@Override
+	public BundleClassLoader findClass(
+		Predicate<String> predicate, Function<String, Class<?>> function) {
+
+		classPredicate = requireNonNull(predicate);
+		classFunction = requireNonNull(function);
+
+		return this;
+	}
+
+	@Override
 	protected Class<?> findClass(String name) throws ClassNotFoundException {
 		Object classLoadingLock = getClassLoadingLock(name);
 
 		synchronized (classLoadingLock) {
 			for (Bundle bundle : _bundles) {
+				if ((bundle.getState() & Bundle.UNINSTALLED) == Bundle.UNINSTALLED) {
+					continue;
+				}
 				try {
 					return bundle.loadClass(name);
 				}
@@ -95,6 +130,10 @@ public class BundleClassLoader extends URLClassLoader {
 				}
 			}
 
+			if (classPredicate != null && classPredicate.test(name)) {
+				return classFunction.apply(name);
+			}
+
 			throw new ClassNotFoundException(name);
 		}
 	}
@@ -122,7 +161,62 @@ public class BundleClassLoader extends URLClassLoader {
 		}
 	}
 
-	private final Bundle[] _bundles;
+	@Override
+	public Class<?> getOrRegister(final String proxyClassName, final byte[] proxyBytes,
+								final Package pck, final ProtectionDomain protectionDomain) {
+		final String key = proxyClassName.replace('/', '.');
+		Class<?> existing = _cache.get(key);
+		if (existing == null) {
+			Object classLoadingLock = getClassLoadingLock(key);
+			synchronized (classLoadingLock) {
+				existing = _cache.get(key);
+				if (existing == null) {
+					definePackageFor(pck, protectionDomain);
+					existing = super.defineClass(proxyClassName, proxyBytes, 0, proxyBytes.length);
+					resolveClass(existing);
+					_cache.put(key, existing);
+				}
+			}
+		}
+		return existing;
+	}
+
+	private void definePackageFor(final Package model, final ProtectionDomain protectionDomain) {
+		if (model == null) {
+			return;
+		}
+		if (getPackage(model.getName()) == null) {
+			if (model.isSealed() && protectionDomain != null &&
+					protectionDomain.getCodeSource() != null &&
+					protectionDomain.getCodeSource().getLocation() != null) {
+				definePackage(
+						model.getName(),
+						model.getSpecificationTitle(),
+						model.getSpecificationVersion(),
+						model.getSpecificationVendor(),
+						model.getImplementationTitle(),
+						model.getImplementationVersion(),
+						model.getImplementationVendor(),
+						protectionDomain.getCodeSource().getLocation());
+			} else {
+				definePackage(
+						model.getName(),
+						model.getSpecificationTitle(),
+						model.getSpecificationVersion(),
+						model.getSpecificationVendor(),
+						model.getImplementationTitle(),
+						model.getImplementationVersion(),
+						model.getImplementationVendor(),
+						null);
+			}
+		}
+	}
+
+	private final List<Bundle> _bundles;
 	private final ConcurrentMap<String, Class<?>> _cache = new ConcurrentHashMap<>();
+	private volatile Predicate<String> classPredicate;
+	private volatile Function<String, Class<?>> classFunction;
+	private volatile Function<String, Enumeration<URL>> resourceFunction;
+	private volatile Predicate<String> resourcePredicate;
 
 }
\ No newline at end of file
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/loader/BundleResourcesLoader.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/loader/BundleResourcesLoader.java
deleted file mode 100644
index 621ac34..0000000
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/loader/BundleResourcesLoader.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/**
- * 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.loader;
-
-import java.io.IOException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import org.jboss.weld.resources.spi.ResourceLoader;
-import org.jboss.weld.resources.spi.ResourceLoadingException;
-import org.jboss.weld.serialization.spi.ProxyServices;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.namespace.PackageNamespace;
-import org.osgi.framework.wiring.BundleCapability;
-import org.osgi.framework.wiring.BundleWire;
-import org.osgi.framework.wiring.BundleWiring;
-
-public class BundleResourcesLoader implements ProxyServices, ResourceLoader {
-
-	public static class Builder {
-
-		public Builder(Bundle bundle, Bundle extenderBundle) {
-			this.bundle = bundle;
-			this.extenderBundle = extenderBundle;
-		}
-
-		public Builder add(Bundle bundle) {
-			additionalBundles.add(bundle);
-			return this;
-		}
-
-		public BundleResourcesLoader build() {
-			return new BundleResourcesLoader(bundle, extenderBundle, additionalBundles);
-		}
-
-		private final Bundle bundle;
-		private final Bundle extenderBundle;
-		private final List<Bundle> additionalBundles = new ArrayList<>();
-	}
-
-	BundleResourcesLoader(Bundle bundle, Bundle extenderBundle, List<Bundle> additionalBundles) {
-		BundleWiring extenderWiring = extenderBundle.adapt(BundleWiring.class);
-
-		List<Bundle> bundles = new ArrayList<>();
-
-		bundles.add(bundle);
-		bundles.add(extenderBundle);
-
-		List<BundleWire> requiredWires = extenderWiring.getRequiredWires(PackageNamespace.PACKAGE_NAMESPACE);
-
-		for (BundleWire bundleWire : requiredWires) {
-			BundleCapability capability = bundleWire.getCapability();
-			Map<String, Object> attributes = capability.getAttributes();
-			String packageName = (String)attributes.get(PackageNamespace.PACKAGE_NAMESPACE);
-			if (!packageName.startsWith("org.jboss.weld.")) {
-				continue;
-			}
-
-			Bundle wireBundle = bundleWire.getProvider().getBundle();
-			if (!bundles.contains(wireBundle)) {
-				bundles.add(wireBundle);
-			}
-		}
-
-		bundles.addAll(additionalBundles);
-
-		_classLoader = new BundleClassLoader(bundles.toArray(new Bundle[0]));
-	}
-
-
-	@Override
-	public void cleanup() {
-	}
-
-	@Override
-	public Class<?> classForName(String className) {
-		try {
-			return _classLoader.loadClass(className);
-		}
-		catch (ClassNotFoundException e) {
-			throw new ResourceLoadingException(ERROR_LOADING_CLASS + className, e);
-		}
-		catch (LinkageError e) {
-			throw new ResourceLoadingException(ERROR_LOADING_CLASS + className, e);
-		}
-		catch (TypeNotPresentException e) {
-			throw new ResourceLoadingException(ERROR_LOADING_CLASS + className, e);
-		}
-	}
-
-	@Override
-	public ClassLoader getClassLoader(Class<?> proxiedBeanType) {
-		return _classLoader;
-	}
-
-	@Override
-	public Class<?> loadBeanClass(String className) {
-		return classForName(className);
-	}
-
-	@Override
-	public URL getResource(String name) {
-		return _classLoader.getResource(name);
-	}
-
-	@Override
-	public Collection<URL> getResources(String name) {
-		try {
-			return Collections.list(_classLoader.getResources(name));
-		}
-		catch (IOException e) {
-			return Collections.emptyList();
-		}
-	}
-
-	private static final String ERROR_LOADING_CLASS = "Error loading class ";
-
-	private final ClassLoader _classLoader;
-
-}
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BeansModel.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BeansModel.java
index 4933d14..f39a5ff 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BeansModel.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BeansModel.java
@@ -18,9 +18,6 @@ import java.net.URL;
 import java.util.Collection;
 import java.util.Map;
 
-import org.jboss.weld.bootstrap.spi.BeansXml;
-import org.jboss.weld.xml.BeansXmlParser;
-
 public class BeansModel {
 
 	public BeansModel(
@@ -28,22 +25,14 @@ public class BeansModel {
 		Collection<URL> beanDescriptorURLs) {
 
 		_beans = beans;
-
-		BeansXml beansXml = BeansXml.EMPTY_BEANS_XML;
-
-		if (!beanDescriptorURLs.isEmpty()) {
-			BeansXmlParser beansXmlParser = new BeansXmlParser();
-			beansXml = beansXmlParser.parse(beanDescriptorURLs);
-		}
-
-		_beansXml = beansXml;
+		_beansXml = beanDescriptorURLs;
 	}
 
 	public Collection<String> getBeanClassNames() {
 		return _beans.keySet();
 	}
 
-	public BeansXml getBeansXml() {
+	public Collection<URL> getBeansXml() {
 		return _beansXml;
 	}
 
@@ -60,6 +49,6 @@ public class BeansModel {
 	}
 
 	private final Map<String, OSGiBean> _beans;
-	private final BeansXml _beansXml;
+	private final Collection<URL> _beansXml;
 
 }
\ No newline at end of file
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ComponentPropertiesModel.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ComponentPropertiesModel.java
index 59c691d..2b7deb3 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ComponentPropertiesModel.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ComponentPropertiesModel.java
@@ -26,7 +26,6 @@ import java.util.Set;
 import org.osgi.service.cdi.ConfigurationPolicy;
 import org.osgi.service.cdi.MaximumCardinality;
 import org.osgi.service.cdi.annotations.PID;
-import org.osgi.service.cdi.runtime.dto.template.ConfigurationTemplateDTO;
 
 public class ComponentPropertiesModel {
 
@@ -98,7 +97,7 @@ public class ComponentPropertiesModel {
 		return _injectionPointType;
 	}
 
-	public ConfigurationTemplateDTO toDTO() {
+	public ExtendedConfigurationTemplateDTO toDTO() {
 		ExtendedConfigurationTemplateDTO dto = new ExtendedConfigurationTemplateDTO();
 
 		dto.beanClass = _beanClass;
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/provider/CDIProvider.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/provider/CDIProvider.java
index c350c0c..dc3b430 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/provider/CDIProvider.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/provider/CDIProvider.java
@@ -14,19 +14,21 @@
 
 package org.apache.aries.cdi.container.internal.provider;
 
+import static java.util.Optional.ofNullable;
+
 import java.lang.annotation.Annotation;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.Iterator;
-import java.util.Optional;
 
 import javax.enterprise.inject.Instance;
 import javax.enterprise.inject.spi.BeanManager;
 import javax.enterprise.inject.spi.CDI;
 import javax.enterprise.util.TypeLiteral;
 
-import org.apache.aries.cdi.container.internal.Activator;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleReference;
+import org.osgi.framework.Constants;
 
 public class CDIProvider implements javax.enterprise.inject.spi.CDIProvider {
 
@@ -44,22 +46,24 @@ public class CDIProvider implements javax.enterprise.inject.spi.CDIProvider {
 
 		@Override
 		public BeanManager getBeanManager() {
-			ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
-
-			if (contextClassLoader instanceof BundleReference) {
-				BundleReference br = (BundleReference)contextClassLoader;
-
-				Bundle bundle = br.getBundle();
-
-				return Optional.ofNullable(
-					Activator.ccr.getContainerState(bundle)
-				).map(
-					cs -> cs.beanManager()
-				).orElse(null);
-			}
-
-			throw new IllegalStateException(
-				"This method can only be used when the Thread context class loader has been set to a Bundle's classloader.");
+			Bundle bundle = ofNullable(
+				Thread.currentThread().getContextClassLoader()
+			).map(BundleReference.class::cast).map(BundleReference::getBundle).orElseThrow(
+				() -> new IllegalStateException(
+					"No Bundle found for Thread.ContextClassLoader " + Thread.currentThread())
+			);
+
+			return Arrays.stream(bundle.getRegisteredServices()).filter(
+				sr -> ofNullable(
+					sr.getProperty(Constants.OBJECTCLASS)
+				).map(String[].class::cast).map(Arrays::asList).filter(
+					list -> list.contains(BeanManager.class.getName())
+				).isPresent()
+			).findFirst().map(
+				bundle.getBundleContext()::getService
+			).map(BeanManager.class::cast).orElseThrow(
+				() -> new IllegalStateException("No BeanManager service for bundle " + bundle)
+			);
 		}
 
 		@Override
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Annotates.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Annotates.java
index e4facbe..e2b7035 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Annotates.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Annotates.java
@@ -14,6 +14,8 @@
 
 package org.apache.aries.cdi.container.internal.util;
 
+import static org.apache.aries.cdi.container.internal.util.Reflection.*;
+
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Executable;
 import java.lang.reflect.Parameter;
@@ -46,7 +48,6 @@ import javax.inject.Named;
 import javax.inject.Qualifier;
 import javax.inject.Scope;
 
-import org.jboss.weld.util.Types;
 import org.osgi.service.cdi.ServiceScope;
 import org.osgi.service.cdi.annotations.Service;
 import org.osgi.service.cdi.annotations.ServiceInstance;
@@ -94,8 +95,7 @@ public class Annotates {
 		}
 		else if (instance instanceof Annotated) {
 			Annotated annotated = (Annotated)instance;
-
-			declaringClass = Types.getRawTypes(new Type[] {annotated.getBaseType()})[0];
+			declaringClass = getRawType(annotated.getBaseType());
 		}
 		else if (instance instanceof ProcessManagedBean) {
 			ProcessManagedBean<?> bean = (ProcessManagedBean<?>)instance;
@@ -256,9 +256,7 @@ public class Annotates {
 	}
 
 	public static List<String> serviceClassNames(Annotated annotated) {
-		return serviceClasses(annotated).stream().map(
-			st -> st.getName()
-		).sorted().collect(Collectors.toList());
+		return serviceClasses(annotated).stream().map(Class::getName).sorted().collect(Collectors.toList());
 	}
 
 	public static ServiceScope serviceScope(Annotated annotated) {
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/package-info.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/package-info.java
index fbc8be2..66ef70b 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/package-info.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/package-info.java
@@ -60,7 +60,7 @@
 	}
 )
 @Capability(
-	attribute = "register:=javax.enterprise.inject.se.SeContainerInitializer",
+	attribute = "register:=org.apache.aries.cdi.container.internal.provider.SeContainerInitializer",
 	namespace = "osgi.serviceloader",
 	name = "javax.enterprise.inject.se.SeContainerInitializer",
 	uses = {
@@ -69,7 +69,7 @@
 	}
 )
 @Capability(
-	attribute = "register:=javax.enterprise.inject.spi.CDIProvider",
+	attribute = "register:=org.apache.aries.cdi.container.internal.provider.CDIProvider",
 	namespace = "osgi.serviceloader",
 	name = "javax.enterprise.inject.spi.CDIProvider",
 	uses = {
@@ -82,6 +82,11 @@
 	namespace = ExtenderNamespace.EXTENDER_NAMESPACE,
 	name = "osgi.serviceloader.registrar"
 )
+@Requirement(
+	namespace = ServiceNamespace.SERVICE_NAMESPACE,
+	filter = "(&(objectClass=javax.enterprise.inject.se.SeContainerInitializer)(aries.cdi.spi=*))",
+	effective = "active"
+)
 package org.apache.aries.cdi.container;
 
 import org.osgi.annotation.bundle.Capability;
diff --git a/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/ContainerBootstrapTest.java b/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/ContainerBootstrapTest.java
index 74b70db..2170176 100644
--- a/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/ContainerBootstrapTest.java
+++ b/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/ContainerBootstrapTest.java
@@ -14,14 +14,19 @@
 
 package org.apache.aries.cdi.container.internal.phase;
 
-import static org.junit.Assert.*;
-import static org.mockito.Mockito.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.CopyOnWriteArrayList;
 
+import javax.enterprise.inject.se.SeContainerInitializer;
+
 import org.apache.aries.cdi.container.internal.container.CheckedCallback;
 import org.apache.aries.cdi.container.internal.container.ConfigurationListener;
 import org.apache.aries.cdi.container.internal.container.ContainerBootstrap;
@@ -35,7 +40,9 @@ import org.apache.aries.cdi.container.internal.util.Logs;
 import org.apache.aries.cdi.container.test.BaseCDIBundleTest;
 import org.apache.aries.cdi.container.test.TestUtil;
 import org.apache.aries.cdi.container.test.beans.FooService;
+import org.junit.Ignore;
 import org.junit.Test;
+import org.osgi.framework.ServiceObjects;
 import org.osgi.framework.wiring.BundleWiring;
 import org.osgi.namespace.extender.ExtenderNamespace;
 import org.osgi.service.cdi.CDIConstants;
@@ -47,6 +54,7 @@ import org.osgi.util.tracker.ServiceTracker;
 
 public class ContainerBootstrapTest extends BaseCDIBundleTest {
 
+	@Ignore
 	@Test
 	public void test_publishServices() throws Exception {
 		Map<String, Object> attributes = new HashMap<>();
@@ -73,8 +81,11 @@ public class ContainerBootstrapTest extends BaseCDIBundleTest {
 		componentDTO.instances = new CopyOnWriteArrayList<>();
 		componentDTO.template = containerState.containerDTO().template.components.get(0);
 
+		@SuppressWarnings("unchecked")
+		ServiceTracker<SeContainerInitializer, ServiceObjects<SeContainerInitializer>> serviceTracker = mock(ServiceTracker.class);
+
 		ContainerBootstrap containerBootstrap = new ContainerBootstrap(
-			containerState,
+			containerState, serviceTracker,
 			new ConfigurationListener.Builder(containerState),
 			new SingleComponent.Builder(containerState, null),
 			new FactoryComponent.Builder(containerState, null));
diff --git a/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/TemplatesTests.java b/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/TemplatesTests.java
index b4d4892..4e4b7fd 100644
--- a/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/TemplatesTests.java
+++ b/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/TemplatesTests.java
@@ -14,10 +14,12 @@
 
 package org.apache.aries.cdi.container.internal.phase;
 
+import static java.util.Collections.singletonList;
 import static org.junit.Assert.*;
 import static org.mockito.Mockito.*;
 
 import java.util.Arrays;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -60,7 +62,7 @@ public class TemplatesTests extends BaseCDIBundleTest {
 
 		assertNotNull(containerDTO.template);
 		List<ComponentTemplateDTO> components = TestUtil.sort(
-			containerDTO.template.components, (a, b) -> a.name.compareTo(b.name));
+			containerDTO.template.components, Comparator.comparing(a -> a.name));
 		assertEquals(2, components.size());
 
 		{
@@ -134,7 +136,7 @@ public class TemplatesTests extends BaseCDIBundleTest {
 
 		assertNotNull(containerDTO.template);
 		List<ComponentTemplateDTO> components = TestUtil.sort(
-			containerDTO.template.components, (a, b) -> a.name.compareTo(b.name));
+			containerDTO.template.components, Comparator.comparing(a -> a.name));
 		assertEquals(3, components.size());
 
 		{
@@ -175,7 +177,7 @@ public class TemplatesTests extends BaseCDIBundleTest {
 				ActivationTemplateDTO at = ct.activations.get(0);
 				assertEquals(Maps.of(), at.properties);
 				assertEquals(ServiceScope.SINGLETON, at.scope);
-				assertEquals(Arrays.asList("org.apache.aries.cdi.container.test.beans.Foo"), at.serviceClasses);
+				assertEquals(singletonList("org.apache.aries.cdi.container.test.beans.Foo"), at.serviceClasses);
 			}
 
 			assertEquals(2, ct.beans.size());
@@ -219,7 +221,7 @@ public class TemplatesTests extends BaseCDIBundleTest {
 		assertNotNull(containerDTO.template);
 
 		List<ComponentTemplateDTO> components = TestUtil.sort(
-			containerDTO.template.components, (a, b) -> a.name.compareTo(b.name));
+			containerDTO.template.components, Comparator.comparing(a -> a.name));
 		assertEquals(3, components.size());
 
 		{ // component "barService"
diff --git a/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/MockBeanDeploymentArchive.java b/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/MockBeanDeploymentArchive.java
deleted file mode 100644
index 0558319..0000000
--- a/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/MockBeanDeploymentArchive.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * 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.test;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-import org.jboss.weld.bootstrap.api.ServiceRegistry;
-import org.jboss.weld.bootstrap.api.helpers.SimpleServiceRegistry;
-import org.jboss.weld.bootstrap.spi.BeanDeploymentArchive;
-import org.jboss.weld.bootstrap.spi.BeansXml;
-import org.jboss.weld.ejb.spi.EjbDescriptor;
-
-public class MockBeanDeploymentArchive implements BeanDeploymentArchive {
-
-	public MockBeanDeploymentArchive(String id, String... beanClasses) {
-		_id = id;
-		_beanClasses = Arrays.asList(beanClasses);
-	}
-
-	@Override
-	public Collection<BeanDeploymentArchive> getBeanDeploymentArchives() {
-		return Collections.emptyList();
-	}
-
-	@Override
-	public Collection<String> getBeanClasses() {
-		return _beanClasses;
-	}
-
-	@Override
-	public BeansXml getBeansXml() {
-		return BeansXml.EMPTY_BEANS_XML;
-	}
-
-	@Override
-	public Collection<EjbDescriptor<?>> getEjbs() {
-		return Collections.emptyList();
-	}
-
-	@Override
-	public ServiceRegistry getServices() {
-		return _services;
-	}
-
-	@Override
-	public String getId() {
-		return _id;
-	}
-
-	private final List<String> _beanClasses;
-	private final String _id;
-	private final ServiceRegistry _services = new SimpleServiceRegistry();
-
-}
\ No newline at end of file
diff --git a/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/MockCdiContainer.java b/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/MockCdiContainer.java
deleted file mode 100644
index 331b726..0000000
--- a/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/MockCdiContainer.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/**
- * 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.test;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
-
-import javax.enterprise.inject.Any;
-import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.inject.spi.Extension;
-
-import org.apache.aries.cdi.container.internal.container.ContainerDeployment;
-import org.apache.aries.cdi.container.internal.container.ContainerEnvironment;
-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.junit.Assert;
-
-public class MockCdiContainer implements AutoCloseable {
-
-	public MockCdiContainer(String name, String... beanClasses) {
-		this(name, Collections.emptyList(), beanClasses);
-	}
-
-	public MockCdiContainer(String name, List<Metadata<Extension>> extensions, String... beanClasses) {
-		_bda = new MockBeanDeploymentArchive(name, beanClasses);
-
-		Deployment deployment = new ContainerDeployment(extensions, _bda);
-
-		WeldBootstrap bootstrap = new WeldBootstrap();
-
-		bootstrap.startExtensions(extensions);
-		bootstrap.startContainer(new ContainerEnvironment(), deployment);
-		bootstrap.startInitialization();
-		bootstrap.deployBeans();
-		bootstrap.validateBeans();
-		bootstrap.endInitialization();
-
-		_bootstrap = bootstrap;
-	}
-
-	@Override
-	public void close() {
-		_bootstrap.shutdown();
-	}
-
-	public Bean<?> getBean(Class<?> clazz) {
-		final BeanManager managerImpl = getBeanManager();
-
-		Set<javax.enterprise.inject.spi.Bean<?>> beans =
-			managerImpl.getBeans(clazz, Any.Literal.INSTANCE);
-
-		Assert.assertFalse(beans.isEmpty());
-
-		return managerImpl.resolve(beans);
-	}
-
-	public BeanManager getBeanManager() {
-		if (_beanManager != null) {
-			return _beanManager;
-		}
-
-		return _beanManager = _bootstrap.getManager(_bda);
-	}
-
-	public WeldBootstrap getBootstrap() {
-		return _bootstrap;
-	}
-
-	private final BeanDeploymentArchive _bda;
-	private BeanManager _beanManager;
-	private final WeldBootstrap _bootstrap;
-
-}
\ No newline at end of file
diff --git a/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/MockInjectionPoint.java b/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/MockInjectionPoint.java
index 413062b..edf0c55 100644
--- a/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/MockInjectionPoint.java
+++ b/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/MockInjectionPoint.java
@@ -28,8 +28,6 @@ import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.InjectionPoint;
 import javax.inject.Qualifier;
 
-import org.jboss.weld.exceptions.IllegalArgumentException;
-
 public class MockInjectionPoint implements InjectionPoint {
 
 	public MockInjectionPoint(AnnotatedElement annotatedElement) {
diff --git a/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/TestUtil.java b/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/TestUtil.java
index 293a4e9..5da1cd3 100644
--- a/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/TestUtil.java
+++ b/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/TestUtil.java
@@ -41,8 +41,6 @@ import org.apache.aries.cdi.container.internal.model.BeansModel;
 import org.apache.aries.cdi.container.internal.util.Filters;
 import org.apache.aries.cdi.container.internal.util.Logs;
 import org.apache.aries.cdi.container.internal.util.Sfl4jLogger;
-import org.jboss.weld.resources.spi.ResourceLoader;
-import org.jboss.weld.serialization.spi.ProxyServices;
 import org.mockito.stubbing.Answer;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
@@ -71,7 +69,7 @@ import org.osgi.util.tracker.ServiceTracker;
 public class TestUtil {
 
 	public static <T extends Comparable<T>> List<T> sort(Collection<T> set) {
-		return sort(set, (c1, c2) -> c1.getClass().getName().compareTo(c2.getClass().getName()));
+		return sort(set, Comparator.comparing(c -> c.getClass().getName()));
 	}
 
 	public static <T> List<T> sort(Collection<T> set, Comparator<T> comparator) {
@@ -126,12 +124,6 @@ public class TestUtil {
 			public BeansModel beansModel() {
 				return beansModel;
 			}
-
-			@Override
-			public <T extends ResourceLoader & ProxyServices> T loader() {
-				return null;
-			}
-
 		};
 	}
 


[aries-cdi] 02/27: use our own logic for discover to avoid double CDI container startup

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rotty3000 pushed a commit to branch rotty3000/cdi-spi
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit 3c4153144b30a37f22ccce340fc154e53567cdf3
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Wed Nov 20 14:08:10 2019 -0500

    use our own logic for discover to avoid double CDI container startup
    
    Signed-off-by: Raymond Augé <ro...@apache.org>
---
 .../internal/container/ContainerDiscovery.java     |  56 ---
 .../internal/container/ContainerState.java         |  10 +-
 .../container/internal/container/Discovery.java    | 397 +++++++++++++++++
 .../internal/container/DiscoveryExtension.java     | 496 ---------------------
 .../internal/container/RuntimeExtension.java       |  28 +-
 .../internal/model/BeansModelBuilder.java          |   5 +-
 .../internal/model/ComponentPropertiesModel.java   |   8 +-
 .../model/ExtendedActivationTemplateDTO.java       |   4 +-
 .../model/ExtendedComponentTemplateDTO.java        |   8 +-
 .../container/internal/model/FactoryActivator.java |   2 +-
 .../cdi/container/internal/model/OSGiBean.java     |   6 +-
 .../container/internal/model/ReferenceModel.java   |  39 +-
 .../container/internal/model/SingleActivator.java  |   2 +-
 .../cdi/container/internal/util/Annotates.java     |  81 ++++
 .../cdi/container/internal/util/Reflection.java    |  87 ++++
 .../ReferenceModel_BeanServiceObjectsTest.java     |  92 ++--
 .../model/ReferenceModel_PropertiesTest.java       |  48 +-
 .../model/ReferenceModel_ServiceReferenceTest.java |  84 ++--
 .../internal/model/ReferenceModel_ServiceTest.java |  88 ++--
 .../internal/model/ReferenceModel_TupleTest.java   |  68 +--
 .../container/internal/phase/TemplatesTests.java   |   4 +-
 .../aries/cdi/test/cases/ConfigurationTests.java   |   2 +
 22 files changed, 803 insertions(+), 812 deletions(-)

diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerDiscovery.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerDiscovery.java
deleted file mode 100644
index ecaa8d1..0000000
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerDiscovery.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * 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.Collections;
-import java.util.List;
-
-import javax.enterprise.inject.spi.Extension;
-
-import org.apache.aries.cdi.container.internal.model.BeansModel;
-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;
-
-public class ContainerDiscovery {
-
-	public ContainerDiscovery(ContainerState containerState) {
-		String id = containerState.id() + "-discovery";
-
-		BeansModel beansModel = containerState.beansModel();
-
-		BeanDeploymentArchive beanDeploymentArchive = new ContainerDeploymentArchive(
-			containerState.loader(), id, beansModel.getBeanClassNames(),
-			beansModel.getBeansXml());
-
-		ExtensionMetadata extension = new ExtensionMetadata(
-			new DiscoveryExtension(containerState), id);
-
-		List<Metadata<Extension>> extensions = Collections.singletonList(extension);
-
-		Deployment deployment = new ContainerDeployment(
-			Collections.singletonList(extension), beanDeploymentArchive);
-
-		WeldBootstrap _bootstrap = new WeldBootstrap();
-
-		_bootstrap.startExtensions(extensions);
-		_bootstrap.startContainer(id, new ContainerEnvironment(), deployment);
-		_bootstrap.startInitialization();
-		_bootstrap.deployBeans();
-		_bootstrap.shutdown();
-	}
-
-}
\ No newline at end of file
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java
index a6c072f..f04cb9e 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java
@@ -14,11 +14,9 @@
 
 package org.apache.aries.cdi.container.internal.container;
 
-import static org.apache.aries.cdi.container.internal.util.Filters.asFilter;
-import static org.osgi.namespace.extender.ExtenderNamespace.EXTENDER_NAMESPACE;
-import static org.osgi.service.cdi.CDIConstants.CDI_CAPABILITY_NAME;
-import static org.osgi.service.cdi.CDIConstants.CDI_CONTAINER_ID;
-import static org.osgi.service.cdi.CDIConstants.CDI_EXTENSION_PROPERTY;
+import static org.apache.aries.cdi.container.internal.util.Filters.*;
+import static org.osgi.namespace.extender.ExtenderNamespace.*;
+import static org.osgi.service.cdi.CDIConstants.*;
 
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
@@ -200,7 +198,7 @@ public class ContainerState {
 		_bundleClassLoader = bundleWiring.getClassLoader();
 
 		try {
-			new ContainerDiscovery(this);
+			new Discovery(this).discover();
 		}
 		catch (Exception e) {
 			_log.error(l -> l.error("CCR Discovery resulted in errors on {}", bundle, e));
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Discovery.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Discovery.java
new file mode 100644
index 0000000..bd1cb97
--- /dev/null
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Discovery.java
@@ -0,0 +1,397 @@
+/**
+ * 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.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.context.Dependent;
+import javax.enterprise.event.Observes;
+import javax.enterprise.event.ObservesAsync;
+import javax.enterprise.inject.Disposes;
+import javax.enterprise.inject.Produces;
+import javax.enterprise.inject.spi.Annotated;
+import javax.enterprise.inject.spi.AnnotatedMember;
+import javax.enterprise.inject.spi.AnnotatedMethod;
+import javax.enterprise.inject.spi.AnnotatedParameter;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.aries.cdi.container.internal.annotated.AnnotatedTypeImpl;
+import org.apache.aries.cdi.container.internal.model.BeansModel;
+import org.apache.aries.cdi.container.internal.model.ComponentPropertiesModel;
+import org.apache.aries.cdi.container.internal.model.ExtendedActivationTemplateDTO;
+import org.apache.aries.cdi.container.internal.model.ExtendedComponentTemplateDTO;
+import org.apache.aries.cdi.container.internal.model.ExtendedConfigurationTemplateDTO;
+import org.apache.aries.cdi.container.internal.model.OSGiBean;
+import org.apache.aries.cdi.container.internal.model.ReferenceModel;
+import org.apache.aries.cdi.container.internal.model.ReferenceModel.Builder;
+import org.apache.aries.cdi.container.internal.util.Annotates;
+import org.apache.aries.cdi.container.internal.util.Reflection;
+import org.osgi.service.cdi.ComponentType;
+import org.osgi.service.cdi.ConfigurationPolicy;
+import org.osgi.service.cdi.MaximumCardinality;
+import org.osgi.service.cdi.ServiceScope;
+import org.osgi.service.cdi.annotations.ComponentProperties;
+import org.osgi.service.cdi.annotations.ComponentScoped;
+import org.osgi.service.cdi.annotations.FactoryComponent;
+import org.osgi.service.cdi.annotations.PID;
+import org.osgi.service.cdi.annotations.Reference;
+import org.osgi.service.cdi.annotations.SingleComponent;
+import org.osgi.service.cdi.reference.BindBeanServiceObjects;
+import org.osgi.service.cdi.reference.BindService;
+import org.osgi.service.cdi.reference.BindServiceReference;
+import org.osgi.service.cdi.runtime.dto.template.ComponentTemplateDTO;
+
+public class Discovery {
+
+	private static final List<Type> BIND_TYPES = Arrays.asList(BindService.class, BindBeanServiceObjects.class, BindServiceReference.class);
+
+	public Discovery(ContainerState containerState) {
+		_containerState = containerState;
+		_beansModel = _containerState.beansModel();
+		_containerTemplate = _containerState.containerDTO().template.components.get(0);
+	}
+
+	public void discover() {
+		_beansModel.getOSGiBeans().stream().forEach(osgiBean -> {
+			osgiBean.found(true);
+
+			AnnotatedType<?> annotatedType = new AnnotatedTypeImpl<>(osgiBean.getBeanClass());
+
+			try {
+				String beanName = Annotates.beanName(annotatedType);
+				Class<? extends Annotation> beanScope = Annotates.beanScope(annotatedType);
+				Map<String, Object> componentProperties = Annotates.componentProperties(annotatedType);
+				ServiceScope serviceScope = Annotates.serviceScope(annotatedType);
+				List<String> serviceTypes = Annotates.serviceClassNames(annotatedType);
+
+				if (annotatedType.isAnnotationPresent(SingleComponent.class)) {
+					doFactoryOrSingleComponent(osgiBean, osgiBean.getBeanClass(), annotatedType, beanName, serviceTypes, serviceScope, componentProperties, ComponentType.SINGLE);
+				}
+				else if (annotatedType.isAnnotationPresent(FactoryComponent.class)) {
+					doFactoryOrSingleComponent(osgiBean, osgiBean.getBeanClass(), annotatedType, beanName, serviceTypes, serviceScope, componentProperties, ComponentType.FACTORY);
+				}
+				else if (annotatedType.isAnnotationPresent(ComponentScoped.class)) {
+					_componentScoped.add(osgiBean);
+				}
+				else {
+					discoverActivations(osgiBean, osgiBean.getBeanClass(), annotatedType, null, beanScope, serviceTypes, serviceScope, componentProperties);
+				}
+			}
+			catch (Exception e) {
+				_containerState.error(e);
+
+				return;
+			}
+
+			annotatedType.getConstructors().stream().filter(this::isInject).flatMap(annotatedConstructor -> annotatedConstructor.getParameters().stream()).forEach(
+				annotatedParameter ->
+					processAnnotated(annotatedParameter, annotatedParameter.getBaseType(), Annotates.qualifiers(annotatedParameter), osgiBean)
+			);
+
+			annotatedType.getFields().stream().filter(this::isInject).forEach(
+				annotatedField ->
+					processAnnotated(annotatedField, annotatedField.getBaseType(), Annotates.qualifiers(annotatedField), osgiBean)
+			);
+
+			annotatedType.getFields().stream().filter(this::isProduces).forEach(
+				annotatedField -> {
+					Class<? extends Annotation> beanScope = Annotates.beanScope(annotatedField);
+					Map<String, Object> componentProperties = Annotates.componentProperties(annotatedField);
+					ServiceScope serviceScope = Annotates.serviceScope(annotatedField);
+					List<String> serviceTypes = Annotates.serviceClassNames(annotatedField);
+
+					discoverActivations(osgiBean, osgiBean.getBeanClass(), annotatedField, annotatedField, beanScope, serviceTypes, serviceScope, componentProperties);
+				}
+			);
+
+			annotatedType.getMethods().stream().forEach(annotatedMethod -> {
+				if (isInjectOrProduces(annotatedMethod)) {
+					annotatedMethod.getParameters().stream().forEach(
+						annotatedParameter -> processAnnotated(annotatedParameter, annotatedParameter.getBaseType(), Annotates.qualifiers(annotatedParameter), osgiBean)
+					);
+
+					if (isProduces(annotatedMethod)) {
+						Class<? extends Annotation> beanScope = Annotates.beanScope(annotatedMethod);
+						Map<String, Object> componentProperties = Annotates.componentProperties(annotatedMethod);
+						ServiceScope serviceScope = Annotates.serviceScope(annotatedMethod);
+						List<String> serviceTypes = Annotates.serviceClassNames(annotatedMethod);
+
+						discoverActivations(osgiBean, osgiBean.getBeanClass(), annotatedMethod, annotatedMethod, beanScope, serviceTypes, serviceScope, componentProperties);
+					}
+				}
+				else if (isDisposeOrObserves(annotatedMethod)) {
+					annotatedMethod.getParameters().subList(1, annotatedMethod.getParameters().size()).stream().forEach(
+						annotatedParameter -> processAnnotated(annotatedParameter, annotatedParameter.getBaseType(), Annotates.qualifiers(annotatedParameter), osgiBean)
+					);
+				}
+			});
+		});
+
+		postProcessComponentScopedBeans();
+	}
+
+	<X> boolean isInject(AnnotatedMember<X> annotatedMember) {
+		return (annotatedMember.isAnnotationPresent(Inject.class) && !annotatedMember.isStatic());
+	}
+
+	<X> boolean isInjectOrProduces(AnnotatedMember<X> annotatedMember) {
+		return (annotatedMember.isAnnotationPresent(Inject.class) && !annotatedMember.isStatic()) ||
+			annotatedMember.isAnnotationPresent(Produces.class);
+	}
+
+	<X> boolean isProduces(AnnotatedMember<X> annotatedMember) {
+		return annotatedMember.isAnnotationPresent(Produces.class);
+	}
+
+	<X> boolean isDisposeOrObserves(AnnotatedMethod<X> annotatedMethod) {
+		return !annotatedMethod.getParameters().isEmpty() && (annotatedMethod.getParameters().get(0).isAnnotationPresent(Disposes.class) ||
+			annotatedMethod.getParameters().get(0).isAnnotationPresent(Observes.class) ||
+			annotatedMethod.getParameters().get(0).isAnnotationPresent(ObservesAsync.class));
+	}
+
+	<X> void processAnnotated(Annotated annotated, Type injectionPointType, Set<Annotation> qualifiers, OSGiBean osgiBean) {
+		if (BIND_TYPES.contains(Reflection.getRawType(annotated.getBaseType()))) {
+			Builder builder = new ReferenceModel.Builder(annotated);
+
+			try {
+				ReferenceModel referenceModel = builder.type(injectionPointType).build();
+
+				osgiBean.addReference(referenceModel.toDTO());
+			}
+			catch (Exception e) {
+				_containerState.error(e);
+			}
+		}
+		else {
+			Reference reference = annotated.getAnnotation(Reference.class);
+			ComponentProperties componentProperties = annotated.getAnnotation(ComponentProperties.class);
+
+			if (reference != null) {
+				doReference(osgiBean, annotated, injectionPointType, reference, componentProperties);
+			}
+			else if (componentProperties != null) {
+				doComponentProperties(osgiBean, injectionPointType, qualifiers);
+			}
+		}
+	}
+
+	void postProcessComponentScopedBeans() {
+		_containerState.containerDTO().template.components.stream().filter(
+			template -> template.type != ComponentType.CONTAINER
+		).map(
+			template -> (ExtendedComponentTemplateDTO)template
+		).forEach(
+			template -> {
+
+				_componentScoped.forEach(
+					osgiBean -> {
+						if (osgiBean.getComponent() == null) {
+							osgiBean.setComponent(_containerState, template);
+						}
+
+						String className = osgiBean.getBeanClass().getName();
+						if (!template.beans.contains(className)) {
+							template.beans.add(className);
+						}
+					}
+				);
+			}
+		);
+	}
+
+	void doComponentProperties(OSGiBean osgiBean, Type injectionPointType, Set<Annotation> qualifiers) {
+		try {
+			ComponentPropertiesModel configurationModel = new ComponentPropertiesModel.Builder(
+				injectionPointType
+			).declaringClass(
+				osgiBean.getBeanClass()
+			).qualifiers(
+				qualifiers
+			).build();
+
+			osgiBean.addConfiguration(_containerState, configurationModel.toDTO());
+		}
+		catch (Exception e) {
+			_containerState.error(e);
+		}
+	}
+
+	void discoverActivations(OSGiBean osgiBean, Class<?> declaringClass, Annotated annotated, AnnotatedMember<?> producer, Class<? extends Annotation> scope, List<String> serviceTypeNames, ServiceScope serviceScope, Map<String, Object> componentProperties) {
+		String className = declaringClass.getName();
+
+		if (!_containerTemplate.beans.contains(className)) {
+			_containerTemplate.beans.add(className);
+		}
+
+		if (!serviceTypeNames.isEmpty()) {
+			if (!scope.equals(ApplicationScoped.class) &&
+				!scope.equals(Dependent.class)) {
+
+				_containerState.error(
+					new IllegalStateException(
+						String.format(
+							"@Service can only be used on @ApplicationScoped, @Dependent, @SingleComponent, and @FactoryComponent: %s",
+							osgiBean.getBeanClass())));
+
+				return;
+			}
+
+			ExtendedActivationTemplateDTO activationTemplate = new ExtendedActivationTemplateDTO();
+			activationTemplate.cdiScope = scope;
+			activationTemplate.declaringClass = declaringClass;
+			activationTemplate.producer = producer;
+			activationTemplate.properties = componentProperties;
+			activationTemplate.scope = serviceScope;
+			activationTemplate.serviceClasses = serviceTypeNames;
+
+			_containerTemplate.activations.add(activationTemplate);
+		}
+
+		osgiBean.setComponent(_containerState, _containerTemplate);
+	}
+
+	void doFactoryOrSingleComponent(
+			OSGiBean osgiBean, Class<?> declaringClass, Annotated annotated, String beanName,
+			List<String> serviceTypes, ServiceScope serviceScope,
+			Map<String, Object> componentProperties, ComponentType componentType) {
+
+		Set<Annotation> qualifiers = Annotates.qualifiers(annotated);
+		qualifiers.removeIf(Named.class::isInstance);
+
+		ExtendedComponentTemplateDTO componentTemplate = new ExtendedComponentTemplateDTO();
+		componentTemplate.activations = new CopyOnWriteArrayList<>();
+
+		ExtendedActivationTemplateDTO activationTemplate = new ExtendedActivationTemplateDTO();
+		activationTemplate.declaringClass = declaringClass;
+		activationTemplate.properties = Collections.emptyMap();
+		activationTemplate.scope = serviceScope;
+		activationTemplate.serviceClasses = serviceTypes;
+
+		componentTemplate.activations.add(activationTemplate);
+
+		componentTemplate.beanClass = declaringClass;
+		componentTemplate.qualifiers = qualifiers;
+		componentTemplate.beans = new CopyOnWriteArrayList<>();
+		componentTemplate.configurations = new CopyOnWriteArrayList<>();
+		componentTemplate.name = beanName;
+		componentTemplate.properties = componentProperties;
+		componentTemplate.references = new CopyOnWriteArrayList<>();
+		componentTemplate.type = componentType;
+
+		annotated.getAnnotations(PID.class).stream().forEach(
+			PID -> {
+				String pid = PID.value();
+
+				ExtendedConfigurationTemplateDTO configurationTemplate = new ExtendedConfigurationTemplateDTO();
+
+				configurationTemplate.declaringClass = declaringClass;
+				configurationTemplate.maximumCardinality = MaximumCardinality.ONE;
+				configurationTemplate.pid = Optional.of(pid).map(
+					s -> (s.equals("$") || s.equals("")) ? componentTemplate.name : s
+				).orElse(componentTemplate.name);
+
+				if (componentType == ComponentType.SINGLE) {
+					configurationTemplate.pid = (pid.equals("$") || pid.equals("")) ? componentTemplate.name : pid;
+				}
+
+				configurationTemplate.policy = PID.policy();
+
+				componentTemplate.configurations.add(configurationTemplate);
+			}
+		);
+
+		if (componentType == ComponentType.SINGLE) {
+			if (componentTemplate.configurations.isEmpty()) {
+				ExtendedConfigurationTemplateDTO configurationTemplate = new ExtendedConfigurationTemplateDTO();
+
+				configurationTemplate.declaringClass = declaringClass;
+				configurationTemplate.maximumCardinality = MaximumCardinality.ONE;
+				configurationTemplate.pid = componentTemplate.name;
+				configurationTemplate.policy = ConfigurationPolicy.OPTIONAL;
+
+				componentTemplate.configurations.add(configurationTemplate);
+			}
+		}
+		else {
+			ExtendedConfigurationTemplateDTO configurationTemplate = new ExtendedConfigurationTemplateDTO();
+
+			configurationTemplate.declaringClass = declaringClass;
+			configurationTemplate.maximumCardinality = MaximumCardinality.MANY;
+			configurationTemplate.pid = Optional.ofNullable(
+				annotated.getAnnotation(FactoryComponent.class)
+			).map(FactoryComponent::value).map(
+				v -> (v.equals("$") || v.equals("")) ? componentTemplate.name : v
+			).orElse(componentTemplate.name);
+			configurationTemplate.policy = ConfigurationPolicy.REQUIRED;
+
+			componentTemplate.configurations.add(configurationTemplate);
+		}
+
+		componentTemplate.beans.add(declaringClass.getName());
+
+		_containerState.containerDTO().template.components.add(componentTemplate);
+
+		osgiBean.setComponent(_containerState, componentTemplate);
+	}
+
+	void doReference(OSGiBean osgiBean, Annotated annotated, Type injectionPointType, Reference reference, ComponentProperties componentProperties) {
+		if (componentProperties != null) {
+			_containerState.error(
+				new IllegalArgumentException(
+					String.format(
+						"Cannot use @Reference and @Configuration on the same injection point {}",
+						injectionPointType))
+			);
+
+			return;
+		}
+
+		Builder builder = null;
+
+		if (annotated instanceof AnnotatedParameter) {
+			builder = new ReferenceModel.Builder(annotated);
+		}
+		else {
+			builder = new ReferenceModel.Builder(annotated);
+		}
+
+		try {
+			ReferenceModel referenceModel = builder.type(injectionPointType).build();
+
+			osgiBean.addReference(referenceModel.toDTO());
+		}
+		catch (Exception e) {
+			_containerState.error(e);
+		}
+	}
+
+	private final BeansModel _beansModel;
+	private final Set<OSGiBean> _componentScoped = new HashSet<>();
+	private final ComponentTemplateDTO _containerTemplate;
+	private final ContainerState _containerState;
+
+}
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/DiscoveryExtension.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/DiscoveryExtension.java
deleted file mode 100644
index a4fa150..0000000
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/DiscoveryExtension.java
+++ /dev/null
@@ -1,496 +0,0 @@
-/**
- * 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.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
-import java.util.concurrent.CopyOnWriteArrayList;
-
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.context.Dependent;
-import javax.enterprise.event.Observes;
-import javax.enterprise.inject.spi.AfterBeanDiscovery;
-import javax.enterprise.inject.spi.Annotated;
-import javax.enterprise.inject.spi.AnnotatedField;
-import javax.enterprise.inject.spi.AnnotatedParameter;
-import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.inject.spi.DefinitionException;
-import javax.enterprise.inject.spi.Extension;
-import javax.enterprise.inject.spi.InjectionPoint;
-import javax.enterprise.inject.spi.ProcessAnnotatedType;
-import javax.enterprise.inject.spi.ProcessBean;
-import javax.enterprise.inject.spi.ProcessInjectionPoint;
-import javax.enterprise.inject.spi.ProcessProducerField;
-import javax.enterprise.inject.spi.ProcessProducerMethod;
-
-import org.apache.aries.cdi.container.internal.model.BeansModel;
-import org.apache.aries.cdi.container.internal.model.ComponentPropertiesModel;
-import org.apache.aries.cdi.container.internal.model.ExtendedActivationTemplateDTO;
-import org.apache.aries.cdi.container.internal.model.ExtendedComponentTemplateDTO;
-import org.apache.aries.cdi.container.internal.model.ExtendedConfigurationTemplateDTO;
-import org.apache.aries.cdi.container.internal.model.OSGiBean;
-import org.apache.aries.cdi.container.internal.model.ReferenceModel;
-import org.apache.aries.cdi.container.internal.model.ReferenceModel.Builder;
-import org.apache.aries.cdi.container.internal.util.Annotates;
-import org.osgi.service.cdi.ComponentType;
-import org.osgi.service.cdi.ConfigurationPolicy;
-import org.osgi.service.cdi.MaximumCardinality;
-import org.osgi.service.cdi.ServiceScope;
-import org.osgi.service.cdi.annotations.ComponentProperties;
-import org.osgi.service.cdi.annotations.ComponentScoped;
-import org.osgi.service.cdi.annotations.FactoryComponent;
-import org.osgi.service.cdi.annotations.PID;
-import org.osgi.service.cdi.annotations.Reference;
-import org.osgi.service.cdi.annotations.SingleComponent;
-import org.osgi.service.cdi.reference.BindBeanServiceObjects;
-import org.osgi.service.cdi.reference.BindService;
-import org.osgi.service.cdi.reference.BindServiceReference;
-import org.osgi.service.cdi.runtime.dto.template.ComponentTemplateDTO;
-
-public class DiscoveryExtension implements Extension {
-
-	public DiscoveryExtension(ContainerState containerState) {
-		_containerState = containerState;
-		_beansModel = _containerState.beansModel();
-		_containerTemplate = _containerState.containerDTO().template.components.get(0);
-	}
-
-	<X> void processAnnotatedType(@Observes ProcessAnnotatedType<X> pat) {
-		Class<X> declaringClass = Annotates.declaringClass(pat.getAnnotatedType());
-
-		final String className = declaringClass.getName();
-
-		OSGiBean osgiBean = _beansModel.getOSGiBean(className);
-
-		if (osgiBean == null) {
-			return;
-		}
-
-		osgiBean.found(true);
-	}
-
-	<X> void processBindObject(@Observes ProcessInjectionPoint<X, BindService<?>> pip) {
-		processInjectionPoint0(pip, true);
-	}
-
-	<X> void processBindServiceObjects(@Observes ProcessInjectionPoint<X, BindBeanServiceObjects<?>> pip) {
-		processInjectionPoint0(pip, true);
-	}
-
-	<X> void processBindServiceReference(@Observes ProcessInjectionPoint<X, BindServiceReference<?>> pip) {
-		processInjectionPoint0(pip, true);
-	}
-
-	<X, T> void processInjectionPoint(@Observes ProcessInjectionPoint<X, T> pip) {
-		processInjectionPoint0(pip, false);
-	}
-
-	<X, T> void processInjectionPoint0(ProcessInjectionPoint<X, T> pip, boolean special) {
-		InjectionPoint injectionPoint = pip.getInjectionPoint();
-
-		Annotated annotated = injectionPoint.getAnnotated();
-
-		Class<X> declaringClass = Annotates.declaringClass(annotated);
-
-		String className = declaringClass.getName();
-
-		OSGiBean osgiBean = _beansModel.getOSGiBean(className);
-
-		if (osgiBean == null) {
-			return;
-		}
-
-		if (special) {
-			doSpecial(osgiBean, annotated, injectionPoint.getType());
-		}
-		else {
-			doOther(osgiBean, declaringClass, annotated, injectionPoint);
-		}
-	}
-
-	<X> void processBean(@Observes ProcessBean<X> pb) {
-		final Class<X> declaringClass = Annotates.declaringClass(pb);
-
-		String className = declaringClass.getName();
-
-		OSGiBean osgiBean = _beansModel.getOSGiBean(className);
-
-		if (osgiBean == null) {
-			return;
-		}
-
-		osgiBean.found(true);
-
-		final Annotated annotated = pb.getAnnotated();
-
-		try {
-			List<String> serviceTypes = Annotates.serviceClassNames(annotated);
-			Map<String, Object> componentProperties = Annotates.componentProperties(annotated);
-			ServiceScope serviceScope = Annotates.serviceScope(annotated);
-
-			if (annotated.isAnnotationPresent(SingleComponent.class)) {
-				doSingleComponent(osgiBean, declaringClass, annotated, pb.getBean(), serviceTypes, serviceScope, componentProperties);
-			}
-			else if (annotated.isAnnotationPresent(FactoryComponent.class)) {
-				doFactoryComponent(osgiBean, declaringClass, annotated, pb.getBean(), serviceTypes, serviceScope, componentProperties);
-			}
-			else if (annotated.isAnnotationPresent(ComponentScoped.class)) {
-				// Explicitly ignore this case
-			}
-			else {
-				doContainerBean(osgiBean, declaringClass, annotated, pb, pb.getBean().getScope(), serviceTypes, serviceScope, componentProperties);
-			}
-		}
-		catch (Exception e) {
-			pb.addDefinitionError(e);
-		}
-	}
-
-	void afterBeanDiscovery(@Observes AfterBeanDiscovery abd, BeanManager beanManager) {
-		_containerState.containerDTO().template.components.stream().filter(
-			template -> template.type != ComponentType.CONTAINER
-		).map(
-			template -> (ExtendedComponentTemplateDTO)template
-		).forEach(
-			template -> {
-				Set<Bean<?>> visited = new HashSet<>();
-				scanComponentBean(template, template.bean, beanManager, visited);
-			}
-		);
-
-		_beansModel.getOSGiBeans().stream().forEach(
-			osgiBean -> {
-				if (!osgiBean.found()) {
-					abd.addDefinitionError(
-						new DefinitionException(
-							String.format(
-								"Did not find bean for %s",
-								osgiBean.getBeanClass())));
-				}
-			}
-		);
-	}
-
-	void doComponentProperties(OSGiBean osgiBean, Class<?> declaringClass, InjectionPoint injectionPoint) {
-		try {
-			ComponentPropertiesModel configurationModel = new ComponentPropertiesModel.Builder(
-				injectionPoint.getType()
-			).declaringClass(
-				declaringClass
-			).injectionPoint(
-				injectionPoint
-			).build();
-
-			osgiBean.addConfiguration(_containerState, configurationModel.toDTO());
-		}
-		catch (Exception e) {
-			_containerState.error(e);
-		}
-	}
-
-	void doContainerBean(OSGiBean osgiBean, Class<?> declaringClass, Annotated annotated, ProcessBean<?> pb, Class<? extends Annotation> scope, List<String> serviceTypeNames, ServiceScope serviceScope, Map<String, Object> componentProperties) {
-		String className = declaringClass.getName();
-
-		if (!_containerTemplate.beans.contains(className)) {
-			_containerTemplate.beans.add(className);
-		}
-
-		if (!serviceTypeNames.isEmpty()) {
-			if (!scope.equals(ApplicationScoped.class) &&
-				!scope.equals(Dependent.class)) {
-
-				pb.addDefinitionError(
-					new IllegalStateException(
-						String.format(
-							"@Service can only be used on @ApplicationScoped, @Dependent, @SingleComponent, and @FactoryComponent: %s",
-							pb.getBean())));
-				return;
-			}
-
-			ExtendedActivationTemplateDTO activationTemplate = new ExtendedActivationTemplateDTO();
-			activationTemplate.cdiScope = scope;
-			activationTemplate.declaringClass = declaringClass;
-			if (pb instanceof ProcessProducerField) {
-				activationTemplate.producer = ((ProcessProducerField<?, ?>) pb).getAnnotatedProducerField();
-			}
-			else if (pb instanceof ProcessProducerMethod) {
-				activationTemplate.producer = ((ProcessProducerMethod<?, ?>) pb).getAnnotatedProducerMethod();
-			}
-			activationTemplate.properties = componentProperties;
-			activationTemplate.scope = serviceScope;
-			activationTemplate.serviceClasses = serviceTypeNames;
-
-			_containerTemplate.activations.add(activationTemplate);
-		}
-
-		osgiBean.setComponent(_containerState, _containerTemplate);
-	}
-
-	void doFactoryComponent(OSGiBean osgiBean, Class<?> declaringClass, Annotated annotated, Bean<?> bean, List<String> serviceTypeNames, ServiceScope serviceScope, Map<String, Object> componentProperties) {
-		ExtendedComponentTemplateDTO componentTemplate = new ExtendedComponentTemplateDTO();
-		componentTemplate.activations = new CopyOnWriteArrayList<>();
-
-		ExtendedActivationTemplateDTO activationTemplate = new ExtendedActivationTemplateDTO();
-		activationTemplate.declaringClass = declaringClass;
-		activationTemplate.properties = Collections.emptyMap();
-		activationTemplate.scope = serviceScope;
-		activationTemplate.serviceClasses = serviceTypeNames;
-
-		componentTemplate.activations.add(activationTemplate);
-
-		componentTemplate.bean = bean;
-		componentTemplate.beans = new CopyOnWriteArrayList<>();
-		componentTemplate.configurations = new CopyOnWriteArrayList<>();
-		componentTemplate.name = bean.getName();
-		componentTemplate.properties = componentProperties;
-		componentTemplate.references = new CopyOnWriteArrayList<>();
-		componentTemplate.type = ComponentType.FACTORY;
-
-		annotated.getAnnotations(PID.class).stream().forEach(
-			PID -> {
-				ExtendedConfigurationTemplateDTO configurationTemplate = new ExtendedConfigurationTemplateDTO();
-
-				configurationTemplate.declaringClass = declaringClass;
-				configurationTemplate.maximumCardinality = MaximumCardinality.ONE;
-				configurationTemplate.pid = Optional.of(PID.value()).map(
-					s -> {
-						if (s.equals("$") || s.equals("")) {
-							return componentTemplate.name;
-						}
-						return s;
-					}
-				).orElse(componentTemplate.name);
-
-				configurationTemplate.policy = PID.policy();
-
-				componentTemplate.configurations.add(configurationTemplate);
-			}
-		);
-
-		ExtendedConfigurationTemplateDTO configurationTemplate = new ExtendedConfigurationTemplateDTO();
-
-		configurationTemplate.declaringClass = declaringClass;
-		configurationTemplate.maximumCardinality = MaximumCardinality.MANY;
-		configurationTemplate.pid = Optional.ofNullable(
-			annotated.getAnnotation(FactoryComponent.class)
-		).map(fc -> {
-			if (fc.value().equals("$") || fc.value().equals("")) {
-				return componentTemplate.name;
-			}
-			return fc.value();
-		}).orElse(componentTemplate.name);
-		configurationTemplate.policy = ConfigurationPolicy.REQUIRED;
-
-		componentTemplate.configurations.add(configurationTemplate);
-		componentTemplate.beans.add(declaringClass.getName());
-
-		_containerState.containerDTO().template.components.add(componentTemplate);
-
-		osgiBean.setComponent(_containerState, componentTemplate);
-	}
-
-	void doOther(OSGiBean osgiBean, Class<?> declaringClass, Annotated annotated, InjectionPoint injectionPoint) {
-		Reference reference = annotated.getAnnotation(Reference.class);
-		ComponentProperties componentProperties = annotated.getAnnotation(ComponentProperties.class);
-
-		if (reference != null) {
-			doReference(osgiBean, annotated, injectionPoint, reference, componentProperties);
-		}
-		else if (componentProperties != null) {
-			doComponentProperties(osgiBean, declaringClass, injectionPoint);
-		}
-	}
-
-	void doReference(OSGiBean osgiBean, Annotated annotated, InjectionPoint injectionPoint, Reference reference, ComponentProperties componentProperties) {
-		if (componentProperties != null) {
-			_containerState.error(
-				new IllegalArgumentException(
-					String.format(
-						"Cannot use @Reference and @Configuration on the same injection point {}",
-						injectionPoint))
-			);
-
-			return;
-		}
-
-		Builder builder = null;
-
-		if (annotated instanceof AnnotatedParameter) {
-			builder = new ReferenceModel.Builder((AnnotatedParameter<?>)annotated);
-		}
-		else {
-			builder = new ReferenceModel.Builder((AnnotatedField<?>)annotated);
-		}
-
-		try {
-			ReferenceModel referenceModel = builder.type(injectionPoint.getType()).build();
-
-			osgiBean.addReference(referenceModel.toDTO());
-		}
-		catch (Exception e) {
-			_containerState.error(e);
-		}
-	}
-
-	void doSingleComponent(OSGiBean osgiBean, Class<?> declaringClass, Annotated annotated, Bean<?> bean, List<String> serviceTypes, ServiceScope serviceScope, Map<String, Object> componentProperties) {
-		ExtendedComponentTemplateDTO componentTemplate = new ExtendedComponentTemplateDTO();
-		componentTemplate.activations = new CopyOnWriteArrayList<>();
-
-		ExtendedActivationTemplateDTO activationTemplate = new ExtendedActivationTemplateDTO();
-		activationTemplate.declaringClass = declaringClass;
-		activationTemplate.properties = Collections.emptyMap();
-		activationTemplate.scope = serviceScope;
-		activationTemplate.serviceClasses = serviceTypes;
-
-		componentTemplate.activations.add(activationTemplate);
-
-		componentTemplate.bean = bean;
-		componentTemplate.beans = new CopyOnWriteArrayList<>();
-		componentTemplate.configurations = new CopyOnWriteArrayList<>();
-		componentTemplate.name = bean.getName();
-		componentTemplate.properties = componentProperties;
-		componentTemplate.references = new CopyOnWriteArrayList<>();
-		componentTemplate.type = ComponentType.SINGLE;
-
-		annotated.getAnnotations(PID.class).stream().forEach(
-			PID -> {
-				ExtendedConfigurationTemplateDTO configurationTemplate = new ExtendedConfigurationTemplateDTO();
-
-				configurationTemplate.declaringClass = declaringClass;
-				configurationTemplate.maximumCardinality = MaximumCardinality.ONE;
-				configurationTemplate.pid = Optional.of(PID.value()).map(
-					s -> {
-						if (s.equals("$") || s.equals("")) {
-							return componentTemplate.name;
-						}
-						return s;
-					}
-				).orElse(componentTemplate.name);
-
-				if (PID.value().equals("$") || PID.value().equals("")) {
-					configurationTemplate.pid = componentTemplate.name;
-				}
-				else {
-					configurationTemplate.pid = PID.value();
-				}
-
-				configurationTemplate.policy = PID.policy();
-
-				componentTemplate.configurations.add(configurationTemplate);
-			}
-		);
-
-		if (componentTemplate.configurations.isEmpty()) {
-			ExtendedConfigurationTemplateDTO configurationTemplate = new ExtendedConfigurationTemplateDTO();
-
-			configurationTemplate.declaringClass = declaringClass;
-			configurationTemplate.maximumCardinality = MaximumCardinality.ONE;
-			configurationTemplate.pid = componentTemplate.name;
-			configurationTemplate.policy = ConfigurationPolicy.OPTIONAL;
-
-			componentTemplate.configurations.add(configurationTemplate);
-		}
-
-		componentTemplate.beans.add(declaringClass.getName());
-
-		_containerState.containerDTO().template.components.add(componentTemplate);
-
-		osgiBean.setComponent(_containerState, componentTemplate);
-	}
-
-	void doSpecial(OSGiBean osgiBean, Annotated annotated, Type injectionPointType) {
-		Builder builder = null;
-
-		if (annotated instanceof AnnotatedParameter) {
-			builder = new ReferenceModel.Builder((AnnotatedParameter<?>)annotated);
-		}
-		else {
-			builder = new ReferenceModel.Builder((AnnotatedField<?>)annotated);
-		}
-
-		try {
-			ReferenceModel referenceModel = builder.type(injectionPointType).build();
-
-			osgiBean.addReference(referenceModel.toDTO());
-		}
-		catch (Exception e) {
-			_containerState.error(e);
-		}
-	}
-
-	void scanComponentBean(
-		ExtendedComponentTemplateDTO template,
-		Bean<?> bean,
-		BeanManager beanManager,
-		Set<Bean<?>> visited) {
-
-		if (visited.contains(bean)) {
-			return;
-		}
-
-		visited.add(bean);
-
-		Class<?> beanClass = bean.getBeanClass();
-
-		String className = beanClass.getName();
-
-		OSGiBean osgiBean = _beansModel.getOSGiBean(className);
-
-		ComponentTemplateDTO currentTemplate = osgiBean.getComponent();
-
-		if (currentTemplate == null) {
-			osgiBean.setComponent(_containerState, template);
-		}
-		else if (!currentTemplate.equals(template)) {
-			throw new IllegalStateException("Something is wrong here");
-		}
-
-		if (!template.beans.contains(className)) {
-			template.beans.add(className);
-		}
-
-		for (InjectionPoint injectionPoint : bean.getInjectionPoints()) {
-			if (injectionPoint.getAnnotated().isAnnotationPresent(ComponentProperties.class) ||
-				injectionPoint.getAnnotated().isAnnotationPresent(Reference.class)) {
-
-				continue;
-			}
-
-			Set<Bean<?>> beans = beanManager.getBeans(
-				injectionPoint.getType(),
-				injectionPoint.getQualifiers().toArray(new Annotation[0]));
-
-			Bean<?> next = beanManager.resolve(beans);
-
-			if ((next == null) || next.getScope() != ComponentScoped.class) {
-				continue;
-			}
-
-			scanComponentBean(template, next, beanManager, visited);
-		}
-	}
-
-	private final BeansModel _beansModel;
-	private final ComponentTemplateDTO _containerTemplate;
-	private final ContainerState _containerState;
-
-}
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/RuntimeExtension.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/RuntimeExtension.java
index 51e795e..697b6f6 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/RuntimeExtension.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/RuntimeExtension.java
@@ -14,7 +14,7 @@
 
 package org.apache.aries.cdi.container.internal.container;
 
-import static javax.interceptor.Interceptor.Priority.PLATFORM_AFTER;
+import static javax.interceptor.Interceptor.Priority.*;
 
 import java.util.ArrayList;
 import java.util.Dictionary;
@@ -37,7 +37,6 @@ import javax.enterprise.inject.spi.Annotated;
 import javax.enterprise.inject.spi.AnnotatedField;
 import javax.enterprise.inject.spi.AnnotatedMember;
 import javax.enterprise.inject.spi.AnnotatedMethod;
-import javax.enterprise.inject.spi.AnnotatedParameter;
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.BeanManager;
 import javax.enterprise.inject.spi.BeforeBeanDiscovery;
@@ -182,7 +181,12 @@ public class RuntimeExtension implements Extension {
 
 				for (ActivationTemplateDTO at : _containerTemplate.activations) {
 					ExtendedActivationTemplateDTO extended = (ExtendedActivationTemplateDTO)at;
-					if (extended.declaringClass.equals(declaringClass) && Objects.equals(extended.producer, producer)) {
+					if (extended.declaringClass.equals(declaringClass) &&
+						(((extended.producer == null) && (producer == null)) ||
+						(extended.producer != null) &&
+						(producer != null) &&
+						Objects.equals(extended.producer.getJavaMember(), producer.getJavaMember()))) {
+
 						activationTemplate = extended;
 						break;
 					}
@@ -371,8 +375,8 @@ public class RuntimeExtension implements Extension {
 
 		ConfigurationTemplateDTO current = new ComponentPropertiesModel.Builder(injectionPoint.getType()).declaringClass(
 			declaringClass
-		).injectionPoint(
-			injectionPoint
+		).qualifiers(
+			injectionPoint.getQualifiers()
 		).build().toDTO();
 
 		return osgiBean.getComponent().configurations.stream().map(
@@ -398,19 +402,9 @@ public class RuntimeExtension implements Extension {
 
 		Annotated annotated = injectionPoint.getAnnotated();
 
-		ReferenceModel.Builder builder = null;
-
-		if (annotated instanceof AnnotatedField) {
-			builder = new ReferenceModel.Builder((AnnotatedField<?>)annotated);
-		}
-		else if (annotated instanceof AnnotatedMethod) {
-			builder = new ReferenceModel.Builder((AnnotatedMethod<?>)annotated);
-		}
-		else {
-			builder = new ReferenceModel.Builder((AnnotatedParameter<?>)annotated);
-		}
+		ReferenceModel.Builder builder = new ReferenceModel.Builder(annotated);
 
-		ReferenceModel referenceModel = builder.injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = builder.type(injectionPoint.getType()).build();
 
 		ExtendedReferenceTemplateDTO current = referenceModel.toDTO();
 
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BeansModelBuilder.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BeansModelBuilder.java
index 0ec959b..9e8b9c8 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BeansModelBuilder.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BeansModelBuilder.java
@@ -14,9 +14,8 @@
 
 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.CDIConstants.REQUIREMENT_BEANS_ATTRIBUTE;
-import static org.osgi.service.cdi.CDIConstants.REQUIREMENT_DESCRIPTOR_ATTRIBUTE;
+import static org.apache.aries.cdi.container.internal.util.Reflection.*;
+import static org.osgi.service.cdi.CDIConstants.*;
 
 import java.net.URL;
 import java.util.ArrayList;
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ComponentPropertiesModel.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ComponentPropertiesModel.java
index 8530ca3..59c691d 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ComponentPropertiesModel.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ComponentPropertiesModel.java
@@ -23,8 +23,6 @@ import java.util.LinkedHashSet;
 import java.util.Objects;
 import java.util.Set;
 
-import javax.enterprise.inject.spi.InjectionPoint;
-
 import org.osgi.service.cdi.ConfigurationPolicy;
 import org.osgi.service.cdi.MaximumCardinality;
 import org.osgi.service.cdi.annotations.PID;
@@ -49,9 +47,9 @@ public class ComponentPropertiesModel {
 			return this;
 		}
 
-		public Builder injectionPoint(InjectionPoint injectionPoint) {
-			_qualifiers = injectionPoint.getQualifiers();
-			_pid = injectionPoint.getAnnotated().getAnnotation(PID.class);
+		public Builder qualifiers(Set<Annotation> qualifiers) {
+			_qualifiers = qualifiers;
+			_pid = _qualifiers.stream().filter(PID.class::isInstance).map(PID.class::cast).findFirst().orElse(null);
 			return this;
 		}
 
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ExtendedActivationTemplateDTO.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ExtendedActivationTemplateDTO.java
index 89cc5d8..887aa12 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ExtendedActivationTemplateDTO.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ExtendedActivationTemplateDTO.java
@@ -16,6 +16,8 @@ package org.apache.aries.cdi.container.internal.model;
 
 import java.lang.annotation.Annotation;
 
+import javax.enterprise.inject.spi.AnnotatedMember;
+
 import org.osgi.service.cdi.runtime.dto.template.ActivationTemplateDTO;
 
 public class ExtendedActivationTemplateDTO extends ActivationTemplateDTO {
@@ -27,6 +29,6 @@ public class ExtendedActivationTemplateDTO extends ActivationTemplateDTO {
 
 	public Class<? extends Annotation> cdiScope;
 
-	public Object producer;
+	public AnnotatedMember<?> producer;
 
 }
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ExtendedComponentTemplateDTO.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ExtendedComponentTemplateDTO.java
index d150668..506c2e2 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ExtendedComponentTemplateDTO.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ExtendedComponentTemplateDTO.java
@@ -14,11 +14,15 @@
 
 package org.apache.aries.cdi.container.internal.model;
 
-import javax.enterprise.inject.spi.Bean;
+import java.lang.annotation.Annotation;
+import java.util.Set;
 
 import org.osgi.service.cdi.runtime.dto.template.ComponentTemplateDTO;
 
 public class ExtendedComponentTemplateDTO extends ComponentTemplateDTO {
 
-	public Bean<?> bean;
+	public Class<?> beanClass;
+
+	public Set<Annotation> qualifiers;
+
 }
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/FactoryActivator.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/FactoryActivator.java
index 5853603..d358161 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/FactoryActivator.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/FactoryActivator.java
@@ -130,7 +130,7 @@ public class FactoryActivator extends InstanceActivator {
 			ExtendedComponentTemplateDTO extended = (ExtendedComponentTemplateDTO)_instance.template;
 
 			Set<Bean<?>> beans = beanManager.getBeans(
-				extended.bean.getBeanClass(), extended.bean.getQualifiers().toArray(new Annotation[0]));
+				extended.beanClass, extended.qualifiers.toArray(new Annotation[0]));
 			Bean<? extends Object> bean = beanManager.resolve(beans);
 
 			if (activationTemplate.serviceClasses.isEmpty() /* immediate */) {
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/OSGiBean.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/OSGiBean.java
index cfdd2ff..09c22c5 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/OSGiBean.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/OSGiBean.java
@@ -14,8 +14,9 @@
 
 package org.apache.aries.cdi.container.internal.model;
 
+import static java.util.Objects.*;
+
 import java.util.List;
-import java.util.Objects;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.atomic.AtomicBoolean;
 
@@ -33,9 +34,8 @@ public class OSGiBean implements Comparable<OSGiBean> {
 	public static class Builder {
 
 		public Builder(Logs logs, Class<?> beanClass) {
-			Objects.requireNonNull(beanClass);
 			_logs = logs;
-			_beanClass = beanClass;
+			_beanClass = requireNonNull(beanClass);
 		}
 
 		public OSGiBean build() {
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ReferenceModel.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ReferenceModel.java
index b8f8ca8..df21438 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ReferenceModel.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ReferenceModel.java
@@ -36,7 +36,6 @@ import javax.enterprise.inject.spi.AnnotatedConstructor;
 import javax.enterprise.inject.spi.AnnotatedField;
 import javax.enterprise.inject.spi.AnnotatedMethod;
 import javax.enterprise.inject.spi.AnnotatedParameter;
-import javax.enterprise.inject.spi.InjectionPoint;
 import javax.inject.Named;
 import javax.inject.Provider;
 import javax.inject.Qualifier;
@@ -62,46 +61,28 @@ public class ReferenceModel {
 
 	public static class Builder {
 
-		public Builder() {}
-
-		public Builder(AnnotatedField<?> annotated) {
-			_annotated = annotated;
-			_declaringClass = annotated.getDeclaringType().getJavaClass();
-		}
-
-		public Builder(AnnotatedMethod<?> annotated) {
-			_annotated = annotated;
-			_declaringClass = annotated.getDeclaringType().getJavaClass();
-		}
-
-		public Builder(AnnotatedParameter<?> annotated) {
+		public Builder(Annotated annotated) {
 			_annotated = annotated;
-			_declaringClass = annotated.getDeclaringCallable().getDeclaringType().getJavaClass();
-		}
-
-		public ReferenceModel build() {
-			Objects.requireNonNull(_annotated);
-			Objects.requireNonNull(_declaringClass);
-			Objects.requireNonNull(_type);
-			return new ReferenceModel(_type, _declaringClass, _annotated);
-		}
-
-		public Builder injectionPoint(InjectionPoint injectionPoint) {
-			_annotated = injectionPoint.getAnnotated();
-			_type = injectionPoint.getType();
 
 			if (_annotated instanceof AnnotatedParameter) {
 				AnnotatedParameter<?> parameter = (AnnotatedParameter<?>)_annotated;
 
 				_declaringClass = parameter.getDeclaringCallable().getDeclaringType().getJavaClass();
 			}
-			else if (_annotated instanceof AnnotatedField) {
+			else if ((_annotated instanceof AnnotatedField) ||
+					(_annotated instanceof AnnotatedMethod)) {
+
 				AnnotatedField<?> field = (AnnotatedField<?>)_annotated;
 
 				_declaringClass = field.getDeclaringType().getJavaClass();
 			}
+		}
 
-			return this;
+		public ReferenceModel build() {
+			Objects.requireNonNull(_annotated);
+			Objects.requireNonNull(_declaringClass);
+			Objects.requireNonNull(_type);
+			return new ReferenceModel(_type, _declaringClass, _annotated);
 		}
 
 		public Builder type(Type type) {
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/SingleActivator.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/SingleActivator.java
index 0acd76b..a59d5a3 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/SingleActivator.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/SingleActivator.java
@@ -131,7 +131,7 @@ public class SingleActivator extends InstanceActivator {
 			ExtendedComponentTemplateDTO extended = (ExtendedComponentTemplateDTO)_instance.template;
 
 			Set<Bean<?>> beans = beanManager.getBeans(
-				extended.bean.getBeanClass(), extended.bean.getQualifiers().toArray(new Annotation[0]));
+				extended.beanClass, extended.qualifiers.toArray(new Annotation[0]));
 			Bean<? extends Object> bean = beanManager.resolve(beans);
 
 			if (activationTemplate.serviceClasses.isEmpty() /* immediate */) {
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Annotates.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Annotates.java
index cf78a5c..e4facbe 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Annotates.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Annotates.java
@@ -14,16 +14,22 @@
 
 package org.apache.aries.cdi.container.internal.util;
 
+import java.lang.annotation.Annotation;
 import java.lang.reflect.Executable;
 import java.lang.reflect.Parameter;
 import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+import java.util.Set;
+import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
+import javax.enterprise.context.Dependent;
+import javax.enterprise.context.NormalScope;
 import javax.enterprise.inject.spi.Annotated;
 import javax.enterprise.inject.spi.AnnotatedField;
 import javax.enterprise.inject.spi.AnnotatedMember;
@@ -36,6 +42,9 @@ import javax.enterprise.inject.spi.ProcessProducerField;
 import javax.enterprise.inject.spi.ProcessProducerMethod;
 import javax.enterprise.inject.spi.ProcessSessionBean;
 import javax.enterprise.inject.spi.ProcessSyntheticBean;
+import javax.inject.Named;
+import javax.inject.Qualifier;
+import javax.inject.Scope;
 
 import org.jboss.weld.util.Types;
 import org.osgi.service.cdi.ServiceScope;
@@ -48,6 +57,14 @@ public class Annotates {
 		// no instances
 	}
 
+	private static final Predicate<Annotation> isQualifier = annotation ->
+		!annotation.annotationType().equals(Qualifier.class) &&
+		annotation.annotationType().isAnnotationPresent(Qualifier.class);
+
+	private static final Predicate<Annotation> isScope = annotation ->
+		annotation.annotationType().isAnnotationPresent(Scope.class) ||
+		annotation.annotationType().isAnnotationPresent(NormalScope.class);
+
 	public static Map<String, Object> componentProperties(Annotated annotated) {
 		return Maps.merge(annotated.getAnnotations());
 	}
@@ -114,6 +131,31 @@ public class Annotates {
 		return (Class<X>)declaringClass;
 	}
 
+	public static Set<Annotation> qualifiers(Annotated annotated) {
+		return collect(annotated.getAnnotations()).stream().filter(isQualifier).collect(Collectors.toSet());
+	}
+
+	private static List<Annotation> collect(Collection<Annotation> annotations) {
+		List<Annotation> list = new ArrayList<>();
+		for (Annotation a1 : annotations) {
+			if (a1.annotationType().getName().startsWith("java.lang.annotation.")) continue;
+			list.add(a1);
+		}
+		list.addAll(inherit(list));
+		return list;
+	}
+
+	private static List<Annotation> inherit(Collection<Annotation> annotations) {
+		List<Annotation> list = new ArrayList<>();
+		for (Annotation a1 : annotations) {
+			for (Annotation a2 : collect(Arrays.asList(a1.annotationType().getAnnotations()))) {
+				if (list.contains(a2)) continue;
+				list.add(a2);
+			}
+		}
+		return list;
+	}
+
 	public static List<Class<?>> serviceClasses(Annotated annotated) {
 		List<Class<?>> serviceTypes = new ArrayList<>();
 
@@ -229,4 +271,43 @@ public class Annotates {
 		return ServiceScope.SINGLETON;
 	}
 
+	public static String beanName(Annotated annotated) {
+		return collect(annotated.getAnnotations()).stream().filter(Named.class::isInstance).map(Named.class::cast).findFirst().map(
+			named -> {
+				if (named.value().isEmpty()) {
+					if (annotated instanceof AnnotatedMethod) {
+						AnnotatedMethod<?> annotatedMethod = (AnnotatedMethod<?>)annotated;
+						String name = annotatedMethod.getJavaMember().getName();
+						if (name.startsWith("get")) {
+							name = name.substring(3);
+						}
+						else if (name.startsWith("is")) {
+							name = name.substring(2);
+						}
+						char c[] = name.toCharArray();
+						c[0] = Character.toLowerCase(c[0]);
+						return new String(c);
+					}
+					else if (annotated instanceof AnnotatedField) {
+						AnnotatedField<?> annotatedField = (AnnotatedField<?>)annotated;
+						return annotatedField.getJavaMember().getName();
+					}
+					else {
+						char c[] = Reflection.getRawType(annotated.getBaseType()).getSimpleName().toCharArray();
+						c[0] = Character.toLowerCase(c[0]);
+						return new String(c);
+					}
+				}
+
+				return named.value();
+			}
+		).orElse(null);
+	}
+
+	public static Class<? extends Annotation> beanScope(Annotated annotated) {
+		Class<? extends Annotation> scope = collect(annotated.getAnnotations()).stream().filter(isScope).map(Annotation::annotationType).findFirst().orElse(null);
+
+		return (scope == null) ? Dependent.class : scope;
+	}
+
 }
\ No newline at end of file
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Reflection.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Reflection.java
index ac2789e..ae03c79 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Reflection.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Reflection.java
@@ -14,15 +14,102 @@
 
 package org.apache.aries.cdi.container.internal.util;
 
+import java.lang.reflect.Array;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.GenericArrayType;
+import java.lang.reflect.Method;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.lang.reflect.TypeVariable;
+import java.lang.reflect.WildcardType;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.stream.Stream;
+
 public class Reflection {
 
 	private Reflection() {
 		// no instances
 	}
 
+	public static Stream<Constructor<?>> allConstructors(Class<?> declaringClass) {
+		Set<Constructor<?>> allconstructors = new HashSet<>();
+		allconstructors.addAll(Arrays.asList(declaringClass.getConstructors()));
+		allconstructors.addAll(Arrays.asList(declaringClass.getDeclaredConstructors()));
+		return allconstructors.stream().distinct();
+	}
+
+	public static Stream<Field> allFields(Class<?> declaringClass) {
+		Set<Field> allfields = new HashSet<>();
+		allfields.addAll(Arrays.asList(declaringClass.getFields()));
+		allfields.addAll(Arrays.asList(declaringClass.getDeclaredFields()));
+		return allfields.stream().distinct();
+	}
+
+	public static Stream<Method> allMethods(Class<?> declaringClass) {
+		Set<Method> allmethods = new HashSet<>();
+		allmethods.addAll(Arrays.asList(declaringClass.getMethods()));
+		allmethods.addAll(Arrays.asList(declaringClass.getDeclaredMethods()));
+		return allmethods.stream().distinct();
+	}
+
 	@SuppressWarnings("unchecked")
 	public static <T> T cast(Object obj) {
 		return (T) obj;
 	}
 
+	public static Set<Type> getTypes(Type type) {
+		Set<Type> types = new HashSet<>();
+		types.add(type);
+		Class<?> rawType = getRawType(type);
+		if (rawType != null) {
+			for (Type iface : rawType.getGenericInterfaces()) {
+				types.addAll(getTypes(iface));
+			}
+			types.addAll(getTypes(rawType.getGenericSuperclass()));
+		}
+		types.remove(java.io.Serializable.class);
+		return types;
+	}
+
+	@SuppressWarnings("unchecked")
+	public static <T> Class<T> getRawType(Type type) {
+		if (type instanceof Class<?>) {
+			return (Class<T>) type;
+		}
+		if (type instanceof ParameterizedType) {
+			if (((ParameterizedType) type).getRawType() instanceof Class<?>) {
+				return (Class<T>) ((ParameterizedType) type).getRawType();
+			}
+		}
+		if (type instanceof TypeVariable<?>) {
+			TypeVariable<?> variable = (TypeVariable<?>) type;
+			Type[] bounds = variable.getBounds();
+			return getBound(bounds);
+		}
+		if (type instanceof WildcardType) {
+			WildcardType wildcard = (WildcardType) type;
+			return getBound(wildcard.getUpperBounds());
+		}
+		if (type instanceof GenericArrayType) {
+			GenericArrayType genericArrayType = (GenericArrayType) type;
+			Class<?> rawType = getRawType(genericArrayType.getGenericComponentType());
+			if (rawType != null) {
+				return (Class<T>) Array.newInstance(rawType, 0).getClass();
+			}
+		}
+		return null;
+	}
+
+	@SuppressWarnings("unchecked")
+	static <T> Class<T> getBound(Type[] bounds) {
+		if (bounds.length == 0) {
+			return (Class<T>) Object.class;
+		} else {
+			return getRawType(bounds[0]);
+		}
+	}
+
 }
diff --git a/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_BeanServiceObjectsTest.java b/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_BeanServiceObjectsTest.java
index d3236f8..2ee2ad3 100644
--- a/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_BeanServiceObjectsTest.java
+++ b/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_BeanServiceObjectsTest.java
@@ -45,7 +45,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -58,7 +58,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -75,7 +75,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(BeanServiceObjects.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -102,7 +102,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(BeanServiceObjects.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -127,7 +127,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(BeanServiceObjects.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -152,7 +152,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(BeanServiceObjects.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -173,7 +173,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -187,7 +187,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -200,7 +200,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -217,7 +217,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -244,7 +244,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -268,7 +268,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -294,7 +294,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -315,7 +315,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -329,7 +329,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -342,7 +342,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -359,7 +359,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -386,7 +386,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -411,7 +411,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -436,7 +436,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -457,7 +457,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -471,7 +471,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -485,7 +485,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	///////////////////////////////////////////////////////////////////////////////
@@ -504,7 +504,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", BeanServiceObjects.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -516,7 +516,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", BeanServiceObjects.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -532,7 +532,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", BeanServiceObjects.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(BeanServiceObjects.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -557,7 +557,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", BeanServiceObjects.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(BeanServiceObjects.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -581,7 +581,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", BeanServiceObjects.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(BeanServiceObjects.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -605,7 +605,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", BeanServiceObjects.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(BeanServiceObjects.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -625,7 +625,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", BeanServiceObjects.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -638,7 +638,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -650,7 +650,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -666,7 +666,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -691,7 +691,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -715,7 +715,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -739,7 +739,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -759,7 +759,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -772,7 +772,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -784,7 +784,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -800,7 +800,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Foo.class, referenceModel.getServiceType());
@@ -826,7 +826,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -850,7 +850,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -874,7 +874,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -894,7 +894,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -907,7 +907,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Instance.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -920,7 +920,7 @@ public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Instance.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 }
diff --git a/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_PropertiesTest.java b/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_PropertiesTest.java
index f48ae90..7f00739 100644
--- a/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_PropertiesTest.java
+++ b/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_PropertiesTest.java
@@ -43,7 +43,7 @@ public class ReferenceModel_PropertiesTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -60,7 +60,7 @@ public class ReferenceModel_PropertiesTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Map.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -85,7 +85,7 @@ public class ReferenceModel_PropertiesTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Map.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -110,7 +110,7 @@ public class ReferenceModel_PropertiesTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Optional.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -131,7 +131,7 @@ public class ReferenceModel_PropertiesTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -144,7 +144,7 @@ public class ReferenceModel_PropertiesTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -161,7 +161,7 @@ public class ReferenceModel_PropertiesTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -186,7 +186,7 @@ public class ReferenceModel_PropertiesTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -207,7 +207,7 @@ public class ReferenceModel_PropertiesTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -220,7 +220,7 @@ public class ReferenceModel_PropertiesTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -237,7 +237,7 @@ public class ReferenceModel_PropertiesTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -262,7 +262,7 @@ public class ReferenceModel_PropertiesTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -284,7 +284,7 @@ public class ReferenceModel_PropertiesTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Map.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -300,7 +300,7 @@ public class ReferenceModel_PropertiesTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Map.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Map.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -324,7 +324,7 @@ public class ReferenceModel_PropertiesTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Optional.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Optional.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -348,7 +348,7 @@ public class ReferenceModel_PropertiesTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Map.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Map.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -368,7 +368,7 @@ public class ReferenceModel_PropertiesTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -380,7 +380,7 @@ public class ReferenceModel_PropertiesTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -396,7 +396,7 @@ public class ReferenceModel_PropertiesTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -420,7 +420,7 @@ public class ReferenceModel_PropertiesTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -440,7 +440,7 @@ public class ReferenceModel_PropertiesTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -452,7 +452,7 @@ public class ReferenceModel_PropertiesTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -468,7 +468,7 @@ public class ReferenceModel_PropertiesTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -492,7 +492,7 @@ public class ReferenceModel_PropertiesTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
diff --git a/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_ServiceReferenceTest.java b/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_ServiceReferenceTest.java
index a274c8e..4f641d0 100644
--- a/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_ServiceReferenceTest.java
+++ b/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_ServiceReferenceTest.java
@@ -44,7 +44,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -57,7 +57,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -74,7 +74,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(ServiceReference.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -101,7 +101,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(ServiceReference.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -125,7 +125,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(ServiceReference.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -149,7 +149,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(ServiceReference.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -170,7 +170,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -184,7 +184,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -197,7 +197,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -214,7 +214,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -241,7 +241,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -266,7 +266,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -291,7 +291,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -312,7 +312,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -326,7 +326,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -339,7 +339,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -356,7 +356,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -383,7 +383,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -408,7 +408,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -433,7 +433,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -454,7 +454,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	// parameters
@@ -469,7 +469,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", ServiceReference.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -481,7 +481,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", ServiceReference.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -497,7 +497,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", ServiceReference.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(ServiceReference.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -523,7 +523,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", ServiceReference.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(ServiceReference.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -546,7 +546,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", ServiceReference.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(ServiceReference.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -569,7 +569,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", ServiceReference.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(ServiceReference.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -589,7 +589,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", ServiceReference.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -602,7 +602,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -614,7 +614,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -630,7 +630,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -656,7 +656,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -680,7 +680,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -704,7 +704,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -724,7 +724,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -737,7 +737,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -749,7 +749,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -765,7 +765,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -791,7 +791,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -815,7 +815,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -839,7 +839,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -859,7 +859,7 @@ public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 }
\ No newline at end of file
diff --git a/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_ServiceTest.java b/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_ServiceTest.java
index 1252c85..3a8a436 100644
--- a/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_ServiceTest.java
+++ b/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_ServiceTest.java
@@ -48,7 +48,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Integer.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -69,7 +69,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -86,7 +86,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Optional.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -111,7 +111,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Integer.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -132,7 +132,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -149,7 +149,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Optional.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -170,7 +170,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -183,7 +183,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -197,7 +197,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -210,7 +210,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -227,7 +227,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -254,7 +254,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -279,7 +279,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -304,7 +304,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -325,7 +325,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -339,7 +339,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -352,7 +352,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -369,7 +369,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -396,7 +396,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -421,7 +421,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -446,7 +446,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -467,7 +467,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	// params
@@ -485,7 +485,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Integer.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Integer.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -505,7 +505,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Callable.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -521,7 +521,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Optional.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Optional.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -545,7 +545,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Integer.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Integer.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -565,7 +565,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Callable.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -581,7 +581,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Optional.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Optional.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -601,7 +601,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Integer.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -613,7 +613,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Optional.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -626,7 +626,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -638,7 +638,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -654,7 +654,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -680,7 +680,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -704,7 +704,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -728,7 +728,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -748,7 +748,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", Collection.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -761,7 +761,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -773,7 +773,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -789,7 +789,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -815,7 +815,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -839,7 +839,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -863,7 +863,7 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]);
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -883,6 +883,6 @@ public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getMethod("set", List.class).getParameters()[0]);
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 }
\ No newline at end of file
diff --git a/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_TupleTest.java b/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_TupleTest.java
index 605724c..97bcbef 100644
--- a/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_TupleTest.java
+++ b/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_TupleTest.java
@@ -45,7 +45,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -58,7 +58,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -71,7 +71,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -88,7 +88,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Map.Entry.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -113,7 +113,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Map.Entry.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -134,7 +134,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -147,7 +147,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -161,7 +161,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -174,7 +174,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -187,7 +187,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -200,7 +200,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -214,7 +214,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -231,7 +231,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Map.Entry.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -256,7 +256,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Map.Entry.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -281,7 +281,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Map.Entry.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -306,7 +306,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Map.Entry.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -327,7 +327,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -340,7 +340,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -354,7 +354,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -367,7 +367,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -380,7 +380,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -393,7 +393,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -406,7 +406,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -423,7 +423,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Map.Entry.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -445,7 +445,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -462,7 +462,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Foo.class, referenceModel.getServiceType());
@@ -487,7 +487,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(Collection.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -508,7 +508,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -522,7 +522,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test
@@ -539,7 +539,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Foo.class, referenceModel.getServiceType());
@@ -564,7 +564,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		ReferenceModel referenceModel = new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		ReferenceModel referenceModel = new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 
 		assertEquals(List.class, referenceModel.getBeanClass());
 		assertEquals(Integer.class, referenceModel.getServiceType());
@@ -585,7 +585,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -598,7 +598,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 	@Test(expected = IllegalArgumentException.class)
@@ -611,7 +611,7 @@ public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 		InjectionPoint injectionPoint = new MockInjectionPoint(C.class.getField("m"));
 
-		new ReferenceModel.Builder().injectionPoint(injectionPoint).build();
+		new ReferenceModel.Builder(injectionPoint.getAnnotated()).type(injectionPoint.getType()).build();
 	}
 
 }
\ No newline at end of file
diff --git a/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/TemplatesTests.java b/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/TemplatesTests.java
index d854f66..b4d4892 100644
--- a/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/TemplatesTests.java
+++ b/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/TemplatesTests.java
@@ -148,7 +148,7 @@ public class TemplatesTests extends BaseCDIBundleTest {
 				assertEquals(Arrays.asList("org.apache.aries.cdi.container.test.beans.Bar"), at.serviceClasses);
 			}
 
-			assertEquals(1, ct.beans.size());
+			assertEquals(2, ct.beans.size());
 			assertEquals(1, ct.configurations.size());
 			assertEquals("barService", ct.name);
 			assertEquals(Maps.of(), ct.properties);
@@ -233,7 +233,7 @@ public class TemplatesTests extends BaseCDIBundleTest {
 				assertEquals(Arrays.asList("org.apache.aries.cdi.container.test.beans.Bar"), at.serviceClasses);
 			}
 
-			assertEquals(1, ct.beans.size());
+			assertEquals(2, ct.beans.size());
 			assertEquals("org.apache.aries.cdi.container.test.beans.BarService", ct.beans.get(0));
 			assertEquals(1, ct.configurations.size());
 			assertEquals("barService", ct.name);
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/ConfigurationTests.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/ConfigurationTests.java
index d9c1375..93272e0 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/ConfigurationTests.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/ConfigurationTests.java
@@ -112,6 +112,8 @@ public class ConfigurationTests extends AbstractTestCase {
 			p2.put("ports", new int[] {80});
 			configurationB.update(p2);
 
+			Thread.sleep(200); // give it a few cycles to make sure the configuration update has gone through
+
 			stA = new ServiceTracker<BeanService, BeanService>(
 				bundleContext, bundleContext.createFilter(
 					"(&(objectClass=org.apache.aries.cdi.test.interfaces.BeanService)(bean=A))"), null);


[aries-cdi] 26/27: update version

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rotty3000 pushed a commit to branch rotty3000/cdi-spi
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit 3faa1ac2923c87b6158f435306c1436c8d4e053c
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Mon Nov 25 13:20:00 2019 -0500

    update version
    
    Signed-off-by: Raymond Augé <ro...@apache.org>
---
 cdi-extension-mp-config/pom.xml | 2 +-
 cdi-owb/pom.xml                 | 2 +-
 cdi-spi/pom.xml                 | 2 +-
 cdi-weld/pom.xml                | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/cdi-extension-mp-config/pom.xml b/cdi-extension-mp-config/pom.xml
index eb7968d..3aa538a 100644
--- a/cdi-extension-mp-config/pom.xml
+++ b/cdi-extension-mp-config/pom.xml
@@ -22,7 +22,7 @@
 	<parent>
 		<groupId>org.apache.aries.cdi</groupId>
 		<artifactId>org.apache.aries.cdi</artifactId>
-		<version>1.0.3-SNAPSHOT</version>
+		<version>1.1.0-SNAPSHOT</version>
 		<relativePath>..</relativePath>
 	</parent>
 
diff --git a/cdi-owb/pom.xml b/cdi-owb/pom.xml
index d700abe..66c47c4 100644
--- a/cdi-owb/pom.xml
+++ b/cdi-owb/pom.xml
@@ -22,7 +22,7 @@
 	<parent>
 		<groupId>org.apache.aries.cdi</groupId>
 		<artifactId>org.apache.aries.cdi</artifactId>
-		<version>1.0.3-SNAPSHOT</version>
+		<version>1.1.0-SNAPSHOT</version>
 		<relativePath>..</relativePath>
 	</parent>
 
diff --git a/cdi-spi/pom.xml b/cdi-spi/pom.xml
index f7dd0c2..d816a49 100644
--- a/cdi-spi/pom.xml
+++ b/cdi-spi/pom.xml
@@ -22,7 +22,7 @@
 	<parent>
 		<groupId>org.apache.aries.cdi</groupId>
 		<artifactId>org.apache.aries.cdi</artifactId>
-		<version>1.0.3-SNAPSHOT</version>
+		<version>1.1.0-SNAPSHOT</version>
 		<relativePath>..</relativePath>
 	</parent>
 
diff --git a/cdi-weld/pom.xml b/cdi-weld/pom.xml
index bbb8f9d..c20a3d4 100644
--- a/cdi-weld/pom.xml
+++ b/cdi-weld/pom.xml
@@ -22,7 +22,7 @@
 	<parent>
 		<groupId>org.apache.aries.cdi</groupId>
 		<artifactId>org.apache.aries.cdi</artifactId>
-		<version>1.0.3-SNAPSHOT</version>
+		<version>1.1.0-SNAPSHOT</version>
 		<relativePath>..</relativePath>
 	</parent>
 


[aries-cdi] 03/27: spi

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rotty3000 pushed a commit to branch rotty3000/cdi-spi
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit d728ca7b00bc6db321480a5b70762e8c9c5a0f2d
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Wed Nov 20 17:34:33 2019 -0500

    spi
    
    Signed-off-by: Raymond Augé <ro...@apache.org>
---
 cdi-spi/pom.xml                                    | 77 ++++++++++++++++++++++
 .../main/java/org/apache/aries/cdi/spi/Keys.java   | 41 ++++++++++++
 .../aries/cdi/spi/loader/BundleClassLoader.java    | 42 ++++++++++++
 .../apache/aries/cdi/spi/loader/package-info.java  | 17 +++++
 pom.xml                                            |  1 +
 5 files changed, 178 insertions(+)

diff --git a/cdi-spi/pom.xml b/cdi-spi/pom.xml
new file mode 100644
index 0000000..f7dd0c2
--- /dev/null
+++ b/cdi-spi/pom.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<groupId>org.apache.aries.cdi</groupId>
+		<artifactId>org.apache.aries.cdi</artifactId>
+		<version>1.0.3-SNAPSHOT</version>
+		<relativePath>..</relativePath>
+	</parent>
+
+	<artifactId>org.apache.aries.cdi.spi</artifactId>
+	<name>Apache Aries CDI - SPI</name>
+	<description>Apache Aries CDI - SPI</description>
+
+	<licenses>
+		<license>
+			<name>ASL 2.0</name>
+			<url>https://www.apache.org/licenses/LICENSE-2.0</url>
+		</license>
+	</licenses>
+
+	<scm>
+		<connection>scm:git:git@github.com:apache/aries-cdi.git</connection>
+		<developerConnection>scm:git:git@github.com:apache/aries-cdi.git</developerConnection>
+		<tag>HEAD</tag>
+		<url>https://github.com/apache/aries-cdi</url>
+	</scm>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>biz.aQute.bnd</groupId>
+				<artifactId>bnd-maven-plugin</artifactId>
+				<configuration>
+					<bnd><![CDATA[
+						-cdiannotations:
+					]]></bnd>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.apache.geronimo.specs</groupId>
+			<artifactId>geronimo-jcdi_2.0_spec</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.osgi</groupId>
+			<artifactId>osgi.annotation</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.osgi</groupId>
+			<artifactId>osgi.core</artifactId>
+		</dependency>
+	</dependencies>
+
+</project>
\ No newline at end of file
diff --git a/cdi-spi/src/main/java/org/apache/aries/cdi/spi/Keys.java b/cdi-spi/src/main/java/org/apache/aries/cdi/spi/Keys.java
new file mode 100644
index 0000000..e2fb32b
--- /dev/null
+++ b/cdi-spi/src/main/java/org/apache/aries/cdi/spi/Keys.java
@@ -0,0 +1,41 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.spi;
+
+import java.net.URL;
+
+import javax.enterprise.inject.se.SeContainerInitializer;
+
+public class Keys {
+
+	private Keys() {}
+
+	private static final String ROOT_PREFIX = "org.apache.aries.cdi.spi.";
+
+	/**
+	 * Key used for passing a {@code Collection<URL>} containing the list of {@code beans.xml}
+	 * {@link URL urls} using {@link SeContainerInitializer#addProperty(String, Object)} or
+	 * {@link SeContainerInitializer#setProperties(java.util.Map)}.
+	 */
+	public static final String BEANS_XML_PROPERTY = ROOT_PREFIX + "beansXml";
+
+	/**
+	 * Key used for passing a {@code BundleContext} of the CDI bundle using
+	 * {@link SeContainerInitializer#addProperty(String, Object)} or
+	 * {@link SeContainerInitializer#setProperties(java.util.Map)}.
+	 */
+	public static final String BUNDLECONTEXT_PROPERTY = ROOT_PREFIX + "bundleContext";
+
+
+}
diff --git a/cdi-spi/src/main/java/org/apache/aries/cdi/spi/loader/BundleClassLoader.java b/cdi-spi/src/main/java/org/apache/aries/cdi/spi/loader/BundleClassLoader.java
new file mode 100644
index 0000000..c450bbb
--- /dev/null
+++ b/cdi-spi/src/main/java/org/apache/aries/cdi/spi/loader/BundleClassLoader.java
@@ -0,0 +1,42 @@
+/**
+ * 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.spi.loader;
+
+import java.net.URL;
+import java.security.ProtectionDomain;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.function.Function;
+import java.util.function.Predicate;
+
+import org.osgi.framework.Bundle;
+
+public abstract class BundleClassLoader extends ClassLoader {
+
+	public abstract List<Bundle> getBundles();
+
+	public abstract Class<?> getOrRegister(
+		final String proxyClassName, final byte[] proxyBytes,
+		final Package pck, final ProtectionDomain protectionDomain);
+
+	public abstract BundleClassLoader handleResources(
+		final Predicate<String> predicate,
+		final Function<String, Enumeration<URL>> function);
+
+	public abstract BundleClassLoader findClass(
+		final Predicate<String> predicate,
+		final Function<String, Class<?>> function);
+
+}
diff --git a/cdi-spi/src/main/java/org/apache/aries/cdi/spi/loader/package-info.java b/cdi-spi/src/main/java/org/apache/aries/cdi/spi/loader/package-info.java
new file mode 100644
index 0000000..0499ce7
--- /dev/null
+++ b/cdi-spi/src/main/java/org/apache/aries/cdi/spi/loader/package-info.java
@@ -0,0 +1,17 @@
+/**
+ * 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.
+ */
+
+@org.osgi.annotation.bundle.Export
+@org.osgi.annotation.versioning.Version("1.0.0")
+package org.apache.aries.cdi.spi.loader;
diff --git a/pom.xml b/pom.xml
index eefeb15..8768ef8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -57,6 +57,7 @@
 
 	<modules>
 		<module>cdi-extra</module>
+		<module>cdi-spi</module>
 		<module>cdi-extender</module>
 		<module>cdi-extension-el-jsp</module>
 		<module>cdi-extension-http</module>


[aries-cdi] 15/27: run test suite on both

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rotty3000 pushed a commit to branch rotty3000/cdi-spi
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit e421358635dbac3adf75af9dc50b233d905c7c6c
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Fri Nov 22 16:49:35 2019 -0500

    run test suite on both
    
    Signed-off-by: Raymond Augé <ro...@apache.org>
---
 cdi-itests/{itest.bndrun => owb-itest.bndrun}  | 24 +++++----
 cdi-itests/pom.xml                             | 72 +++++++++++++++++++++++---
 cdi-itests/{itest.bndrun => weld-itest.bndrun} |  9 +++-
 pom.xml                                        |  8 ---
 4 files changed, 89 insertions(+), 24 deletions(-)

diff --git a/cdi-itests/itest.bndrun b/cdi-itests/owb-itest.bndrun
similarity index 79%
copy from cdi-itests/itest.bndrun
copy to cdi-itests/owb-itest.bndrun
index 959cdb8..91fed8e 100644
--- a/cdi-itests/itest.bndrun
+++ b/cdi-itests/owb-itest.bndrun
@@ -24,13 +24,15 @@
 -resolve.effective: resolve, active
 
 -runrequires: \
-	osgi.identity;filter:='(osgi.identity=javax.ejb-api)',\
-	osgi.identity;filter:='(osgi.identity=javax.transaction-api)',\
-	osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.extra)',\
+	osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.owb)',\
 	osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.itests)',\
 	osgi.identity;filter:='(osgi.identity=org.apache.aries.jndi.core)',\
 	osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.command)'
 
+-runblacklist: \
+	osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.weld)',\
+	osgi.identity;filter:='(osgi.identity=org.jboss.spec.javax.el.jboss-el-api_3.0_spec)'
+
 -runpath: \
 	ch.qos.logback.classic,\
 	ch.qos.logback.core,\
@@ -39,20 +41,23 @@
 
 -runsystempackages: \
 	org.slf4j;version=1.7.25,\
+	org.slf4j.event;version=1.7.25,\
 	org.slf4j.helpers;version=1.7.25,\
 	org.slf4j.spi;version=1.7.25,\
 	sun.misc
 
 -runbundles: \
 	biz.aQute.junit;version='[4.3.1,4.3.2)',\
-	javax.ejb-api;version='[3.2.0,3.2.1)',\
-	javax.transaction-api;version='[1.2.0,1.2.1)',\
-	jboss-classfilewriter;version='[1.2.3,1.2.4)',\
+	javax.servlet.jsp-api;version='[2.3.3,2.3.4)',\
+	openwebbeans-impl;version='[2.0.13,2.0.14)',\
+	openwebbeans-spi;version='[2.0.13,2.0.14)',\
+	openwebbeans-web;version='[2.0.13,2.0.14)',\
 	org.apache.aries.cdi.extender;version='[1.0.3,1.0.4)',\
-	org.apache.aries.cdi.extension.http;version='[1.0.3,1.0.4)',\
 	org.apache.aries.cdi.extension.jndi;version='[1.0.3,1.0.4)',\
 	org.apache.aries.cdi.extra;version='[1.0.3,1.0.4)',\
 	org.apache.aries.cdi.itests;version='[1.0.3,1.0.4)',\
+	org.apache.aries.cdi.owb;version='[1.0.3,1.0.4)',\
+	org.apache.aries.cdi.spi;version='[1.0.3,1.0.4)',\
 	org.apache.aries.jndi.api;version='[1.1.0,1.1.1)',\
 	org.apache.aries.jndi.core;version='[1.0.2,1.0.3)',\
 	org.apache.aries.spifly.dynamic.framework.extension;version='[1.2.0,1.2.1)',\
@@ -71,8 +76,9 @@
 	org.apache.geronimo.specs.geronimo-jcdi_2.0_spec;version='[1.1.0,1.1.1)',\
 	org.apache.httpcomponents.httpclient;version='[4.5.3,4.5.4)',\
 	org.apache.httpcomponents.httpcore;version='[4.4.6,4.4.7)',\
-	org.jboss.logging.jboss-logging;version='[3.3.2,3.3.3)',\
-	org.jboss.weld.osgi-bundle;version='[3.0.5,3.0.6)',\
+	org.apache.xbean.asm7-shaded;version='[4.13.0,4.13.1)',\
+	org.apache.xbean.bundleutils;version='[4.15.0,4.15.1)',\
+	org.apache.xbean.finder-shaded;version='[4.13.0,4.13.1)',\
 	org.osgi.service.cdi;version='[1.0.0,1.0.1)',\
 	org.osgi.util.function;version='[1.1.0,1.1.1)',\
 	org.osgi.util.promise;version='[1.1.0,1.1.1)'
diff --git a/cdi-itests/pom.xml b/cdi-itests/pom.xml
index 3bca27e..0a8aea2 100644
--- a/cdi-itests/pom.xml
+++ b/cdi-itests/pom.xml
@@ -119,6 +119,22 @@
 
 		<!-- RUNTIME dependencies not found in BOMs -->
 		<dependency>
+			<groupId>org.apache.aries.cdi</groupId>
+			<artifactId>org.apache.aries.cdi.owb</artifactId>
+			<scope>runtime</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.openwebbeans</groupId>
+			<artifactId>openwebbeans-web</artifactId>
+			<version>${owb.version}</version>
+			<scope>runtime</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.aries.cdi</groupId>
+			<artifactId>org.apache.aries.cdi.weld</artifactId>
+			<scope>runtime</scope>
+		</dependency>
+		<dependency>
 			<groupId>org.apache.aries.jndi</groupId>
 			<artifactId>org.apache.aries.jndi.core</artifactId>
 			<version>1.0.2</version>
@@ -181,21 +197,65 @@
 				<groupId>biz.aQute.bnd</groupId>
 				<artifactId>bnd-resolver-maven-plugin</artifactId>
 				<configuration>
-					<bndruns>
-						<bndrun>itest.bndrun</bndrun>
-					</bndruns>
 					<includeDependencyManagement>true</includeDependencyManagement>
 				</configuration>
+				<executions>
+					<execution>
+						<id>owb-resolve</id>
+						<phase>package</phase>
+						<goals>
+							<goal>resolve</goal>
+						</goals>
+						<configuration>
+							<bndruns>
+								<bndrun>owb-itest.bndrun</bndrun>
+							</bndruns>
+						</configuration>
+					</execution>
+					<execution>
+						<id>weld-resolve</id>
+						<phase>package</phase>
+						<goals>
+							<goal>resolve</goal>
+						</goals>
+						<configuration>
+							<bndruns>
+								<bndrun>weld-itest.bndrun</bndrun>
+							</bndruns>
+						</configuration>
+					</execution>
+				</executions>
 			</plugin>
 			<plugin>
 				<groupId>biz.aQute.bnd</groupId>
 				<artifactId>bnd-testing-maven-plugin</artifactId>
 				<configuration>
-					<bndruns>
-						<bndrun>itest.bndrun</bndrun>
-					</bndruns>
 					<includeDependencyManagement>true</includeDependencyManagement>
 				</configuration>
+				<executions>
+					<execution>
+						<id>owb-test</id>
+						<goals>
+							<goal>testing</goal>
+						</goals>
+						<configuration>
+							<bndruns>
+								<bndrun>owb-itest.bndrun</bndrun>
+							</bndruns>
+						</configuration>
+					</execution>
+					<execution>
+						<id>weld-test</id>
+						<goals>
+							<goal>testing</goal>
+						</goals>
+						<configuration>
+							<bndruns>
+								<bndrun>weld-itest.bndrun</bndrun>
+							</bndruns>
+						</configuration>
+					</execution>
+				</executions>
 			</plugin>
 		</plugins>
 	</build>
diff --git a/cdi-itests/itest.bndrun b/cdi-itests/weld-itest.bndrun
similarity index 89%
rename from cdi-itests/itest.bndrun
rename to cdi-itests/weld-itest.bndrun
index 959cdb8..669ba00 100644
--- a/cdi-itests/itest.bndrun
+++ b/cdi-itests/weld-itest.bndrun
@@ -26,11 +26,15 @@
 -runrequires: \
 	osgi.identity;filter:='(osgi.identity=javax.ejb-api)',\
 	osgi.identity;filter:='(osgi.identity=javax.transaction-api)',\
-	osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.extra)',\
+	osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.weld)',\
 	osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.itests)',\
 	osgi.identity;filter:='(osgi.identity=org.apache.aries.jndi.core)',\
 	osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.command)'
 
+-runblacklist: \
+	osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.owb)',\
+	osgi.identity;filter:='(osgi.identity=org.jboss.spec.javax.el.jboss-el-api_3.0_spec)'
+
 -runpath: \
 	ch.qos.logback.classic,\
 	ch.qos.logback.core,\
@@ -39,6 +43,7 @@
 
 -runsystempackages: \
 	org.slf4j;version=1.7.25,\
+	org.slf4j.event;version=1.7.25,\
 	org.slf4j.helpers;version=1.7.25,\
 	org.slf4j.spi;version=1.7.25,\
 	sun.misc
@@ -53,6 +58,8 @@
 	org.apache.aries.cdi.extension.jndi;version='[1.0.3,1.0.4)',\
 	org.apache.aries.cdi.extra;version='[1.0.3,1.0.4)',\
 	org.apache.aries.cdi.itests;version='[1.0.3,1.0.4)',\
+	org.apache.aries.cdi.spi;version='[1.0.3,1.0.4)',\
+	org.apache.aries.cdi.weld;version='[1.0.3,1.0.4)',\
 	org.apache.aries.jndi.api;version='[1.1.0,1.1.1)',\
 	org.apache.aries.jndi.core;version='[1.0.2,1.0.3)',\
 	org.apache.aries.spifly.dynamic.framework.extension;version='[1.2.0,1.2.1)',\
diff --git a/pom.xml b/pom.xml
index 4d6bf5f..d58238a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -324,14 +324,6 @@
 						<failOnChanges>false</failOnChanges>
 						<resolve>false</resolve>
 					</configuration>
-					<executions>
-						<execution>
-							<id>testing</id>
-							<goals>
-								<goal>testing</goal>
-							</goals>
-						</execution>
-					</executions>
 				</plugin>
 				<plugin>
 					<groupId>biz.aQute.bnd</groupId>


[aries-cdi] 01/27: implement annotated

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rotty3000 pushed a commit to branch rotty3000/cdi-spi
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit c26aa4fa2edc37a15e96024a1c31f7d8ebc770b3
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Wed Nov 20 14:05:30 2019 -0500

    implement annotated
    
    Signed-off-by: Raymond Augé <ro...@apache.org>
---
 .../internal/annotated/AnnotatedCallableImpl.java  | 45 ++++++++++++++
 .../annotated/AnnotatedConstructorImpl.java        | 34 +++++++++++
 .../internal/annotated/AnnotatedFieldImpl.java     | 33 ++++++++++
 .../internal/annotated/AnnotatedImpl.java          | 71 ++++++++++++++++++++++
 .../internal/annotated/AnnotatedMemberImpl.java    | 52 ++++++++++++++++
 .../internal/annotated/AnnotatedMethodImpl.java    | 33 ++++++++++
 .../internal/annotated/AnnotatedParameterImpl.java | 68 +++++++++++++++++++++
 .../internal/annotated/AnnotatedTypeImpl.java      | 66 ++++++++++++++++++++
 8 files changed, 402 insertions(+)

diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/AnnotatedCallableImpl.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/AnnotatedCallableImpl.java
new file mode 100644
index 0000000..82fb02f
--- /dev/null
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/AnnotatedCallableImpl.java
@@ -0,0 +1,45 @@
+/**
+ * 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.annotated;
+
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Executable;
+import java.lang.reflect.Type;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+import javax.enterprise.inject.spi.AnnotatedCallable;
+import javax.enterprise.inject.spi.AnnotatedParameter;
+import javax.enterprise.inject.spi.AnnotatedType;
+
+public class AnnotatedCallableImpl<X> extends AnnotatedMemberImpl<X> implements AnnotatedCallable<X> {
+
+	private final List<AnnotatedParameter<X>> _parameters;
+
+	public AnnotatedCallableImpl(final Type baseType, final AnnotatedElement annotatedElement, final AnnotatedType<X> declaringType, final Executable executable) {
+		super(baseType, annotatedElement, declaringType, executable);
+
+		_parameters = IntStream.range(0, executable.getParameterCount())
+			.mapToObj(i -> new AnnotatedParameterImpl<X>(executable.getAnnotatedParameterTypes()[i].getType(), executable.getParameterAnnotations()[i], this, i))
+			.collect(Collectors.toList());
+	}
+
+	@Override
+	public List<AnnotatedParameter<X>> getParameters() {
+		return _parameters;
+	}
+
+}
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/AnnotatedConstructorImpl.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/AnnotatedConstructorImpl.java
new file mode 100644
index 0000000..90924cc
--- /dev/null
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/AnnotatedConstructorImpl.java
@@ -0,0 +1,34 @@
+/**
+ * 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.annotated;
+
+import java.lang.reflect.Constructor;
+
+import javax.enterprise.inject.spi.AnnotatedConstructor;
+import javax.enterprise.inject.spi.AnnotatedType;
+
+public class AnnotatedConstructorImpl<X> extends AnnotatedCallableImpl<X> implements AnnotatedConstructor<X> {
+
+	public AnnotatedConstructorImpl(final AnnotatedType<X> declaringType, final Constructor<X> constructor) {
+		super(constructor.getAnnotatedReturnType().getType(), constructor, declaringType, constructor);
+	}
+
+	@Override
+	@SuppressWarnings("unchecked")
+	public Constructor<X> getJavaMember() {
+		return (Constructor<X>)super.getJavaMember();
+	}
+
+}
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/AnnotatedFieldImpl.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/AnnotatedFieldImpl.java
new file mode 100644
index 0000000..73099b7
--- /dev/null
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/AnnotatedFieldImpl.java
@@ -0,0 +1,33 @@
+/**
+ * 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.annotated;
+
+import java.lang.reflect.Field;
+
+import javax.enterprise.inject.spi.AnnotatedField;
+import javax.enterprise.inject.spi.AnnotatedType;
+
+public class AnnotatedFieldImpl<X> extends AnnotatedMemberImpl<X> implements AnnotatedField<X> {
+
+	public AnnotatedFieldImpl(final AnnotatedType<X> declaringType, final Field field) {
+		super(field.getGenericType(), field, declaringType, field);
+	}
+
+	@Override
+	public Field getJavaMember() {
+		return (Field)super.getJavaMember();
+	}
+
+}
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/AnnotatedImpl.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/AnnotatedImpl.java
new file mode 100644
index 0000000..62d54d5
--- /dev/null
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/AnnotatedImpl.java
@@ -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.annotated;
+
+import static java.util.stream.Collectors.*;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Type;
+import java.util.Arrays;
+import java.util.Set;
+
+import javax.enterprise.inject.spi.Annotated;
+
+import org.apache.aries.cdi.container.internal.util.Reflection;
+
+public class AnnotatedImpl<X> implements Annotated {
+
+	private final Type _baseType;
+	private final AnnotatedElement _annotatedElement;
+	private final Set<Type> _typeClosure;
+
+	public AnnotatedImpl(final Type baseType, final AnnotatedElement annotatedElement) {
+		_baseType = baseType;
+		_annotatedElement = annotatedElement;
+		_typeClosure = Reflection.getTypes(_baseType);
+	}
+
+	@Override
+	public Type getBaseType() {
+		return _baseType;
+	}
+
+	@Override
+	public Set<Type> getTypeClosure() {
+		return _typeClosure;
+	}
+
+	@Override
+	public <T extends Annotation> T getAnnotation(Class<T> annotationType) {
+		return _annotatedElement.getAnnotation(annotationType);
+	}
+
+	@Override
+	public <T extends Annotation> Set<T> getAnnotations(Class<T> annotationType) {
+		return Arrays.stream(_annotatedElement.getAnnotationsByType(annotationType)).collect(toSet());
+	}
+
+	@Override
+	public Set<Annotation> getAnnotations() {
+		return Arrays.stream(_annotatedElement.getAnnotations()).collect(toSet());
+	}
+
+	@Override
+	public boolean isAnnotationPresent(Class<? extends Annotation> annotationType) {
+		return _annotatedElement.isAnnotationPresent(annotationType);
+	}
+
+}
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/AnnotatedMemberImpl.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/AnnotatedMemberImpl.java
new file mode 100644
index 0000000..e621667
--- /dev/null
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/AnnotatedMemberImpl.java
@@ -0,0 +1,52 @@
+/**
+ * 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.annotated;
+
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Member;
+import java.lang.reflect.Modifier;
+import java.lang.reflect.Type;
+
+import javax.enterprise.inject.spi.AnnotatedMember;
+import javax.enterprise.inject.spi.AnnotatedType;
+
+public class AnnotatedMemberImpl<X> extends AnnotatedImpl<X> implements AnnotatedMember<X> {
+
+	private final Member _member;
+	private final AnnotatedType<X> _declaringType;
+
+	public AnnotatedMemberImpl(final Type baseType, final AnnotatedElement annotatedElement, final AnnotatedType<X> declaringType, final Member member) {
+		super(baseType, annotatedElement);
+
+		_declaringType = declaringType;
+		_member = member;
+	}
+
+	@Override
+	public Member getJavaMember() {
+		return _member;
+	}
+
+	@Override
+	public boolean isStatic() {
+		return Modifier.isStatic(_member.getModifiers());
+	}
+
+	@Override
+	public AnnotatedType<X> getDeclaringType() {
+		return _declaringType;
+	}
+
+}
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/AnnotatedMethodImpl.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/AnnotatedMethodImpl.java
new file mode 100644
index 0000000..ddde40b
--- /dev/null
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/AnnotatedMethodImpl.java
@@ -0,0 +1,33 @@
+/**
+ * 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.annotated;
+
+import java.lang.reflect.Method;
+
+import javax.enterprise.inject.spi.AnnotatedMethod;
+import javax.enterprise.inject.spi.AnnotatedType;
+
+public class AnnotatedMethodImpl<X> extends AnnotatedCallableImpl<X> implements AnnotatedMethod<X> {
+
+	public AnnotatedMethodImpl(final AnnotatedType<X> declaringType, final Method method) {
+		super(method.getGenericReturnType(), method, declaringType, method);
+	}
+
+	@Override
+	public Method getJavaMember() {
+		return (Method)super.getJavaMember();
+	}
+
+}
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/AnnotatedParameterImpl.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/AnnotatedParameterImpl.java
new file mode 100644
index 0000000..a4388b1
--- /dev/null
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/AnnotatedParameterImpl.java
@@ -0,0 +1,68 @@
+/**
+ * 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.annotated;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Type;
+import java.util.Arrays;
+
+import javax.enterprise.inject.spi.AnnotatedCallable;
+import javax.enterprise.inject.spi.AnnotatedParameter;
+
+public class AnnotatedParameterImpl<X> extends AnnotatedImpl<X> implements AnnotatedParameter<X> {
+
+	private final AnnotatedCallable<X> _annotatedCallable;
+	private final int _position;
+
+	public AnnotatedParameterImpl(final Type baseType, final Annotation[] parameterAnnotations, final AnnotatedCallable<X> annotatedCallable, final int position) {
+		super(baseType, newAnnotatedElement(parameterAnnotations));
+
+		_annotatedCallable = annotatedCallable;
+		_position = position;
+	}
+
+	@Override
+	public int getPosition() {
+		return _position;
+	}
+
+	@Override
+	public AnnotatedCallable<X> getDeclaringCallable() {
+		return _annotatedCallable;
+	}
+
+	private static AnnotatedElement newAnnotatedElement(final Annotation[] parameterAnnotations) {
+		return new AnnotatedElement() {
+
+			@Override
+			public Annotation[] getDeclaredAnnotations() {
+				return parameterAnnotations;
+			}
+
+			@Override
+			public Annotation[] getAnnotations() {
+				return parameterAnnotations;
+			}
+
+			@Override
+			public <T extends Annotation> T getAnnotation(Class<T> annotationType) {
+				return Arrays.stream(parameterAnnotations).filter(annotationType::isInstance).map(annotationType::cast).findFirst().orElse(null);
+			}
+
+		};
+	}
+
+}
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/AnnotatedTypeImpl.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/AnnotatedTypeImpl.java
new file mode 100644
index 0000000..e5de340
--- /dev/null
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/AnnotatedTypeImpl.java
@@ -0,0 +1,66 @@
+/**
+ * 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.annotated;
+
+import static java.util.stream.Collectors.*;
+import static org.apache.aries.cdi.container.internal.util.Reflection.*;
+
+import java.lang.reflect.Constructor;
+import java.util.Set;
+
+import javax.enterprise.inject.spi.AnnotatedConstructor;
+import javax.enterprise.inject.spi.AnnotatedField;
+import javax.enterprise.inject.spi.AnnotatedMethod;
+import javax.enterprise.inject.spi.AnnotatedType;
+
+public class AnnotatedTypeImpl<X> extends AnnotatedImpl<X> implements AnnotatedType<X> {
+
+	private final Class<X> _declaringClass;
+	private final Set<AnnotatedConstructor<X>> _constructors;
+	private final Set<AnnotatedField<? super X>> _fields;
+	private final Set<AnnotatedMethod<? super X>> _methods;
+
+	@SuppressWarnings("unchecked")
+	public AnnotatedTypeImpl(final Class<X> declaringClass) {
+		super(declaringClass, declaringClass);
+
+		_declaringClass = declaringClass;
+
+		_constructors = allConstructors(_declaringClass).map(c -> new AnnotatedConstructorImpl<>(this, (Constructor<X>)c)).collect(toSet());
+		_fields = allFields(_declaringClass).map(f -> new AnnotatedFieldImpl<>(this, f)).collect(toSet());
+		_methods = allMethods(_declaringClass).map(m -> new AnnotatedMethodImpl<>(this, m)).collect(toSet());
+	}
+
+	@Override
+	public Class<X> getJavaClass() {
+		return _declaringClass;
+	}
+
+	@Override
+	public Set<AnnotatedConstructor<X>> getConstructors() {
+		return _constructors;
+	}
+
+	@Override
+	public Set<AnnotatedMethod<? super X>> getMethods() {
+		return _methods;
+	}
+
+	@Override
+	public Set<AnnotatedField<? super X>> getFields() {
+		return _fields;
+	}
+
+}


[aries-cdi] 16/27: readme updates

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rotty3000 pushed a commit to branch rotty3000/cdi-spi
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit fd67de0787e2d16849e69728e2b33c9f6939f460
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Fri Nov 22 16:49:46 2019 -0500

    readme updates
    
    Signed-off-by: Raymond Augé <ro...@apache.org>
---
 README.md | 47 ++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 42 insertions(+), 5 deletions(-)

diff --git a/README.md b/README.md
index bd7fd8f..0f607ab 100644
--- a/README.md
+++ b/README.md
@@ -78,15 +78,23 @@ If you want to emulate the CDI default use:
 
 In bnd `4.3.0+` you can rely purely on the discovery mode calculated from existing `beans.xml` files in your project. This grants even less configuration friction for existing projects migrating to OSGi CDI.
 
-## Pre-built runtime
+## Pre-built runtimes
 
-This repository provides an example for how to assemble an executable jar providing a complete runtime for you to just drop in your CDI bundles. It comes complete with logging, Gogo shell, Config Admin, Http Whiteboard support, and OSGi Promises.
+This repository provides two examples for how to assemble an executable jar providing a complete runtime for you to just drop in your CDI bundles. These come complete with logging, Gogo shell, Config Admin, Http Whiteboard support, and OSGi Promises.
 
-Once you've completed a successfull build, you should be able to execute the command:
+Once you've completed a successful build, you should be able to execute the commands:
 
-`java -jar cdi-executable/target/executable.jar`
+#### OpenWebBeans
 
-and be presented with a gogo shell prompt ready for you to install a CDI bundle.
+`java -jar cdi-executable/target/weld-executable.jar`
+
+and be presented a gogo shell prompt running in a framework that uses Aries CDI over **Apache OpenWebBeans** ready for you to install a CDI bundle.
+
+#### Weld
+
+`java -jar cdi-executable/target/owb-executable.jar`
+
+and be presented with a gogo shell prompt running in a framework that uses Aries CDI over **JBoss Weld** ready for you to install a CDI bundle.
 
 ## Architecture Overview
 
@@ -172,4 +180,33 @@ When a CDI bundle is identified by CCR several steps are taken before any bean i
          - `@BeforeDestroy(ComponentScoped.class)`
          - `@Destroyed(ComponentScoped.class)`
 
+## Aries CDI SPI
+
+Aries CDI now has an SPI for enabling it to be used with any CDI container impl.
+
+The requirements to satisfy this SPI are quite simple:
+
+- Aries CDI Extender requires:
+
+  -  a **prototype scoped** service that implements `javax.enterprise.inject.se.SeContainerInitializer`
+
+  - this service must have a service property `aries.cdi.spi`  whose value is not important but the recommendation is a human readable name of the implementation
+
+  - Aries CDI will pass two values via the properties methods of `javax.enterprise.inject.se.SeContainerInitializer` as defined by `org.apache.aries.cdi.spi.Keys`
+
+  - the  `SeContainerInitializer` will be called like this:
+
+    ```java
+    			_seContainer = _seContainerInitializerInstance
+    				.setClassLoader((org.apache.aries.cdi.spi.loader.SpiLoader)spiLoader)
+    				.addBeanClasses(classes)
+    				.setProperties(properties)
+    				.addProperty(BEANS_XML_PROPERTY, containerState.beansModel().getBeansXml())
+    				.addProperty(BUNDLECONTEXT_PROPERTY, bundle().getBundleContext())
+    				.addExtensions(extensions)
+    				.initialize();
+    ```
+
+  - The behaviour of this container should be to start the `@ApplicationScoped` context immediately. This allows for services from the container component to be published right away.
+
 Check out the many questions and answers in the [FAQ](faq.md).
\ No newline at end of file


[aries-cdi] 05/27: add spi to bom

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rotty3000 pushed a commit to branch rotty3000/cdi-spi
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit 626b69d041ff958193f7173bdf3d4f499114fff0
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Fri Nov 22 11:24:31 2019 -0500

    add spi to bom
    
    Signed-off-by: Raymond Augé <ro...@apache.org>
---
 cdi-bom/pom.xml | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/cdi-bom/pom.xml b/cdi-bom/pom.xml
index e3a9ce5..794e2d1 100644
--- a/cdi-bom/pom.xml
+++ b/cdi-bom/pom.xml
@@ -76,6 +76,12 @@
 				<scope>compile</scope>
 			</dependency>
 			<dependency>
+				<groupId>org.apache.aries.cdi</groupId>
+				<artifactId>org.apache.aries.cdi.spi</artifactId>
+				<version>${project.version}</version>
+				<scope>compile</scope>
+			</dependency>
+			<dependency>
 				<groupId>org.apache.aries.spifly</groupId>
 				<artifactId>org.apache.aries.spifly.dynamic.framework.extension</artifactId>
 				<version>1.2</version>


[aries-cdi] 18/27: update tests

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rotty3000 pushed a commit to branch rotty3000/cdi-spi
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit 198052080311fd817c319e792c20ad08020a1778
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Fri Nov 22 17:02:03 2019 -0500

    update tests
    
    Signed-off-by: Raymond Augé <ro...@apache.org>
---
 .../main/java/org/apache/aries/cdi/test/beans/BundleContextBean.java  | 4 ++++
 .../main/java/org/apache/aries/cdi/test/beans/CdiEventObserver.java   | 4 ++++
 .../java/org/apache/aries/cdi/test/beans/IntegerServiceProvider.java  | 4 ++++
 .../src/main/java/org/apache/aries/cdi/test/beans/PojoImpl.java       | 4 ++++
 .../java/org/apache/aries/cdi/test/tb11/OptionalReference_AS.java     | 4 ++++
 .../java/org/apache/aries/cdi/test/tb12/IntegerServiceProvider.java   | 4 ++++
 .../src/main/java/org/apache/aries/cdi/test/tb13/CustomContext.java   | 3 +++
 cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3/One.java   | 4 ++++
 cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1/One.java | 4 ++++
 .../java/org/apache/aries/cdi/test/tb152_3_1_1a/ContextObserver.java  | 4 ++++
 .../java/org/apache/aries/cdi/test/tb152_3_1_1b/ContextObserver.java  | 4 ++++
 .../java/org/apache/aries/cdi/test/tb152_3_1_1c/ContextObserver.java  | 4 ++++
 .../java/org/apache/aries/cdi/test/tb152_3_1_1d/ContextObserver.java  | 4 ++++
 .../java/org/apache/aries/cdi/test/tb152_3_1_1e/ContextObserver.java  | 4 ++++
 .../java/org/apache/aries/cdi/test/tb152_3_1_1f/ContextObserver.java  | 4 ++++
 .../java/org/apache/aries/cdi/test/tb152_3_1_1g/ContextObserver.java  | 4 ++++
 .../java/org/apache/aries/cdi/test/tb152_3_1_1h/ContextObserver.java  | 4 ++++
 .../java/org/apache/aries/cdi/test/tb152_3_1_1i/ContextObserver.java  | 4 ++++
 .../java/org/apache/aries/cdi/test/tb152_3_1_1j/ContextObserver.java  | 4 ++++
 .../java/org/apache/aries/cdi/test/tb152_3_1_1k/ContextObserver.java  | 4 ++++
 .../java/org/apache/aries/cdi/test/tb152_3_1_1l/ContextObserver.java  | 4 ++++
 cdi-itests/src/main/java/org/apache/aries/cdi/test/tb3/Config.java    | 2 +-
 cdi-itests/src/main/java/org/apache/aries/cdi/test/tb5/Config.java    | 2 +-
 cdi-itests/src/main/java/org/apache/aries/cdi/test/tb7/Config.java    | 2 +-
 .../src/main/java/org/apache/aries/cdi/test/tb8/ContainerBean.java    | 4 ++++
 .../org/apache/aries/cdi/test/tb9/ContainerReferenceEventHandler.java | 4 ++++
 26 files changed, 94 insertions(+), 3 deletions(-)

diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/BundleContextBean.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/BundleContextBean.java
index cb70344..1b64791 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/BundleContextBean.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/BundleContextBean.java
@@ -25,6 +25,10 @@ import org.osgi.framework.BundleContext;
 @BundleContextBeanQualifier
 public class BundleContextBean implements BeanService<BundleContext> {
 
+	protected BundleContextBean() {
+		// no-op: a normal scoped bean MUST have a default constructor to let container create a proxy
+	}
+
 	@Override
 	public String doSomething() {
 		return toString();
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/CdiEventObserver.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/CdiEventObserver.java
index 504a44b..a29e3ca 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/CdiEventObserver.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/CdiEventObserver.java
@@ -28,6 +28,10 @@ import org.apache.aries.cdi.test.interfaces.CdiEventObserverQualifier;
 @ApplicationScoped
 public class CdiEventObserver implements BeanService<List<Object>> {
 
+	protected CdiEventObserver() {
+		// no-op: a normal scoped bean MUST have a default constructor to let container create a proxy
+	}
+
 	@Override
 	public String doSomething() {
 		return this.toString();
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/IntegerServiceProvider.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/IntegerServiceProvider.java
index 3508fc6..ffbd609 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/IntegerServiceProvider.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/IntegerServiceProvider.java
@@ -23,6 +23,10 @@ import org.osgi.service.cdi.propertytypes.ServiceRanking;
 @ApplicationScoped
 public class IntegerServiceProvider {
 
+	protected IntegerServiceProvider() {
+		// no-op: a normal scoped bean MUST have a default constructor to let container create a proxy
+	}
+
 	@Produces
 	@Service(Integer.class)
 	@ServiceRanking(5000)
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/PojoImpl.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/PojoImpl.java
index 5c9c7e9..102ff21 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/PojoImpl.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/PojoImpl.java
@@ -23,6 +23,10 @@ import org.apache.aries.cdi.test.interfaces.Pojo;
 @ApplicationScoped
 public class PojoImpl implements Pojo {
 
+	protected PojoImpl() {
+		// no-op: a normal scoped bean MUST have a default constructor to let container create a proxy
+	}
+
 	@Override
 	public String foo(String fooInput) {
 		_counter.incrementAndGet();
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb11/OptionalReference_AS.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb11/OptionalReference_AS.java
index 4048bae..f185b70 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb11/OptionalReference_AS.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb11/OptionalReference_AS.java
@@ -30,6 +30,10 @@ import org.osgi.service.cdi.annotations.Service;
 @Service
 public class OptionalReference_AS implements Pojo {
 
+	protected OptionalReference_AS() {
+		// no-op: a normal scoped bean MUST have a default constructor to let container create a proxy
+	}
+
 	@Inject
 	@Reluctant
 	@Reference
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb12/IntegerServiceProvider.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb12/IntegerServiceProvider.java
index dc3c672..3f792a3 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb12/IntegerServiceProvider.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb12/IntegerServiceProvider.java
@@ -23,6 +23,10 @@ import org.osgi.service.cdi.propertytypes.ServiceRanking;
 @ApplicationScoped
 public class IntegerServiceProvider {
 
+	protected IntegerServiceProvider() {
+		// no-op: a normal scoped bean MUST have a default constructor to let container create a proxy
+	}
+
 	@Produces
 	@Service(Integer.class)
 	@ServiceRanking(5000)
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb13/CustomContext.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb13/CustomContext.java
index 024714e..6da953a 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb13/CustomContext.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb13/CustomContext.java
@@ -30,6 +30,9 @@ import org.osgi.service.http.context.ServletContextHelper;
 @HttpWhiteboardListener
 @Service({ServletContextHelper.class, ServletContextListener.class})
 public class CustomContext extends ServletContextHelper implements ServletContextListener {
+	protected CustomContext() {
+		// no-op: a normal scoped bean MUST have a default constructor to let container create a proxy
+	}
 
 	@Inject
 	public CustomContext(BundleContext bundleContext) {
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3/One.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3/One.java
index b965c1b..3f82cf4 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3/One.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3/One.java
@@ -32,6 +32,10 @@ import org.osgi.service.cdi.propertytypes.ServiceDescription;
 @ServiceDescription("one")
 public class One implements BeanService<Context> {
 
+	protected One() {
+		// no-op: a normal scoped bean MUST have a default constructor to let container create a proxy
+	}
+
 	private Context _context;
 
 	void onComponent(@Observes @Initialized(ComponentScoped.class) Object obj, BeanManager bm) {
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1/One.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1/One.java
index 2ebf274..8aa1353 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1/One.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1/One.java
@@ -35,6 +35,10 @@ import org.osgi.service.cdi.propertytypes.ServiceDescription;
 @SuppressWarnings({"rawtypes", "unchecked"})
 public class One {
 
+	protected One() {
+		// no-op: a normal scoped bean MUST have a default constructor to let container create a proxy
+	}
+
 	@Inject
 	@Reference
 	@ServiceDescription("onInitialized")
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1a/ContextObserver.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1a/ContextObserver.java
index ff2ec01..4cebf18 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1a/ContextObserver.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1a/ContextObserver.java
@@ -33,6 +33,10 @@ import org.osgi.service.cdi.propertytypes.ServiceDescription;
 @ApplicationScoped
 @SuppressWarnings({"rawtypes", "unchecked"})
 public class ContextObserver {
+	protected ContextObserver() {
+		this(null, null, null);
+		// no-op: a normal scoped bean MUST have a default constructor to let container create a proxy
+	}
 
 	@Inject
 	public ContextObserver(
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1b/ContextObserver.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1b/ContextObserver.java
index 67888cc..d267abe 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1b/ContextObserver.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1b/ContextObserver.java
@@ -33,6 +33,10 @@ import org.osgi.service.cdi.propertytypes.ServiceDescription;
 @ApplicationScoped
 @SuppressWarnings({"rawtypes", "unchecked"})
 public class ContextObserver {
+	protected ContextObserver() {
+		this(null, null, null);
+		// no-op: a normal scoped bean MUST have a default constructor to let container create a proxy
+	}
 
 	@Inject
 	public ContextObserver(
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1c/ContextObserver.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1c/ContextObserver.java
index 77215f1..1662c38 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1c/ContextObserver.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1c/ContextObserver.java
@@ -33,6 +33,10 @@ import org.osgi.service.cdi.propertytypes.ServiceDescription;
 @ApplicationScoped
 @SuppressWarnings({"rawtypes", "unchecked"})
 public class ContextObserver {
+	protected ContextObserver() {
+		this(null, null, null);
+		// no-op: a normal scoped bean MUST have a default constructor to let container create a proxy
+	}
 
 	@Inject
 	public ContextObserver(
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1d/ContextObserver.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1d/ContextObserver.java
index 17a5347..ca6b3b3 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1d/ContextObserver.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1d/ContextObserver.java
@@ -33,6 +33,10 @@ import org.osgi.service.cdi.propertytypes.ServiceDescription;
 @ApplicationScoped
 @SuppressWarnings({"rawtypes", "unchecked"})
 public class ContextObserver {
+	protected ContextObserver() {
+		this(null, null, null);
+		// no-op: a normal scoped bean MUST have a default constructor to let container create a proxy
+	}
 
 	@Inject
 	public ContextObserver(
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1e/ContextObserver.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1e/ContextObserver.java
index b5f2167..de43ec3 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1e/ContextObserver.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1e/ContextObserver.java
@@ -33,6 +33,10 @@ import org.osgi.service.cdi.propertytypes.ServiceDescription;
 @ApplicationScoped
 @SuppressWarnings({"rawtypes", "unchecked"})
 public class ContextObserver {
+	protected ContextObserver() {
+		this(null, null, null);
+		// no-op: a normal scoped bean MUST have a default constructor to let container create a proxy
+	}
 
 	@Inject
 	public ContextObserver(
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1f/ContextObserver.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1f/ContextObserver.java
index da4882e..cfc2cf0 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1f/ContextObserver.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1f/ContextObserver.java
@@ -33,6 +33,10 @@ import org.osgi.service.cdi.propertytypes.ServiceDescription;
 @ApplicationScoped
 @SuppressWarnings({"rawtypes", "unchecked"})
 public class ContextObserver {
+	protected ContextObserver() {
+		this(null, null, null);
+		// no-op: a normal scoped bean MUST have a default constructor to let container create a proxy
+	}
 
 	@Inject
 	public ContextObserver(
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1g/ContextObserver.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1g/ContextObserver.java
index 9fbb33b..ff6fab2 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1g/ContextObserver.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1g/ContextObserver.java
@@ -33,6 +33,10 @@ import org.osgi.service.cdi.propertytypes.ServiceDescription;
 @ApplicationScoped
 @SuppressWarnings({"rawtypes", "unchecked"})
 public class ContextObserver {
+	protected ContextObserver() {
+		this(null, null, null);
+		// no-op: a normal scoped bean MUST have a default constructor to let container create a proxy
+	}
 
 	@Inject
 	public ContextObserver(
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1h/ContextObserver.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1h/ContextObserver.java
index b746faf..570195c 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1h/ContextObserver.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1h/ContextObserver.java
@@ -33,6 +33,10 @@ import org.osgi.service.cdi.propertytypes.ServiceDescription;
 @ApplicationScoped
 @SuppressWarnings({"rawtypes", "unchecked"})
 public class ContextObserver {
+	protected ContextObserver() {
+		this(null, null, null);
+		// no-op: a normal scoped bean MUST have a default constructor to let container create a proxy
+	}
 
 	@Inject
 	public ContextObserver(
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1i/ContextObserver.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1i/ContextObserver.java
index d98f7be..0aa40fa 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1i/ContextObserver.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1i/ContextObserver.java
@@ -33,6 +33,10 @@ import org.osgi.service.cdi.propertytypes.ServiceDescription;
 @ApplicationScoped
 @SuppressWarnings({"rawtypes", "unchecked"})
 public class ContextObserver {
+	protected ContextObserver() {
+		this(null, null, null);
+		// no-op: a normal scoped bean MUST have a default constructor to let container create a proxy
+	}
 
 	@Inject
 	public ContextObserver(
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1j/ContextObserver.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1j/ContextObserver.java
index 9563ae1..3a5ffe8 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1j/ContextObserver.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1j/ContextObserver.java
@@ -33,6 +33,10 @@ import org.osgi.service.cdi.propertytypes.ServiceDescription;
 @ApplicationScoped
 @SuppressWarnings({"rawtypes", "unchecked"})
 public class ContextObserver {
+	protected ContextObserver() {
+		this(null, null, null);
+		// no-op: a normal scoped bean MUST have a default constructor to let container create a proxy
+	}
 
 	@Inject
 	public ContextObserver(
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1k/ContextObserver.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1k/ContextObserver.java
index 5dad7b7..afdc1c8 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1k/ContextObserver.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1k/ContextObserver.java
@@ -33,6 +33,10 @@ import org.osgi.service.cdi.propertytypes.ServiceDescription;
 @ApplicationScoped
 @SuppressWarnings({"rawtypes", "unchecked"})
 public class ContextObserver {
+	protected ContextObserver() {
+		this(null, null, null);
+		// no-op: a normal scoped bean MUST have a default constructor to let container create a proxy
+	}
 
 	@Inject
 	public ContextObserver(
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1l/ContextObserver.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1l/ContextObserver.java
index 29b0608..a17685c 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1l/ContextObserver.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1_1l/ContextObserver.java
@@ -33,6 +33,10 @@ import org.osgi.service.cdi.propertytypes.ServiceDescription;
 @ApplicationScoped
 @SuppressWarnings({"rawtypes", "unchecked"})
 public class ContextObserver {
+	protected ContextObserver() {
+		this(null, null, null);
+		// no-op: a normal scoped bean MUST have a default constructor to let container create a proxy
+	}
 
 	@Inject
 	public ContextObserver(
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb3/Config.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb3/Config.java
index 733ac15..fab0878 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb3/Config.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb3/Config.java
@@ -14,7 +14,7 @@
 
 package org.apache.aries.cdi.test.tb3;
 
-@interface Config {
+public @interface Config {
 
 	String color() default "blue";
 
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb5/Config.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb5/Config.java
index 230aea7..5c30f4b 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb5/Config.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb5/Config.java
@@ -14,7 +14,7 @@
 
 package org.apache.aries.cdi.test.tb5;
 
-@interface Config {
+public @interface Config {
 
 	String color() default "blue";
 
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb7/Config.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb7/Config.java
index fe0342e..5e0e380 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb7/Config.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb7/Config.java
@@ -14,7 +14,7 @@
 
 package org.apache.aries.cdi.test.tb7;
 
-@interface Config {
+public @interface Config {
 
 	String color() default "blue";
 
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb8/ContainerBean.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb8/ContainerBean.java
index b9f7541..265b492 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb8/ContainerBean.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb8/ContainerBean.java
@@ -25,6 +25,10 @@ import org.osgi.service.cdi.annotations.Service;
 @Service({Pojo.class, ContainerBean.class})
 public class ContainerBean implements Pojo {
 
+	protected ContainerBean() {
+		// no-op: a normal scoped bean MUST have a default constructor to let container create a proxy
+	}
+
 	@Override
 	public String foo(String fooInput) {
 		return getCount() + fooInput + getCount();
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb9/ContainerReferenceEventHandler.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb9/ContainerReferenceEventHandler.java
index e67ee3e..2bf87e6 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb9/ContainerReferenceEventHandler.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb9/ContainerReferenceEventHandler.java
@@ -31,6 +31,10 @@ import org.osgi.service.log.Logger;
 @Service
 public class ContainerReferenceEventHandler implements Pojo {
 
+	protected ContainerReferenceEventHandler() {
+		// no-op: a normal scoped bean MUST have a default constructor to let container create a proxy
+	}
+
 	@Inject
 	void integers(BindServiceReference<Integer> binder, Logger logger) {
 		binder.adding(


[aries-cdi] 12/27: executables for each

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rotty3000 pushed a commit to branch rotty3000/cdi-spi
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit b0f5ac4b6d43abf3e0ff5af57b24a3f80738ae9e
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Fri Nov 22 16:47:20 2019 -0500

    executables for each
    
    Signed-off-by: Raymond Augé <ro...@apache.org>
---
 cdi-executable/owb-executable.bndrun               | 11 ++--
 cdi-executable/pom.xml                             | 60 +++++++++++++++++++---
 ...wb-executable.bndrun => weld-executable.bndrun} | 32 +++++++-----
 pom.xml                                            |  8 ---
 4 files changed, 80 insertions(+), 31 deletions(-)

diff --git a/cdi-executable/owb-executable.bndrun b/cdi-executable/owb-executable.bndrun
index 14a9500..ce1b2c1 100644
--- a/cdi-executable/owb-executable.bndrun
+++ b/cdi-executable/owb-executable.bndrun
@@ -24,9 +24,6 @@
 	osgi.console=
 
 -resolve.effective: resolve, active
--runrequires: \
-	osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.owb)',\
-	osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.command)'
 
 -runpath: \
 	ch.qos.logback.classic,\
@@ -41,6 +38,14 @@
 	org.slf4j.spi;version=1.7.28,\
 	sun.misc
 
+-runrequires: \
+	osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.owb)',\
+	osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.command)'
+
+-runblacklist: \
+	osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.weld)',\
+	osgi.identity;filter:='(osgi.identity=org.jboss.spec.javax.el.jboss-el-api_3.0_spec)'
+
 -runbundles: \
 	javax.servlet.jsp-api;version='[2.3.3,2.3.4)',\
 	openwebbeans-impl;version='[2.0.13,2.0.14)',\
diff --git a/cdi-executable/pom.xml b/cdi-executable/pom.xml
index 0cca58d..52607c6 100644
--- a/cdi-executable/pom.xml
+++ b/cdi-executable/pom.xml
@@ -78,21 +78,63 @@
 				<groupId>biz.aQute.bnd</groupId>
 				<artifactId>bnd-resolver-maven-plugin</artifactId>
 				<configuration>
-					<bndruns>
-						<bndrun>owb-executable.bndrun</bndrun>
-					</bndruns>
 					<includeDependencyManagement>true</includeDependencyManagement>
 				</configuration>
+				<executions>
+					<execution>
+						<id>owb-resolve</id>
+						<goals>
+							<goal>resolve</goal>
+						</goals>
+						<configuration>
+							<bndruns>
+								<bndrun>owb-executable.bndrun</bndrun>
+							</bndruns>
+						</configuration>
+					</execution>
+					<execution>
+						<id>weld-resolve</id>
+						<goals>
+							<goal>resolve</goal>
+						</goals>
+						<configuration>
+							<bndruns>
+								<bndrun>weld-executable.bndrun</bndrun>
+							</bndruns>
+						</configuration>
+					</execution>
+				</executions>
 			</plugin>
 			<plugin>
 				<groupId>biz.aQute.bnd</groupId>
 				<artifactId>bnd-export-maven-plugin</artifactId>
 				<configuration>
-					<bndruns>
-						<bndrun>owb-executable.bndrun</bndrun>
-					</bndruns>
 					<includeDependencyManagement>true</includeDependencyManagement>
 				</configuration>
+				<executions>
+					<execution>
+						<id>owb-export</id>
+						<goals>
+							<goal>export</goal>
+						</goals>
+						<configuration>
+							<bndruns>
+								<bndrun>owb-executable.bndrun</bndrun>
+							</bndruns>
+						</configuration>
+					</execution>
+					<execution>
+						<id>weld-export</id>
+						<goals>
+							<goal>export</goal>
+						</goals>
+						<configuration>
+							<bndruns>
+								<bndrun>weld-executable.bndrun</bndrun>
+							</bndruns>
+						</configuration>
+					</execution>
+				</executions>
 			</plugin>
 			<plugin>
 				<groupId>biz.aQute.bnd</groupId>
@@ -104,6 +146,12 @@
 							<bndrun>owb-executable.bndrun</bndrun>
 						</configuration>
 					</execution>
+					<execution>
+						<id>weld-executable</id>
+						<configuration>
+							<bndrun>weld-executable.bndrun</bndrun>
+						</configuration>
+					</execution>
 				</executions>
 			</plugin>
 		</plugins>
diff --git a/cdi-executable/owb-executable.bndrun b/cdi-executable/weld-executable.bndrun
similarity index 76%
copy from cdi-executable/owb-executable.bndrun
copy to cdi-executable/weld-executable.bndrun
index 14a9500..8322ec8 100644
--- a/cdi-executable/owb-executable.bndrun
+++ b/cdi-executable/weld-executable.bndrun
@@ -24,9 +24,6 @@
 	osgi.console=
 
 -resolve.effective: resolve, active
--runrequires: \
-	osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.owb)',\
-	osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.command)'
 
 -runpath: \
 	ch.qos.logback.classic,\
@@ -41,29 +38,36 @@
 	org.slf4j.spi;version=1.7.28,\
 	sun.misc
 
+-runrequires: \
+	osgi.identity;filter:='(osgi.identity=javax.ejb-api)',\
+	osgi.identity;filter:='(osgi.identity=javax.transaction-api)',\
+	osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.weld)',\
+	osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.command)'
+
+-runblacklist: \
+	osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.owb)',\
+	osgi.identity;filter:='(osgi.identity=org.jboss.spec.javax.el.jboss-el-api_3.0_spec)'
+
 -runbundles: \
-	javax.servlet.jsp-api;version='[2.3.3,2.3.4)',\
-	openwebbeans-impl;version='[2.0.13,2.0.14)',\
-	openwebbeans-spi;version='[2.0.13,2.0.14)',\
-	openwebbeans-web;version='[2.0.13,2.0.14)',\
 	org.apache.aries.cdi.extender;version='[1.0.3,1.0.4)',\
-	org.apache.aries.cdi.extra;version='[1.0.3,1.0.4)',\
-	org.apache.aries.cdi.owb;version='[1.0.3,1.0.4)',\
 	org.apache.aries.cdi.spi;version='[1.0.3,1.0.4)',\
 	org.apache.aries.spifly.dynamic.framework.extension;version='[1.2.0,1.2.1)',\
 	org.apache.felix.configadmin;version='[1.9.10,1.9.11)',\
 	org.apache.felix.gogo.command;version='[1.1.0,1.1.1)',\
 	org.apache.felix.gogo.runtime;version='[1.1.2,1.1.3)',\
 	org.apache.felix.gogo.shell;version='[1.1.2,1.1.3)',\
-	org.apache.felix.http.servlet-api;version='[1.1.2,1.1.3)',\
 	org.apache.geronimo.specs.geronimo-annotation_1.3_spec;version='[1.1.0,1.1.1)',\
 	org.apache.geronimo.specs.geronimo-atinject_1.0_spec;version='[1.1.0,1.1.1)',\
 	org.apache.geronimo.specs.geronimo-el_2.2_spec;version='[1.1.0,1.1.1)',\
 	org.apache.geronimo.specs.geronimo-interceptor_1.2_spec;version='[1.1.0,1.1.1)',\
 	org.apache.geronimo.specs.geronimo-jcdi_2.0_spec;version='[1.1.0,1.1.1)',\
-	org.apache.xbean.asm7-shaded;version='[4.13.0,4.13.1)',\
-	org.apache.xbean.bundleutils;version='[4.15.0,4.15.1)',\
-	org.apache.xbean.finder-shaded;version='[4.13.0,4.13.1)',\
 	org.osgi.service.cdi;version='[1.0.0,1.0.1)',\
 	org.osgi.util.function;version='[1.1.0,1.1.1)',\
-	org.osgi.util.promise;version='[1.1.0,1.1.1)'
+	org.osgi.util.promise;version='[1.1.0,1.1.1)',\
+	javax.ejb-api;version='[3.2.0,3.2.1)',\
+	javax.enterprise.cdi-api;version='[2.0.0,2.0.1)',\
+	javax.transaction-api;version='[1.2.0,1.2.1)',\
+	jboss-classfilewriter;version='[1.2.3,1.2.4)',\
+	org.apache.aries.cdi.weld;version='[1.0.3,1.0.4)',\
+	org.jboss.logging.jboss-logging;version='[3.3.2,3.3.3)',\
+	org.jboss.weld.osgi-bundle;version='[3.0.5,3.0.6)'
diff --git a/pom.xml b/pom.xml
index 61b5854..4d6bf5f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -284,14 +284,6 @@
 						<failOnChanges>false</failOnChanges>
 						<resolve>false</resolve>
 					</configuration>
-					<executions>
-						<execution>
-							<id>export</id>
-							<goals>
-								<goal>export</goal>
-							</goals>
-						</execution>
-					</executions>
 				</plugin>
 				<plugin>
 					<groupId>biz.aQute.bnd</groupId>


[aries-cdi] 13/27: tweak jndi for better stability

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rotty3000 pushed a commit to branch rotty3000/cdi-spi
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit 353aff771c6ea959f4f8b654e3c6f96ddcf83766
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Fri Nov 22 16:47:44 2019 -0500

    tweak jndi for better stability
    
    Signed-off-by: Raymond Augé <ro...@apache.org>
---
 .../java/org/apache/aries/cdi/extension/jndi/JndiContext.java  | 10 +++++++---
 .../org/apache/aries/cdi/extension/jndi/JndiExtension.java     |  6 ++++--
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/cdi-extension-jndi/src/main/java/org/apache/aries/cdi/extension/jndi/JndiContext.java b/cdi-extension-jndi/src/main/java/org/apache/aries/cdi/extension/jndi/JndiContext.java
index 4651e95..fcc3aee 100644
--- a/cdi-extension-jndi/src/main/java/org/apache/aries/cdi/extension/jndi/JndiContext.java
+++ b/cdi-extension-jndi/src/main/java/org/apache/aries/cdi/extension/jndi/JndiContext.java
@@ -32,9 +32,13 @@ import org.osgi.util.promise.Promise;
 
 public class JndiContext implements Context {
 
-	public JndiContext(Logger log, Promise<BeanManager> beanManager) {
+	public JndiContext(Logger log) {
 		_log = log;
+	}
+
+	public JndiContext setBeanManager(Promise<BeanManager> beanManager) {
 		_beanManager = beanManager;
+		return this;
 	}
 
 	@Override
@@ -45,7 +49,7 @@ public class JndiContext implements Context {
 	@Override
 	public Object lookup(String name) throws NamingException {
 		if (name.length() == 0) {
-			return new JndiContext(_log, _beanManager);
+			return new JndiContext(_log).setBeanManager(_beanManager);
 		}
 		if (name.equals("java:comp/BeanManager")) {
 			try {
@@ -194,6 +198,6 @@ public class JndiContext implements Context {
 	}
 
 	private final Logger _log;
-	private final Promise<BeanManager> _beanManager;
+	private volatile Promise<BeanManager> _beanManager;
 
 }
\ No newline at end of file
diff --git a/cdi-extension-jndi/src/main/java/org/apache/aries/cdi/extension/jndi/JndiExtension.java b/cdi-extension-jndi/src/main/java/org/apache/aries/cdi/extension/jndi/JndiExtension.java
index 94591eb..cd126c5 100644
--- a/cdi-extension-jndi/src/main/java/org/apache/aries/cdi/extension/jndi/JndiExtension.java
+++ b/cdi-extension-jndi/src/main/java/org/apache/aries/cdi/extension/jndi/JndiExtension.java
@@ -33,7 +33,7 @@ public class JndiExtension implements Extension, ObjectFactory {
 
 	public JndiExtension(Logger log) {
 		_beanManager = new Deferred<>();
-		_jndiContext = new JndiContext(log, _beanManager.getPromise());
+		_jndiContext = new JndiContext(log).setBeanManager(_beanManager.getPromise());
 	}
 
 	@Override
@@ -53,9 +53,11 @@ public class JndiExtension implements Extension, ObjectFactory {
 		AfterDeploymentValidation adv, BeanManager beanManager) {
 
 		_beanManager.resolve(beanManager);
+		_jndiContext.setBeanManager(_beanManager.getPromise());
+		_beanManager = new Deferred<>();
 	}
 
-	private final Deferred<BeanManager> _beanManager;
+	private volatile Deferred<BeanManager> _beanManager;
 	private final JndiContext _jndiContext;
 
 }


[aries-cdi] 25/27: mp-config test

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rotty3000 pushed a commit to branch rotty3000/cdi-spi
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit ce32f13d70d4937a66af040a837318a390624075
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Sun Nov 24 15:58:05 2019 -0500

    mp-config test
    
    Signed-off-by: Raymond Augé <ro...@apache.org>
---
 cdi-itests/bnd.bnd                                 |  3 +-
 cdi-itests/bnd/tb16.bnd                            | 13 ++++++
 cdi-itests/owb-itest.bndrun                        |  1 +
 cdi-itests/pom.xml                                 |  4 ++
 .../aries/cdi/test/cases/AbstractTestCase.java     |  9 +++-
 .../apache/aries/cdi/test/cases/MpConfigTests.java | 48 ++++++++++++++++++++++
 .../apache/aries/cdi/test/tb16/ConfiguredBean.java | 42 +++++++++++++++++++
 .../apache/aries/cdi/test/tb16/package-info.java   | 16 ++++++++
 cdi-itests/weld-itest.bndrun                       |  1 +
 9 files changed, 134 insertions(+), 3 deletions(-)

diff --git a/cdi-itests/bnd.bnd b/cdi-itests/bnd.bnd
index 1fd7594..d574c45 100644
--- a/cdi-itests/bnd.bnd
+++ b/cdi-itests/bnd.bnd
@@ -57,7 +57,8 @@ p = org.apache.aries.cdi.test
 	tb152_3_1_1l.jar,\
 	tb12.jar,\
 	tb13.jar,\
-	tb14.jar
+	tb14.jar,\
+	tb16.jar
 
 # Don't forget that we had to coax the `maven-jar-plugin` NOT to include the `sub-bundle` packages in
 # the root bundle:
diff --git a/cdi-itests/bnd/tb16.bnd b/cdi-itests/bnd/tb16.bnd
new file mode 100644
index 0000000..c6d1f50
--- /dev/null
+++ b/cdi-itests/bnd/tb16.bnd
@@ -0,0 +1,13 @@
+#    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.
+
+Export-Package: ${p}.tb16.*;-split-package:=first
diff --git a/cdi-itests/owb-itest.bndrun b/cdi-itests/owb-itest.bndrun
index 183d25f..e6fb820 100644
--- a/cdi-itests/owb-itest.bndrun
+++ b/cdi-itests/owb-itest.bndrun
@@ -31,6 +31,7 @@
 	openwebbeans-web;version='[2.0.13,2.0.14)',\
 	org.apache.aries.cdi.extender;version='[1.0.3,1.0.4)',\
 	org.apache.aries.cdi.extension.jndi;version='[1.0.3,1.0.4)',\
+	org.apache.aries.cdi.extension.mp-config;version='[1.0.3,1.0.4)',\
 	org.apache.aries.cdi.extra;version='[1.0.3,1.0.4)',\
 	org.apache.aries.cdi.itests;version='[1.0.3,1.0.4)',\
 	org.apache.aries.cdi.owb;version='[1.0.3,1.0.4)',\
diff --git a/cdi-itests/pom.xml b/cdi-itests/pom.xml
index 0a8aea2..9697bb8 100644
--- a/cdi-itests/pom.xml
+++ b/cdi-itests/pom.xml
@@ -64,6 +64,10 @@
 			<artifactId>org.apache.aries.cdi.extra</artifactId>
 		</dependency>
 		<dependency>
+			<groupId>org.apache.aries.cdi</groupId>
+			<artifactId>org.apache.aries.cdi.extension.mp-config</artifactId>
+		</dependency>
+		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.http.servlet-api</artifactId>
 		</dependency>
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/AbstractTestCase.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/AbstractTestCase.java
index 4c2fcda..25414dd 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/AbstractTestCase.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/AbstractTestCase.java
@@ -17,6 +17,7 @@ package org.apache.aries.cdi.test.cases;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
+import static org.osgi.service.cdi.CDIConstants.CDI_EXTENSION_PROPERTY;
 
 import java.io.InputStream;
 import java.util.Dictionary;
@@ -64,13 +65,17 @@ import org.osgi.util.tracker.ServiceTrackerCustomizer;
 	namespace = ServiceNamespace.SERVICE_NAMESPACE
 )
 @Requirement(
-	namespace = CDIConstants.CDI_EXTENSION_PROPERTY,
+	namespace = CDI_EXTENSION_PROPERTY,
 	name = "aries.cdi.http"
 )
 @Requirement(
-	namespace = CDIConstants.CDI_EXTENSION_PROPERTY,
+	namespace = CDI_EXTENSION_PROPERTY,
 	name = "aries.cdi.jndi"
 )
+@Requirement(
+	namespace = CDI_EXTENSION_PROPERTY,
+	name = "eclipse.microprofile.config"
+)
 public abstract class AbstractTestCase {
 
 	@Rule
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/MpConfigTests.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/MpConfigTests.java
new file mode 100644
index 0000000..7b083e5
--- /dev/null
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/MpConfigTests.java
@@ -0,0 +1,48 @@
+/**
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.aries.cdi.test.cases;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import org.apache.aries.cdi.test.interfaces.Pojo;
+import org.junit.Test;
+import org.osgi.framework.Bundle;
+import org.osgi.util.tracker.ServiceTracker;
+
+public class MpConfigTests extends SlimTestCase {
+
+	@Test
+	public void testConfigIsSet() throws Exception {
+		Bundle tb2Bundle = installBundle("tb16.jar", false);
+
+		tb2Bundle.start();
+
+		ServiceTracker<Pojo, Pojo> st = new ServiceTracker<Pojo, Pojo>(
+			bundleContext, Pojo.class, null);
+		st.open(true);
+
+		try {
+			Pojo pojo = st.waitForService(timeout);
+			assertNotNull(pojo);
+			assertEquals("[foo]", pojo.foo(null));
+		}
+		finally {
+			st.close();
+			tb2Bundle.uninstall();
+		}
+	}
+
+}
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb16/ConfiguredBean.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb16/ConfiguredBean.java
new file mode 100644
index 0000000..478caa9
--- /dev/null
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb16/ConfiguredBean.java
@@ -0,0 +1,42 @@
+/**
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.aries.cdi.test.tb16;
+
+import java.util.List;
+
+import javax.inject.Inject;
+
+import org.apache.aries.cdi.test.interfaces.Pojo;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.osgi.service.cdi.annotations.Service;
+
+@Service
+public class ConfiguredBean implements Pojo {
+
+	@Inject
+	@ConfigProperty(name = "tck.config.test.javaconfig.converter.stringvalues")
+	private List<String> myStringList;
+
+	@Override
+	public String foo(String ignored) {
+		return myStringList.toString();
+	}
+
+	@Override
+	public int getCount() {
+		return 0;
+	}
+
+}
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb16/package-info.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb16/package-info.java
new file mode 100644
index 0000000..315634c
--- /dev/null
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb16/package-info.java
@@ -0,0 +1,16 @@
+/**
+ * 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.
+ */
+
+@org.osgi.service.cdi.annotations.Beans
+package org.apache.aries.cdi.test.tb16;
diff --git a/cdi-itests/weld-itest.bndrun b/cdi-itests/weld-itest.bndrun
index e452bf3..2c4d345 100644
--- a/cdi-itests/weld-itest.bndrun
+++ b/cdi-itests/weld-itest.bndrun
@@ -40,6 +40,7 @@
 	org.apache.aries.cdi.extender;version='[1.0.3,1.0.4)',\
 	org.apache.aries.cdi.extension.http;version='[1.0.3,1.0.4)',\
 	org.apache.aries.cdi.extension.jndi;version='[1.0.3,1.0.4)',\
+	org.apache.aries.cdi.extension.mp-config;version='[1.0.3,1.0.4)',\
 	org.apache.aries.cdi.extra;version='[1.0.3,1.0.4)',\
 	org.apache.aries.cdi.itests;version='[1.0.3,1.0.4)',\
 	org.apache.aries.cdi.spi;version='[1.0.3,1.0.4)',\


[aries-cdi] 11/27: add Weld CDI container that uses the Aries CDI SPI

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rotty3000 pushed a commit to branch rotty3000/cdi-spi
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit 116023907d526ec63f56f4cf7cbad1a6f2c4528f
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Fri Nov 22 16:45:53 2019 -0500

    add Weld CDI container that uses the Aries CDI SPI
    
    Signed-off-by: Raymond Augé <ro...@apache.org>
---
 cdi-bom/pom.xml                                    |   6 +
 cdi-weld/pom.xml                                   | 162 ++++++++++++
 .../java/org/apache/aries/cdi/weld/Activator.java  |  55 ++++
 .../aries/cdi/weld/BundleResourcesLoader.java      | 115 +++++++++
 .../apache/aries/cdi/weld/ContainerDeployment.java |  66 +++++
 .../aries/cdi/weld/ContainerDeploymentArchive.java |  84 +++++++
 .../aries/cdi/weld/ContainerEnvironment.java       |  43 ++++
 .../apache/aries/cdi/weld/ExtensionMetadata.java   |  41 +++
 .../aries/cdi/weld/WeldSeContainerInitializer.java | 280 +++++++++++++++++++++
 .../weld/WeldSeContainerInitializerFactory.java    |  44 ++++
 .../org/apache/aries/cdi/weld/package-info.java    |  23 ++
 pom.xml                                            |  40 +--
 12 files changed, 920 insertions(+), 39 deletions(-)

diff --git a/cdi-bom/pom.xml b/cdi-bom/pom.xml
index d3b97c4..c383257 100644
--- a/cdi-bom/pom.xml
+++ b/cdi-bom/pom.xml
@@ -88,6 +88,12 @@
 				<scope>runtime</scope>
 			</dependency>
 			<dependency>
+				<groupId>org.apache.aries.cdi</groupId>
+				<artifactId>org.apache.aries.cdi.weld</artifactId>
+				<version>${project.version}</version>
+				<scope>runtime</scope>
+			</dependency>
+			<dependency>
 				<groupId>org.apache.aries.spifly</groupId>
 				<artifactId>org.apache.aries.spifly.dynamic.framework.extension</artifactId>
 				<version>1.2</version>
diff --git a/cdi-weld/pom.xml b/cdi-weld/pom.xml
new file mode 100644
index 0000000..bbb8f9d
--- /dev/null
+++ b/cdi-weld/pom.xml
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<groupId>org.apache.aries.cdi</groupId>
+		<artifactId>org.apache.aries.cdi</artifactId>
+		<version>1.0.3-SNAPSHOT</version>
+		<relativePath>..</relativePath>
+	</parent>
+
+	<artifactId>org.apache.aries.cdi.weld</artifactId>
+	<name>Apache Aries CDI - Container using JBoss Weld</name>
+	<description>Apache Aries CDI - Container using JBoss Weld</description>
+
+	<licenses>
+		<license>
+			<name>ASL 2.0</name>
+			<url>https://www.apache.org/licenses/LICENSE-2.0</url>
+		</license>
+	</licenses>
+
+	<scm>
+		<connection>scm:git:git@github.com:apache/aries-cdi.git</connection>
+		<developerConnection>scm:git:git@github.com:apache/aries-cdi.git</developerConnection>
+		<tag>HEAD</tag>
+		<url>https://github.com/apache/aries-cdi</url>
+	</scm>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>biz.aQute.bnd</groupId>
+				<artifactId>bnd-maven-plugin</artifactId>
+				<configuration>
+					<bnd><![CDATA[
+						-cdiannotations:
+						-noclassforname: true
+					]]></bnd>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.apache.aries.cdi</groupId>
+			<artifactId>org.apache.aries.cdi.extra</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.aries.cdi</groupId>
+			<artifactId>org.apache.aries.cdi.spi</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.geronimo.specs</groupId>
+			<artifactId>geronimo-annotation_1.3_spec</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.geronimo.specs</groupId>
+			<artifactId>geronimo-atinject_1.0_spec</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.geronimo.specs</groupId>
+			<artifactId>geronimo-interceptor_1.2_spec</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.geronimo.specs</groupId>
+			<artifactId>geronimo-jcdi_2.0_spec</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.jboss.weld</groupId>
+			<artifactId>weld-osgi-bundle</artifactId>
+			<version>${weld.version}</version>
+			<exclusions>
+				<exclusion>
+					<groupId>javax.annotation</groupId>
+					<artifactId>javax.annotation-api</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>javax.enterprise</groupId>
+					<artifactId>cdi-api</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>javax.inject</groupId>
+					<artifactId>javax.inject</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>org.jboss.spec.javax.annotation</groupId>
+					<artifactId>jboss-annotations-api_1.3_spec</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>org.jboss.spec.javax.ejb</groupId>
+					<artifactId>jboss-ejb-api_3.2_spec</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>org.jboss.spec.javax.el</groupId>
+					<artifactId>jboss-el-api_3.0_spec</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>org.jboss.spec.javax.interceptor</groupId>
+					<artifactId>jboss-interceptors-api_1.2_spec</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>org.jboss.spec.javax.transaction</groupId>
+					<artifactId>jboss-transaction-api_1.2_spec</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.felix</groupId>
+			<artifactId>org.apache.felix.http.servlet-api</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.osgi</groupId>
+			<artifactId>org.osgi.namespace.extender</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.osgi</groupId>
+			<artifactId>org.osgi.namespace.implementation</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.osgi</groupId>
+			<artifactId>org.osgi.namespace.service</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.osgi</groupId>
+			<artifactId>org.osgi.service.cdi</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.osgi</groupId>
+			<artifactId>org.osgi.service.http.whiteboard</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.osgi</groupId>
+			<artifactId>osgi.annotation</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.osgi</groupId>
+			<artifactId>osgi.core</artifactId>
+		</dependency>
+	</dependencies>
+
+</project>
\ No newline at end of file
diff --git a/cdi-weld/src/main/java/org/apache/aries/cdi/weld/Activator.java b/cdi-weld/src/main/java/org/apache/aries/cdi/weld/Activator.java
new file mode 100644
index 0000000..3d83511
--- /dev/null
+++ b/cdi-weld/src/main/java/org/apache/aries/cdi/weld/Activator.java
@@ -0,0 +1,55 @@
+/**
+ * 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.weld;
+
+import static org.osgi.framework.Constants.BUNDLE_ACTIVATOR;
+import static org.osgi.framework.Constants.SERVICE_DESCRIPTION;
+import static org.osgi.framework.Constants.SERVICE_VENDOR;
+
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+import javax.enterprise.inject.se.SeContainerInitializer;
+
+import org.osgi.annotation.bundle.Header;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
+
+@Header(
+	name = BUNDLE_ACTIVATOR,
+	value = "${@class}"
+)
+public class Activator implements BundleActivator {
+
+	@Override
+	public void start(BundleContext bundleContext) throws Exception {
+		Dictionary<String, Object> properties = new Hashtable<>();
+		properties.put(SERVICE_DESCRIPTION, "Aries CDI - Weld SeContainerInitializer Factory");
+		properties.put(SERVICE_VENDOR, "Apache Software Foundation");
+		properties.put("aries.cdi.spi", "Weld");
+
+		_seContainerInitializer = bundleContext.registerService(
+			SeContainerInitializer.class, new WeldSeContainerInitializerFactory(bundleContext), properties);
+	}
+
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		_seContainerInitializer.unregister();
+	}
+
+	private ServiceRegistration<SeContainerInitializer> _seContainerInitializer;
+
+}
diff --git a/cdi-weld/src/main/java/org/apache/aries/cdi/weld/BundleResourcesLoader.java b/cdi-weld/src/main/java/org/apache/aries/cdi/weld/BundleResourcesLoader.java
new file mode 100644
index 0000000..4485138
--- /dev/null
+++ b/cdi-weld/src/main/java/org/apache/aries/cdi/weld/BundleResourcesLoader.java
@@ -0,0 +1,115 @@
+/**
+ * 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.weld;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.aries.cdi.spi.loader.SpiLoader;
+import org.jboss.weld.resources.spi.ResourceLoader;
+import org.jboss.weld.resources.spi.ResourceLoadingException;
+import org.jboss.weld.serialization.spi.ProxyServices;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.namespace.PackageNamespace;
+import org.osgi.framework.wiring.BundleCapability;
+import org.osgi.framework.wiring.BundleWire;
+import org.osgi.framework.wiring.BundleWiring;
+
+public class BundleResourcesLoader implements ProxyServices, ResourceLoader {
+
+	BundleResourcesLoader(SpiLoader loader, Bundle spiImplBundle) {
+		BundleWiring spiImplWiring = spiImplBundle.adapt(BundleWiring.class);
+
+		List<Bundle> bundles = new ArrayList<>();
+
+		bundles.add(spiImplBundle);
+
+		List<BundleWire> requiredWires = spiImplWiring.getRequiredWires(PackageNamespace.PACKAGE_NAMESPACE);
+
+		for (BundleWire bundleWire : requiredWires) {
+			BundleCapability capability = bundleWire.getCapability();
+			Map<String, Object> attributes = capability.getAttributes();
+			String packageName = (String)attributes.get(PackageNamespace.PACKAGE_NAMESPACE);
+			if (!packageName.startsWith("org.jboss.weld.")) {
+				continue;
+			}
+
+			Bundle wireBundle = bundleWire.getProvider().getBundle();
+			if (!bundles.contains(wireBundle)) {
+				bundles.add(wireBundle);
+			}
+		}
+
+		loader.getBundles().addAll(bundles);
+
+		_classLoader = loader;
+	}
+
+
+	@Override
+	public void cleanup() {
+	}
+
+	@Override
+	public Class<?> classForName(String className) {
+		try {
+			return _classLoader.loadClass(className);
+		}
+		catch (ClassNotFoundException e) {
+			throw new ResourceLoadingException(ERROR_LOADING_CLASS + className, e);
+		}
+		catch (LinkageError e) {
+			throw new ResourceLoadingException(ERROR_LOADING_CLASS + className, e);
+		}
+		catch (TypeNotPresentException e) {
+			throw new ResourceLoadingException(ERROR_LOADING_CLASS + className, e);
+		}
+	}
+
+	@Override
+	public ClassLoader getClassLoader(Class<?> proxiedBeanType) {
+		return _classLoader;
+	}
+
+	@Override
+	public Class<?> loadBeanClass(String className) {
+		return classForName(className);
+	}
+
+	@Override
+	public URL getResource(String name) {
+		return _classLoader.getResource(name);
+	}
+
+	@Override
+	public Collection<URL> getResources(String name) {
+		try {
+			return Collections.list(_classLoader.getResources(name));
+		}
+		catch (IOException e) {
+			return Collections.emptyList();
+		}
+	}
+
+	private static final String ERROR_LOADING_CLASS = "Error loading class ";
+
+	private final ClassLoader _classLoader;
+
+}
\ No newline at end of file
diff --git a/cdi-weld/src/main/java/org/apache/aries/cdi/weld/ContainerDeployment.java b/cdi-weld/src/main/java/org/apache/aries/cdi/weld/ContainerDeployment.java
new file mode 100644
index 0000000..188229b
--- /dev/null
+++ b/cdi-weld/src/main/java/org/apache/aries/cdi/weld/ContainerDeployment.java
@@ -0,0 +1,66 @@
+/**
+ * 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.weld;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import javax.enterprise.inject.spi.Extension;
+
+import org.jboss.weld.bootstrap.api.ServiceRegistry;
+import org.jboss.weld.bootstrap.spi.BeanDeploymentArchive;
+import org.jboss.weld.bootstrap.spi.CDI11Deployment;
+import org.jboss.weld.bootstrap.spi.Metadata;
+
+public class ContainerDeployment implements CDI11Deployment {
+
+	public ContainerDeployment(Iterable<Metadata<Extension>> extensions, BeanDeploymentArchive beanDeploymentArchive) {
+		_extensions = extensions;
+		_beanDeploymentArchive = beanDeploymentArchive;
+
+		_beanDeploymentArchives = new ArrayList<BeanDeploymentArchive>();
+		_beanDeploymentArchives.add(beanDeploymentArchive);
+	}
+
+	@Override
+	public BeanDeploymentArchive getBeanDeploymentArchive(Class<?> beanClass) {
+		return _beanDeploymentArchive;
+	}
+
+	@Override
+	public Collection<BeanDeploymentArchive> getBeanDeploymentArchives() {
+		return _beanDeploymentArchives;
+	}
+
+	@Override
+	public Iterable<Metadata<Extension>> getExtensions() {
+		return _extensions;
+	}
+
+	@Override
+	public ServiceRegistry getServices() {
+		return _beanDeploymentArchive.getServices();
+	}
+
+	@Override
+	public BeanDeploymentArchive loadBeanDeploymentArchive(Class<?> aClass) {
+		return _beanDeploymentArchive;
+	}
+
+	private final BeanDeploymentArchive _beanDeploymentArchive;
+	private final Collection<BeanDeploymentArchive> _beanDeploymentArchives;
+	private final Iterable<Metadata<Extension>> _extensions;
+
+}
\ No newline at end of file
diff --git a/cdi-weld/src/main/java/org/apache/aries/cdi/weld/ContainerDeploymentArchive.java b/cdi-weld/src/main/java/org/apache/aries/cdi/weld/ContainerDeploymentArchive.java
new file mode 100644
index 0000000..bf5680a
--- /dev/null
+++ b/cdi-weld/src/main/java/org/apache/aries/cdi/weld/ContainerDeploymentArchive.java
@@ -0,0 +1,84 @@
+/**
+ * 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.weld;
+
+import java.util.Collection;
+import java.util.Collections;
+
+import org.jboss.weld.bootstrap.api.ServiceRegistry;
+import org.jboss.weld.bootstrap.api.helpers.SimpleServiceRegistry;
+import org.jboss.weld.bootstrap.spi.BeanDeploymentArchive;
+import org.jboss.weld.bootstrap.spi.BeansXml;
+import org.jboss.weld.bootstrap.spi.EEModuleDescriptor;
+import org.jboss.weld.bootstrap.spi.EEModuleDescriptor.ModuleType;
+import org.jboss.weld.bootstrap.spi.helpers.EEModuleDescriptorImpl;
+import org.jboss.weld.ejb.spi.EjbDescriptor;
+import org.jboss.weld.resources.spi.ResourceLoader;
+import org.jboss.weld.serialization.spi.ProxyServices;
+
+public class ContainerDeploymentArchive
+	implements BeanDeploymentArchive {
+
+	public <T extends ResourceLoader & ProxyServices> ContainerDeploymentArchive(
+		T loader, String id, Collection<String> beanClassNames, BeansXml beansXml) {
+
+		_id = id;
+		_beanClassNames = beanClassNames;
+		_beansXml = beansXml;
+		_services = new SimpleServiceRegistry();
+
+		if (loader != null) {
+			_services.add(ResourceLoader.class, loader);
+			_services.add(ProxyServices.class, loader);
+			_services.add(EEModuleDescriptor.class, new EEModuleDescriptorImpl(id, ModuleType.APPLICATION_CLIENT));
+		}
+	}
+
+	@Override
+	public Collection<String> getBeanClasses() {
+		return _beanClassNames;
+	}
+
+	@Override
+	public Collection<BeanDeploymentArchive> getBeanDeploymentArchives() {
+		return Collections.emptyList();
+	}
+
+	@Override
+	public BeansXml getBeansXml() {
+		return _beansXml;
+	}
+
+	@Override
+	public Collection<EjbDescriptor<?>> getEjbs() {
+		return Collections.emptyList();
+	}
+
+	@Override
+	public String getId() {
+		return _id;
+	}
+
+	@Override
+	public ServiceRegistry getServices() {
+		return _services;
+	}
+
+	private final Collection<String> _beanClassNames;
+	private final BeansXml _beansXml;
+	private final String _id;
+	private final ServiceRegistry _services;
+
+}
\ No newline at end of file
diff --git a/cdi-weld/src/main/java/org/apache/aries/cdi/weld/ContainerEnvironment.java b/cdi-weld/src/main/java/org/apache/aries/cdi/weld/ContainerEnvironment.java
new file mode 100644
index 0000000..458a625
--- /dev/null
+++ b/cdi-weld/src/main/java/org/apache/aries/cdi/weld/ContainerEnvironment.java
@@ -0,0 +1,43 @@
+/**
+ * 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.weld;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.jboss.weld.bootstrap.api.Environment;
+import org.jboss.weld.bootstrap.api.Service;
+
+public class ContainerEnvironment implements Environment {
+
+	public ContainerEnvironment() {
+		_requiredBeanDeploymentArchiveServices = new HashSet<Class<? extends Service>>();
+		_requiredDeploymentServices = new HashSet<Class<? extends Service>>();
+	}
+
+	@Override
+	public Set<Class<? extends Service>> getRequiredBeanDeploymentArchiveServices() {
+		return _requiredBeanDeploymentArchiveServices;
+	}
+
+	@Override
+	public Set<Class<? extends Service>> getRequiredDeploymentServices() {
+		return _requiredDeploymentServices;
+	}
+
+	private final Set<Class<? extends Service>> _requiredBeanDeploymentArchiveServices;
+	private final Set<Class<? extends Service>> _requiredDeploymentServices;
+
+}
\ No newline at end of file
diff --git a/cdi-weld/src/main/java/org/apache/aries/cdi/weld/ExtensionMetadata.java b/cdi-weld/src/main/java/org/apache/aries/cdi/weld/ExtensionMetadata.java
new file mode 100644
index 0000000..0d99465
--- /dev/null
+++ b/cdi-weld/src/main/java/org/apache/aries/cdi/weld/ExtensionMetadata.java
@@ -0,0 +1,41 @@
+/**
+ * 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.weld;
+
+import javax.enterprise.inject.spi.Extension;
+
+import org.jboss.weld.bootstrap.spi.Metadata;
+
+public class ExtensionMetadata implements Metadata<Extension> {
+
+	public ExtensionMetadata(Extension extension, String location) {
+		_extension = extension;
+		_location = location;
+	}
+
+	@Override
+	public Extension getValue() {
+		return _extension;
+	}
+
+	@Override
+	public String getLocation() {
+		return _location;
+	}
+
+	private final Extension _extension;
+	private final String _location;
+
+}
\ No newline at end of file
diff --git a/cdi-weld/src/main/java/org/apache/aries/cdi/weld/WeldSeContainerInitializer.java b/cdi-weld/src/main/java/org/apache/aries/cdi/weld/WeldSeContainerInitializer.java
new file mode 100644
index 0000000..1de5bff
--- /dev/null
+++ b/cdi-weld/src/main/java/org/apache/aries/cdi/weld/WeldSeContainerInitializer.java
@@ -0,0 +1,280 @@
+package org.apache.aries.cdi.weld;
+
+import static java.util.Collections.list;
+import static java.util.Objects.requireNonNull;
+import static org.apache.aries.cdi.spi.Keys.BEANS_XML_PROPERTY;
+import static org.apache.aries.cdi.spi.Keys.BUNDLECONTEXT_PROPERTY;
+
+import java.lang.annotation.Annotation;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Properties;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import javax.enterprise.inject.Instance;
+import javax.enterprise.inject.se.SeContainer;
+import javax.enterprise.inject.se.SeContainerInitializer;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.Extension;
+import javax.enterprise.util.TypeLiteral;
+
+import org.apache.aries.cdi.spi.loader.SpiLoader;
+import org.jboss.weld.bootstrap.WeldBootstrap;
+import org.jboss.weld.bootstrap.spi.BeanDeploymentArchive;
+import org.jboss.weld.bootstrap.spi.BeansXml;
+import org.jboss.weld.bootstrap.spi.Deployment;
+import org.jboss.weld.bootstrap.spi.Metadata;
+import org.jboss.weld.xml.BeansXmlParser;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleReference;
+
+public class WeldSeContainerInitializer extends SeContainerInitializer {
+
+	public WeldSeContainerInitializer(BundleContext bundleContext) {
+		weldBundleContext = bundleContext;
+	}
+
+	@Override
+	public SeContainerInitializer addBeanClasses(Class<?>... classes) {
+		beanClasses.addAll(Arrays.asList(classes));
+		return this;
+	}
+
+	@Override
+	public SeContainerInitializer addPackages(Class<?>... packageClasses) {
+		// TODO Auto-generated method stub
+		return this;
+	}
+
+	@Override
+	public SeContainerInitializer addPackages(boolean scanRecursively, Class<?>... packageClasses) {
+		// TODO Auto-generated method stub
+		return this;
+	}
+
+	@Override
+	public SeContainerInitializer addPackages(Package... packages) {
+		// TODO Auto-generated method stub
+		return this;
+	}
+
+	@Override
+	public SeContainerInitializer addPackages(boolean scanRecursively, Package... packages) {
+		// TODO Auto-generated method stub
+		return this;
+	}
+
+	@Override
+	public SeContainerInitializer addExtensions(Extension... extensions) {
+		this.extensions.addAll(Arrays.asList(extensions));
+		return this;
+	}
+
+	@Override
+	public SeContainerInitializer addExtensions(Class<? extends Extension>... extensions) {
+		this.extensionClasses.addAll(Arrays.asList(extensions));
+		return this;
+	}
+
+	@Override
+	public SeContainerInitializer enableInterceptors(Class<?>... interceptorClasses) {
+		// TODO Auto-generated method stub
+		return this;
+	}
+
+	@Override
+	public SeContainerInitializer enableDecorators(Class<?>... decoratorClasses) {
+		// TODO Auto-generated method stub
+		return this;
+	}
+
+	@Override
+	public SeContainerInitializer selectAlternatives(Class<?>... alternativeClasses) {
+		// TODO Auto-generated method stub
+		return this;
+	}
+
+	@Override
+	public SeContainerInitializer selectAlternativeStereotypes(
+		Class<? extends Annotation>... alternativeStereotypeClasses) {
+
+		// TODO Auto-generated method stub
+		return this;
+	}
+
+	@Override
+	public SeContainerInitializer addProperty(String key, Object value) {
+		properties.putIfAbsent(key, value);
+		return this;
+	}
+
+	@Override
+	public SeContainerInitializer setProperties(Map<String, Object> properties) {
+		properties.putAll(properties);
+		return this;
+	}
+
+	@Override
+	public SeContainerInitializer disableDiscovery() {
+		// TODO Auto-generated method stub
+		return this;
+	}
+
+	@Override
+	public SeContainerInitializer setClassLoader(ClassLoader classLoader) {
+		this.classLoader = (SpiLoader)classLoader;
+		return this;
+	}
+
+	@Override
+	@SuppressWarnings("unchecked")
+	public SeContainer initialize() {
+		Thread currentThread = Thread.currentThread();
+		ClassLoader current = currentThread.getContextClassLoader();
+		BundleResourcesLoader resourceLoader = new BundleResourcesLoader(requireNonNull(classLoader), weldBundleContext.getBundle());
+
+		try {
+			currentThread.setContextClassLoader(classLoader);
+			clientBundleContext = requireNonNull(BundleContext.class.cast(properties.get(BUNDLECONTEXT_PROPERTY)));
+
+			Optional.ofNullable(clientBundleContext.getBundle().getHeaders()).ifPresent(
+				headers -> list(headers.elements()).stream()
+					.filter(it -> it.startsWith("org.jboss.weld."))
+					.forEach(key -> properties.setProperty(key, headers.get(key))
+				)
+			);
+
+			// Add external extensions
+			List<Metadata<Extension>> metaExtensions = extensions.stream().map(
+				extension -> {
+					Bundle extensionBundle = BundleReference.class.cast(extension.getClass().getClassLoader()).getBundle();
+					classLoader.getBundles().add(extensionBundle);
+					return new ExtensionMetadata(extension, extensionBundle.toString());
+				}
+			).collect(Collectors.toList());
+
+			BeansXml beansXml = BeansXml.EMPTY_BEANS_XML;
+
+			Collection<URL> beanDescriptorURLs = Collection.class.cast(properties.get(BEANS_XML_PROPERTY));
+
+			if (!beanDescriptorURLs.isEmpty()) {
+				BeansXmlParser beansXmlParser = new BeansXmlParser();
+				beansXml = beansXmlParser.parse(beanDescriptorURLs);
+			}
+
+			String id = clientBundleContext.getBundle().toString();
+
+			bootstrap = new WeldBootstrap();
+
+			beanDeploymentArchive = new ContainerDeploymentArchive(
+				resourceLoader,
+				id,
+				beanClasses.stream().map(Class::getName).collect(Collectors.toList()),
+				beansXml);
+
+			Deployment deployment = new ContainerDeployment(metaExtensions, beanDeploymentArchive);
+
+			bootstrap.startExtensions(metaExtensions);
+			bootstrap.startContainer(id, new ContainerEnvironment(), deployment);
+			bootstrap.startInitialization();
+			bootstrap.deployBeans();
+			bootstrap.validateBeans();
+			bootstrap.endInitialization();
+
+			return new WeldSeContainer();
+		}
+		finally {
+			currentThread.setContextClassLoader(current);
+		}
+	}
+
+	private volatile BeanDeploymentArchive beanDeploymentArchive;
+	private volatile WeldBootstrap bootstrap;
+	private volatile BundleContext clientBundleContext;
+	private volatile SpiLoader classLoader;
+	private final Set<Class<?>> beanClasses = new HashSet<>();
+	private final List<Extension> extensions = new ArrayList<>();
+	private final List<Class<? extends Extension>> extensionClasses = new ArrayList<>();
+	private final BundleContext weldBundleContext;
+	private final Properties properties = new Properties();
+
+	private class WeldSeContainer implements SeContainer {
+
+		private volatile boolean running = true;
+
+		@Override
+		public void close() {
+			running = false;
+			Thread currentThread = Thread.currentThread();
+			ClassLoader current = currentThread.getContextClassLoader();
+			try {
+				currentThread.setContextClassLoader(requireNonNull(classLoader));
+				bootstrap.shutdown();
+			}
+			finally {
+				currentThread.setContextClassLoader(current);
+			}
+		}
+
+		@Override
+		public Instance<Object> select(Annotation... qualifiers) {
+			return bootstrap.getManager(beanDeploymentArchive).createInstance().select(qualifiers);
+		}
+
+		@Override
+		public <U> Instance<U> select(Class<U> subtype, Annotation... qualifiers) {
+			return bootstrap.getManager(beanDeploymentArchive).createInstance().select(subtype, qualifiers);
+		}
+
+		@Override
+		public <U> Instance<U> select(TypeLiteral<U> subtype, Annotation... qualifiers) {
+			return bootstrap.getManager(beanDeploymentArchive).createInstance().select(subtype, qualifiers);
+		}
+
+		@Override
+		public boolean isUnsatisfied() {
+			return bootstrap.getManager(beanDeploymentArchive).createInstance().isUnsatisfied();
+		}
+
+		@Override
+		public boolean isAmbiguous() {
+			return bootstrap.getManager(beanDeploymentArchive).createInstance().isAmbiguous();
+		}
+
+		@Override
+		public void destroy(Object instance) {
+			bootstrap.getManager(beanDeploymentArchive).createInstance().destroy(instance);
+		}
+
+		@Override
+		public Iterator<Object> iterator() {
+			return bootstrap.getManager(beanDeploymentArchive).createInstance().iterator();
+		}
+
+		@Override
+		public boolean isRunning() {
+			return running;
+		}
+
+		@Override
+		public BeanManager getBeanManager() {
+			return bootstrap.getManager(beanDeploymentArchive);
+		}
+
+		@Override
+		public Object get() {
+			return bootstrap.getManager(beanDeploymentArchive).createInstance().get();
+		}
+
+	}
+
+}
diff --git a/cdi-weld/src/main/java/org/apache/aries/cdi/weld/WeldSeContainerInitializerFactory.java b/cdi-weld/src/main/java/org/apache/aries/cdi/weld/WeldSeContainerInitializerFactory.java
new file mode 100644
index 0000000..3ec972f
--- /dev/null
+++ b/cdi-weld/src/main/java/org/apache/aries/cdi/weld/WeldSeContainerInitializerFactory.java
@@ -0,0 +1,44 @@
+/**
+ * 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.weld;
+
+import javax.enterprise.inject.se.SeContainerInitializer;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.PrototypeServiceFactory;
+import org.osgi.framework.ServiceRegistration;
+
+public class WeldSeContainerInitializerFactory implements PrototypeServiceFactory<SeContainerInitializer> {
+
+	public WeldSeContainerInitializerFactory(BundleContext bundleContext) {
+		this.bundleContext = bundleContext;
+	}
+
+	@Override
+	public SeContainerInitializer getService(
+		Bundle bundle, ServiceRegistration<SeContainerInitializer> registration) {
+
+		return new WeldSeContainerInitializer(bundleContext);
+	}
+
+	@Override
+	public void ungetService(
+		Bundle bundle, ServiceRegistration<SeContainerInitializer> registration, SeContainerInitializer service) {
+	}
+
+	private final BundleContext bundleContext;
+
+}
diff --git a/cdi-weld/src/main/java/org/apache/aries/cdi/weld/package-info.java b/cdi-weld/src/main/java/org/apache/aries/cdi/weld/package-info.java
new file mode 100644
index 0000000..0e4cdfe
--- /dev/null
+++ b/cdi-weld/src/main/java/org/apache/aries/cdi/weld/package-info.java
@@ -0,0 +1,23 @@
+/**
+ * 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.
+ */
+
+@org.osgi.annotation.bundle.Capability(
+	attribute = {
+		"objectClass:List<String>=javax.enterprise.inject.se.SeContainerInitializer",
+		"aries.cdi.spi=Weld"
+	},
+	namespace = org.osgi.namespace.service.ServiceNamespace.SERVICE_NAMESPACE
+)
+@org.osgi.service.cdi.annotations.RequireCDIImplementation
+package org.apache.aries.cdi.weld;
diff --git a/pom.xml b/pom.xml
index a5958da..61b5854 100644
--- a/pom.xml
+++ b/pom.xml
@@ -64,6 +64,7 @@
 		<module>cdi-extension-http</module>
 		<module>cdi-extension-jndi</module>
 		<module>cdi-owb</module>
+		<module>cdi-weld</module>
 		<module>cdi-bom</module>
 		<module>cdi-itests</module>
 		<module>cdi-executable</module>
@@ -114,45 +115,6 @@
 				<version>1.1</version>
 			</dependency>
 			<dependency>
-				<groupId>org.jboss.weld</groupId>
-				<artifactId>weld-osgi-bundle</artifactId>
-				<version>${weld.version}</version>
-				<exclusions>
-					<exclusion>
-						<groupId>javax.annotation</groupId>
-						<artifactId>javax.annotation-api</artifactId>
-					</exclusion>
-					<exclusion>
-						<groupId>javax.enterprise</groupId>
-						<artifactId>cdi-api</artifactId>
-					</exclusion>
-					<exclusion>
-						<groupId>javax.inject</groupId>
-						<artifactId>javax.inject</artifactId>
-					</exclusion>
-					<exclusion>
-						<groupId>org.jboss.spec.javax.annotation</groupId>
-						<artifactId>jboss-annotations-api_1.3_spec</artifactId>
-					</exclusion>
-					<exclusion>
-						<groupId>org.jboss.spec.javax.ejb</groupId>
-						<artifactId>jboss-ejb-api_3.2_spec</artifactId>
-					</exclusion>
-					<exclusion>
-						<groupId>org.jboss.spec.javax.el</groupId>
-						<artifactId>jboss-el-api_3.0_spec</artifactId>
-					</exclusion>
-					<exclusion>
-						<groupId>org.jboss.spec.javax.interceptor</groupId>
-						<artifactId>jboss-interceptors-api_1.2_spec</artifactId>
-					</exclusion>
-					<exclusion>
-						<groupId>org.jboss.spec.javax.transaction</groupId>
-						<artifactId>jboss-transaction-api_1.2_spec</artifactId>
-					</exclusion>
-				</exclusions>
-			</dependency>
-			<dependency>
 				<groupId>org.osgi</groupId>
 				<artifactId>org.osgi.namespace.extender</artifactId>
 				<version>1.0.1</version>


[aries-cdi] 23/27: don't set a global resolve execution

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rotty3000 pushed a commit to branch rotty3000/cdi-spi
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit e0b0c09f9e4c4b9a7f5381260aa3eaf38be7caf9
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Sun Nov 24 15:56:46 2019 -0500

    don't set a global resolve execution
    
    Signed-off-by: Raymond Augé <ro...@apache.org>
---
 pom.xml | 9 ---------
 1 file changed, 9 deletions(-)

diff --git a/pom.xml b/pom.xml
index e78d8c0..1ccf7f5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -306,15 +306,6 @@
 						<failOnChanges>false</failOnChanges>
 						<reportOptional>false</reportOptional>
 					</configuration>
-					<executions>
-						<execution>
-							<id>resolve</id>
-							<goals>
-								<goal>resolve</goal>
-							</goals>
-							<phase>package</phase>
-						</execution>
-					</executions>
 				</plugin>
 				<plugin>
 					<groupId>biz.aQute.bnd</groupId>


[aries-cdi] 14/27: these extensions are for weld for the moment

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rotty3000 pushed a commit to branch rotty3000/cdi-spi
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit bbad287153ea3033e728d4548c2cd79a4c2b4d87
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Fri Nov 22 16:48:27 2019 -0500

    these extensions are for weld for the moment
    
    Signed-off-by: Raymond Augé <ro...@apache.org>
---
 cdi-extension-el-jsp/pom.xml                       |   1 +
 cdi-extension-http/pom.xml                         |   1 +
 .../aries/cdi/extension/http/HttpExtension.java    | 137 ++++++---------------
 3 files changed, 43 insertions(+), 96 deletions(-)

diff --git a/cdi-extension-el-jsp/pom.xml b/cdi-extension-el-jsp/pom.xml
index 16acbd3..5b5c252 100644
--- a/cdi-extension-el-jsp/pom.xml
+++ b/cdi-extension-el-jsp/pom.xml
@@ -91,6 +91,7 @@
 		<dependency>
 			<groupId>org.jboss.weld</groupId>
 			<artifactId>weld-osgi-bundle</artifactId>
+			<version>${weld.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>org.osgi</groupId>
diff --git a/cdi-extension-http/pom.xml b/cdi-extension-http/pom.xml
index b1a6a1c..51d3da0 100644
--- a/cdi-extension-http/pom.xml
+++ b/cdi-extension-http/pom.xml
@@ -81,6 +81,7 @@
 		<dependency>
 			<groupId>org.jboss.weld</groupId>
 			<artifactId>weld-osgi-bundle</artifactId>
+			<version>${weld.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>org.osgi</groupId>
diff --git a/cdi-extension-http/src/main/java/org/apache/aries/cdi/extension/http/HttpExtension.java b/cdi-extension-http/src/main/java/org/apache/aries/cdi/extension/http/HttpExtension.java
index 7aed15f..5b0c55d 100644
--- a/cdi-extension-http/src/main/java/org/apache/aries/cdi/extension/http/HttpExtension.java
+++ b/cdi-extension-http/src/main/java/org/apache/aries/cdi/extension/http/HttpExtension.java
@@ -24,7 +24,6 @@ import static org.osgi.service.http.whiteboard.HttpWhiteboardConstants.HTTP_WHIT
 import static org.osgi.service.http.whiteboard.HttpWhiteboardConstants.HTTP_WHITEBOARD_LISTENER;
 
 import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Dictionary;
@@ -39,9 +38,6 @@ import javax.annotation.Priority;
 import javax.enterprise.event.Observes;
 import javax.enterprise.event.ObservesAsync;
 import javax.enterprise.inject.spi.AfterDeploymentValidation;
-import javax.enterprise.inject.spi.AnnotatedConstructor;
-import javax.enterprise.inject.spi.AnnotatedField;
-import javax.enterprise.inject.spi.AnnotatedMethod;
 import javax.enterprise.inject.spi.AnnotatedType;
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.BeanManager;
@@ -96,42 +92,44 @@ public class HttpExtension implements Extension {
 
 		WebFilter webFilter = annotatedType.getAnnotation(WebFilter.class);
 
-		final Set<Annotation> annotations = new HashSet<>(annotatedType.getAnnotations());
+		final Set<Annotation> annotationsToAdd = new HashSet<>();
 
 		if (!annotatedType.isAnnotationPresent(Service.class)) {
-			annotations.add(Service.Literal.of(new Class[] {Filter.class}));
+			annotationsToAdd.add(Service.Literal.of(new Class[] {Filter.class}));
 		}
 
 		if(!annotatedType.isAnnotationPresent(HttpWhiteboardContextSelect.class)) {
-			annotations.add(HttpWhiteboardContextSelect.Literal.of(getSelectedContext()));
+			annotationsToAdd.add(HttpWhiteboardContextSelect.Literal.of(getSelectedContext()));
 		}
 
 		if (!webFilter.description().isEmpty()) {
-			annotations.add(ServiceDescription.Literal.of(webFilter.description()));
+			annotationsToAdd.add(ServiceDescription.Literal.of(webFilter.description()));
 		}
 
 		if (!webFilter.filterName().isEmpty()) {
-			annotations.add(HttpWhiteboardFilterName.Literal.of(webFilter.filterName()));
+			annotationsToAdd.add(HttpWhiteboardFilterName.Literal.of(webFilter.filterName()));
 		}
 
 		if (webFilter.servletNames().length > 0) {
-			annotations.add(HttpWhiteboardFilterServlet.Literal.of(webFilter.servletNames()));
+			annotationsToAdd.add(HttpWhiteboardFilterServlet.Literal.of(webFilter.servletNames()));
 		}
 
 		if (webFilter.value().length > 0) {
-			annotations.add(HttpWhiteboardFilterPattern.Literal.of(webFilter.value()));
+			annotationsToAdd.add(HttpWhiteboardFilterPattern.Literal.of(webFilter.value()));
 		}
 		else if (webFilter.urlPatterns().length > 0) {
-			annotations.add(HttpWhiteboardFilterPattern.Literal.of(webFilter.urlPatterns()));
+			annotationsToAdd.add(HttpWhiteboardFilterPattern.Literal.of(webFilter.urlPatterns()));
 		}
 
 		if (webFilter.dispatcherTypes().length > 0) {
-			annotations.add(HttpWhiteboardFilterDispatcher.Literal.of(webFilter.dispatcherTypes()));
+			annotationsToAdd.add(HttpWhiteboardFilterDispatcher.Literal.of(webFilter.dispatcherTypes()));
 		}
 
-		annotations.add(HttpWhiteboardFilterAsyncSupported.Literal.of(webFilter.asyncSupported()));
+		annotationsToAdd.add(HttpWhiteboardFilterAsyncSupported.Literal.of(webFilter.asyncSupported()));
 
-		pat.setAnnotatedType(new WebAnnotated<>(annotatedType, annotations));
+		if (!annotationsToAdd.isEmpty()) {
+			annotationsToAdd.forEach(pat.configureAnnotatedType()::add);
+		}
 	}
 
 	<X> void processWebListener(@Observes @WithAnnotations(WebListener.class) ProcessAnnotatedType<X> pat) {
@@ -139,7 +137,7 @@ public class HttpExtension implements Extension {
 
 		WebListener webListener = annotatedType.getAnnotation(WebListener.class);
 
-		final Set<Annotation> annotations = new HashSet<>(annotatedType.getAnnotations());
+		final Set<Annotation> annotationsToAdd = new HashSet<>();
 
 		if (!annotatedType.isAnnotationPresent(Service.class)) {
 			List<Class<?>> listenerTypes = new ArrayList<>();
@@ -168,20 +166,22 @@ public class HttpExtension implements Extension {
 				listenerTypes.add(javax.servlet.http.HttpSessionIdListener.class);
 			}
 
-			annotations.add(Service.Literal.of(listenerTypes.toArray(new Class<?>[0])));
+			annotationsToAdd.add(Service.Literal.of(listenerTypes.toArray(new Class<?>[0])));
 		}
 
 		if(!annotatedType.isAnnotationPresent(HttpWhiteboardContextSelect.class)) {
-			annotations.add(HttpWhiteboardContextSelect.Literal.of(getSelectedContext()));
+			annotationsToAdd.add(HttpWhiteboardContextSelect.Literal.of(getSelectedContext()));
 		}
 
-		annotations.add(HttpWhiteboardListener.Literal.INSTANCE);
+		annotationsToAdd.add(HttpWhiteboardListener.Literal.INSTANCE);
 
 		if (!webListener.value().isEmpty()) {
-			annotations.add(ServiceDescription.Literal.of(webListener.value()));
+			annotationsToAdd.add(ServiceDescription.Literal.of(webListener.value()));
 		}
 
-		pat.setAnnotatedType(new WebAnnotated<>(annotatedType, annotations));
+		if (!annotationsToAdd.isEmpty()) {
+			annotationsToAdd.forEach(pat.configureAnnotatedType()::add);
+		}
 	}
 
 	<X> void processWebServlet(@Observes @WithAnnotations(WebServlet.class) ProcessAnnotatedType<X> pat) {
@@ -189,46 +189,48 @@ public class HttpExtension implements Extension {
 
 		WebServlet webServlet = annotatedType.getAnnotation(WebServlet.class);
 
-		final Set<Annotation> annotations = new HashSet<>(annotatedType.getAnnotations());
+		final Set<Annotation> annotationsToAdd = new HashSet<>();
 
 		if (!annotatedType.isAnnotationPresent(Service.class)) {
-			annotations.add(Service.Literal.of(new Class[] {Servlet.class}));
+			annotationsToAdd.add(Service.Literal.of(new Class[] {Servlet.class}));
 		}
 
 		if(!annotatedType.isAnnotationPresent(HttpWhiteboardContextSelect.class)) {
-			annotations.add(HttpWhiteboardContextSelect.Literal.of(getSelectedContext()));
+			annotationsToAdd.add(HttpWhiteboardContextSelect.Literal.of(getSelectedContext()));
 		}
 
 		if (!webServlet.name().isEmpty()) {
-			annotations.add(HttpWhiteboardServletName.Literal.of(webServlet.name()));
+			annotationsToAdd.add(HttpWhiteboardServletName.Literal.of(webServlet.name()));
 		}
 
 		if (webServlet.value().length > 0) {
-			annotations.add(HttpWhiteboardServletPattern.Literal.of(webServlet.value()));
+			annotationsToAdd.add(HttpWhiteboardServletPattern.Literal.of(webServlet.value()));
 		}
 		else if (webServlet.urlPatterns().length > 0) {
-			annotations.add(HttpWhiteboardServletPattern.Literal.of(webServlet.urlPatterns()));
+			annotationsToAdd.add(HttpWhiteboardServletPattern.Literal.of(webServlet.urlPatterns()));
 		}
 
-		annotations.add(ServiceRanking.Literal.of(webServlet.loadOnStartup()));
+		annotationsToAdd.add(ServiceRanking.Literal.of(webServlet.loadOnStartup()));
 
 		// TODO Howto: INIT PARAMS ???
 
-		annotations.add(HttpWhiteboardServletAsyncSupported.Literal.of(webServlet.asyncSupported()));
+		annotationsToAdd.add(HttpWhiteboardServletAsyncSupported.Literal.of(webServlet.asyncSupported()));
 
 		if (!webServlet.description().isEmpty()) {
-			annotations.add(ServiceDescription.Literal.of(webServlet.description()));
+			annotationsToAdd.add(ServiceDescription.Literal.of(webServlet.description()));
 		}
 
 		MultipartConfig multipartConfig = annotatedType.getAnnotation(MultipartConfig.class);
 
 		if (multipartConfig != null) {
-			annotations.add(HttpWhiteboardServletMultipart.Literal.of(true, multipartConfig.fileSizeThreshold(), multipartConfig.location(), multipartConfig.maxFileSize(), multipartConfig.maxRequestSize()));
+			annotationsToAdd.add(HttpWhiteboardServletMultipart.Literal.of(true, multipartConfig.fileSizeThreshold(), multipartConfig.location(), multipartConfig.maxFileSize(), multipartConfig.maxRequestSize()));
 		}
 
 		// TODO HowTo: ServletSecurity ???
 
-		pat.setAnnotatedType(new WebAnnotated<>(annotatedType, annotations));
+		if (!annotationsToAdd.isEmpty()) {
+			annotationsToAdd.forEach(pat.configureAnnotatedType()::add);
+		}
 	}
 
 	void afterDeploymentValidation(
@@ -241,7 +243,7 @@ public class HttpExtension implements Extension {
 	void ready(@ObservesAsync Ready ready, BeanManager beanManager) {
 		Dictionary<String, Object> properties = new Hashtable<>();
 
-		properties.put(SERVICE_DESCRIPTION, "Aries CDI - HTTP Portable Extension");
+		properties.put(SERVICE_DESCRIPTION, "Aries CDI - HTTP Portable Extension for Weld");
 		properties.put(SERVICE_VENDOR, "Apache Software Foundation");
 		properties.put(HTTP_WHITEBOARD_CONTEXT_SELECT, getSelectedContext());
 		properties.put(HTTP_WHITEBOARD_LISTENER, Boolean.TRUE.toString());
@@ -259,7 +261,12 @@ public class HttpExtension implements Extension {
 
 	void beforeShutdown(@Observes BeforeShutdown bs) {
 		if (_listenerRegistration != null && !destroyed.get()) {
-			_listenerRegistration.unregister();
+			try {
+				_listenerRegistration.unregister();
+			}
+			catch (IllegalStateException ise) {
+				// the service was already unregistered.
+			}
 		}
 	}
 
@@ -371,66 +378,4 @@ public class HttpExtension implements Extension {
 
 	}
 
-	private class WebAnnotated<X> implements AnnotatedType<X> {
-
-		private final AnnotatedType<X> annotatedType;
-		private final Set<Annotation> annotations;
-
-		public WebAnnotated(AnnotatedType<X> annotatedType, Set<Annotation> annotations) {
-			this.annotatedType = annotatedType;
-			this.annotations = annotations;
-		}
-
-		@Override
-		public Type getBaseType() {
-			return annotatedType.getBaseType();
-		}
-
-		@Override
-		public Set<Type> getTypeClosure() {
-			return annotatedType.getTypeClosure();
-		}
-
-		@Override
-		public <T extends Annotation> T getAnnotation(Class<T> annotationType) {
-			return annotations.stream().filter(
-				ann -> annotationType.isAssignableFrom(ann.annotationType())
-			).map(
-				ann -> annotationType.cast(ann)
-			).findFirst().orElse(null);
-		}
-
-		@Override
-		public Set<Annotation> getAnnotations() {
-			return annotations;
-		}
-
-		@Override
-		public boolean isAnnotationPresent(Class<? extends Annotation> annotationType) {
-			return annotations.stream().anyMatch(
-				ann -> annotationType.isAssignableFrom(ann.annotationType())
-			);
-		}
-
-		@Override
-		public Class<X> getJavaClass() {
-			return annotatedType.getJavaClass();
-		}
-
-		@Override
-		public Set<AnnotatedConstructor<X>> getConstructors() {
-			return annotatedType.getConstructors();
-		}
-
-		@Override
-		public Set<AnnotatedMethod<? super X>> getMethods() {
-			return annotatedType.getMethods();
-		}
-
-		@Override
-		public Set<AnnotatedField<? super X>> getFields() {
-			return annotatedType.getFields();
-		}
-	}
-
 }


[aries-cdi] 04/27: ignores

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rotty3000 pushed a commit to branch rotty3000/cdi-spi
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit e230e86419bc8ea3fe7e32e7d79e9cad1529a96e
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Fri Nov 22 11:23:48 2019 -0500

    ignores
    
    Signed-off-by: Raymond Augé <ro...@apache.org>
---
 .gitignore | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/.gitignore b/.gitignore
index beef00d..dddad45 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,5 @@
 .project
 .settings
 target
+*.iml
+.idea


[aries-cdi] 19/27: better SPI

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rotty3000 pushed a commit to branch rotty3000/cdi-spi
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit f1bbce5be3ea3b18169aae56971cca67318e717b
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Sat Nov 23 15:41:39 2019 -0500

    better SPI
    
    Signed-off-by: Raymond Augé <ro...@apache.org>
---
 README.md                                          |  19 +-
 .../aries/cdi/container/internal/Activator.java    |  45 ++--
 .../internal/container/ContainerBootstrap.java     | 104 +++++---
 .../internal/container/RuntimeExtension.java       |   1 -
 .../cdi/container/internal/util/Annotates.java     |   2 +-
 .../aries/cdi/container/internal/util/Maps.java    |  47 ++--
 .../apache/aries/cdi/container/package-info.java   |   2 +-
 .../internal/phase/ContainerBootstrapTest.java     |   5 +-
 .../java/org/apache/aries/cdi/owb/Activator.java   |  13 +-
 .../aries/cdi/owb/OSGiDefiningClassService.java    |   1 +
 ...alizer.java => OWBCDIContainerInitializer.java} | 127 +++-------
 ...java => OWBCDIContainerInitializerFactory.java} |  18 +-
 .../cdi/owb/OsgiApplicationBoundaryService.java    |  44 ++--
 .../org/apache/aries/cdi/owb/package-info.java     |   5 +-
 .../aries/cdi/spi/CDIContainerInitializer.java     |  98 ++++++++
 .../main/java/org/apache/aries/cdi/spi/Keys.java   |  41 ---
 .../java/org/apache/aries/cdi/weld/Activator.java  |  14 +-
 .../cdi/weld/WeldCDIContainerInitializer.java      | 149 +++++++++++
 ...ava => WeldCDIContainerInitializerFactory.java} |  19 +-
 .../aries/cdi/weld/WeldSeContainerInitializer.java | 280 ---------------------
 .../org/apache/aries/cdi/weld/package-info.java    |   5 +-
 21 files changed, 458 insertions(+), 581 deletions(-)

diff --git a/README.md b/README.md
index 0f607ab..892535d 100644
--- a/README.md
+++ b/README.md
@@ -188,24 +188,7 @@ The requirements to satisfy this SPI are quite simple:
 
 - Aries CDI Extender requires:
 
-  -  a **prototype scoped** service that implements `javax.enterprise.inject.se.SeContainerInitializer`
-
-  - this service must have a service property `aries.cdi.spi`  whose value is not important but the recommendation is a human readable name of the implementation
-
-  - Aries CDI will pass two values via the properties methods of `javax.enterprise.inject.se.SeContainerInitializer` as defined by `org.apache.aries.cdi.spi.Keys`
-
-  - the  `SeContainerInitializer` will be called like this:
-
-    ```java
-    			_seContainer = _seContainerInitializerInstance
-    				.setClassLoader((org.apache.aries.cdi.spi.loader.SpiLoader)spiLoader)
-    				.addBeanClasses(classes)
-    				.setProperties(properties)
-    				.addProperty(BEANS_XML_PROPERTY, containerState.beansModel().getBeansXml())
-    				.addProperty(BUNDLECONTEXT_PROPERTY, bundle().getBundleContext())
-    				.addExtensions(extensions)
-    				.initialize();
-    ```
+  -  a **prototype scoped** service that implements `org.apache.aries.cdi.spi.CDIContainerInitializer`
 
   - The behaviour of this container should be to start the `@ApplicationScoped` context immediately. This allows for services from the container component to be published right away.
 
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/Activator.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/Activator.java
index ca885f1..2f78330 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/Activator.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/Activator.java
@@ -14,7 +14,6 @@
 
 package org.apache.aries.cdi.container.internal;
 
-import static org.apache.aries.cdi.container.internal.util.Filters.asFilter;
 import static org.osgi.namespace.extender.ExtenderNamespace.EXTENDER_NAMESPACE;
 import static org.osgi.service.cdi.CDIConstants.CDI_CAPABILITY_NAME;
 import static org.osgi.service.cdi.CDIConstants.REQUIREMENT_BEANS_ATTRIBUTE;
@@ -30,8 +29,6 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
 
-import javax.enterprise.inject.se.SeContainerInitializer;
-
 import org.apache.aries.cdi.container.internal.command.CDICommand;
 import org.apache.aries.cdi.container.internal.container.CDIBundle;
 import org.apache.aries.cdi.container.internal.container.ConfigurationListener;
@@ -45,13 +42,13 @@ import org.apache.aries.cdi.container.internal.model.FactoryComponent;
 import org.apache.aries.cdi.container.internal.model.SingleActivator;
 import org.apache.aries.cdi.container.internal.model.SingleComponent;
 import org.apache.aries.cdi.container.internal.util.Logs;
+import org.apache.aries.cdi.spi.CDIContainerInitializer;
 import org.apache.felix.utils.extender.AbstractExtender;
 import org.apache.felix.utils.extender.Extension;
 import org.osgi.annotation.bundle.Header;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
-import org.osgi.framework.FrameworkUtil;
 import org.osgi.framework.ServiceFactory;
 import org.osgi.framework.ServiceObjects;
 import org.osgi.framework.ServiceReference;
@@ -75,36 +72,40 @@ import org.osgi.util.tracker.ServiceTrackerCustomizer;
 @RequireConfigurationAdmin
 public class Activator extends AbstractExtender {
 
-	private final CCR _ccr;
-	private final ExecutorService _executorService;
-	private final Logger _log;
-	private final Logs _logs;
-	private final PromiseFactory _promiseFactory;
-	private final ServiceTracker<SeContainerInitializer, ServiceObjects<SeContainerInitializer>> _containerTracker;
+	private volatile CCR _ccr;
+	private volatile ExecutorService _executorService;
+	private volatile Logger _log;
+	private volatile Logs _logs;
+	private volatile PromiseFactory _promiseFactory;
+	private volatile ServiceTracker<CDIContainerInitializer, ServiceObjects<CDIContainerInitializer>> _containerTracker;
 
 	public Activator() {
-		final BundleContext bundleContext = FrameworkUtil.getBundle(getClass()).getBundleContext();
+		setSynchronous(true);
+	}
+
+	@Override
+	public void start(BundleContext bundleContext) throws Exception {
 		_logs = new Logs.Builder(bundleContext).build();
 		_log = _logs.getLogger(Activator.class);
 		_containerTracker = new ServiceTracker<>(
-			bundleContext,
-			asFilter("(&(objectClass=%s)(aries.cdi.spi=*))", SeContainerInitializer.class.getName()),
-			new ServiceTrackerCustomizer<SeContainerInitializer, ServiceObjects<SeContainerInitializer>>() {
+			bundleContext, CDIContainerInitializer.class,
+			new ServiceTrackerCustomizer<CDIContainerInitializer, ServiceObjects<CDIContainerInitializer>>() {
 
 				@Override
-				public ServiceObjects<SeContainerInitializer> addingService(
-						ServiceReference<SeContainerInitializer> reference) {
+				public ServiceObjects<CDIContainerInitializer> addingService(
+					ServiceReference<CDIContainerInitializer> reference) {
+
 					return bundleContext.getServiceObjects(reference);
 				}
 
 				@Override
-				public void modifiedService(ServiceReference<SeContainerInitializer> reference,
-						ServiceObjects<SeContainerInitializer> service) {
+				public void modifiedService(ServiceReference<CDIContainerInitializer> reference,
+					ServiceObjects<CDIContainerInitializer> service) {
 				}
 
 				@Override
-				public void removedService(ServiceReference<SeContainerInitializer> reference,
-						ServiceObjects<SeContainerInitializer> service) {
+				public void removedService(ServiceReference<CDIContainerInitializer> reference,
+					ServiceObjects<CDIContainerInitializer> service) {
 				}
 			}
 		);
@@ -117,11 +118,7 @@ public class Activator extends AbstractExtender {
 		_promiseFactory = new PromiseFactory(_executorService);
 		_ccr = new CCR(_promiseFactory, _logs);
 		_command = new CDICommand(_ccr);
-		setSynchronous(true);
-	}
 
-	@Override
-	public void start(BundleContext bundleContext) throws Exception {
 		if (_log.isDebugEnabled()) {
 			_log.debug("CCR starting {}", bundleContext.getBundle());
 		}
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerBootstrap.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerBootstrap.java
index 5b63569..677ea78 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerBootstrap.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerBootstrap.java
@@ -14,15 +14,12 @@
 
 package org.apache.aries.cdi.container.internal.container;
 
-import static org.apache.aries.cdi.spi.Keys.BEANS_XML_PROPERTY;
-import static org.apache.aries.cdi.spi.Keys.BUNDLECONTEXT_PROPERTY;
+import static java.util.Objects.requireNonNull;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.net.URL;
 import java.util.ServiceLoader;
+import java.util.concurrent.atomic.AtomicInteger;
 
-import javax.enterprise.inject.se.SeContainer;
-import javax.enterprise.inject.se.SeContainerInitializer;
 import javax.enterprise.inject.spi.Extension;
 
 import org.apache.aries.cdi.container.internal.container.Op.Mode;
@@ -32,8 +29,13 @@ import org.apache.aries.cdi.container.internal.model.ExtendedExtensionDTO;
 import org.apache.aries.cdi.container.internal.model.FactoryComponent;
 import org.apache.aries.cdi.container.internal.model.OSGiBean;
 import org.apache.aries.cdi.container.internal.model.SingleComponent;
+import org.apache.aries.cdi.container.internal.util.Maps;
 import org.apache.aries.cdi.container.internal.util.Syncro;
+import org.apache.aries.cdi.spi.CDIContainerInitializer;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceObjects;
+import org.osgi.service.cdi.runtime.dto.ExtensionDTO;
 import org.osgi.service.log.Logger;
 import org.osgi.util.tracker.ServiceTracker;
 
@@ -41,7 +43,7 @@ public class ContainerBootstrap extends Phase {
 
 	public ContainerBootstrap(
 		ContainerState containerState,
-		ServiceTracker<SeContainerInitializer, ServiceObjects<SeContainerInitializer>> containerTracker,
+		ServiceTracker<CDIContainerInitializer, ServiceObjects<CDIContainerInitializer>> containerTracker,
 		ConfigurationListener.Builder configurationBuilder,
 		SingleComponent.Builder singleBuilder,
 		FactoryComponent.Builder factoryBuilder) {
@@ -54,23 +56,25 @@ public class ContainerBootstrap extends Phase {
 		_factoryBuilder = factoryBuilder;
 		_log = containerState.containerLogs().getLogger(getClass());
 
-		_serviceObjects = _containerTracker.getService();
-		_seContainerInitializerInstance = _serviceObjects.getService();
+		_serviceObjects = requireNonNull(
+			_containerTracker.getService(),
+			"A prototype scope org.apache.aries.cdi.spi.CDIContainerInitializer service must be available.");
 	}
 
 	@Override
 	public boolean close() {
 		try (Syncro syncro = _lock.open()) {
-			if (_seContainer != null) {
+			if (_containerInstance != null) {
 				_log.debug(l -> l.debug("CCR container shutdown for {}", bundle()));
-				_seContainer.close();
+				_containerInstance.close();
+				_containerInstance = null;
 				try {
-					_serviceObjects.ungetService(_seContainerInitializerInstance);
+					_serviceObjects.ungetService(_initializer);
+					_initializer = null;
 				}
 				catch (Throwable t) {
 					_log.trace(l -> l.trace("CCR Failure in returning initializer instance on {}", bundle(), t));
 				}
-				_seContainer = null;
 			}
 
 			return true;
@@ -95,7 +99,7 @@ public class ContainerBootstrap extends Phase {
 				return false;
 			}
 
-			if (_seContainer != null) {
+			if (_containerInstance != null) {
 				return true;
 			}
 
@@ -105,14 +109,20 @@ public class ContainerBootstrap extends Phase {
 
 			_log.debug(log -> log.debug("CCR container startup for {}", bundle()));
 
-			_seContainer = _seContainerInitializerInstance
-				// always use a new class loader
-				.setClassLoader(new BundleClassLoader(containerState.bundle(), containerState.extenderBundle()))
+			// always use a new class loader
+			BundleClassLoader loader = new BundleClassLoader(containerState.bundle(), containerState.extenderBundle());
+
+			_initializer = _serviceObjects.getService();
+
+			processExtensions(loader, _initializer);
+
+			containerState.containerComponentTemplateDTO().properties.forEach(_initializer::addProperty);
+
+			_containerInstance = _initializer
 				.addBeanClasses(containerState.beansModel().getOSGiBeans().stream().map(OSGiBean::getBeanClass).toArray(Class<?>[]::new))
-				.setProperties(containerState.containerComponentTemplateDTO().properties)
-				.addProperty(BEANS_XML_PROPERTY, containerState.beansModel().getBeansXml())
-				.addProperty(BUNDLECONTEXT_PROPERTY, bundle().getBundleContext())
-				.addExtensions(getExtensions().toArray(new Extension[0]))
+				.addBeanXmls(containerState.beansModel().getBeansXml().toArray(new URL[0]))
+				.setBundleContext(bundle().getBundleContext())
+				.setClassLoader(loader)
 				.initialize();
 
 			return true;
@@ -124,33 +134,53 @@ public class ContainerBootstrap extends Phase {
 		return Op.of(Mode.OPEN, Type.CONTAINER_BOOTSTRAP, containerState.id());
 	}
 
-	protected List<Extension> getExtensions() {
-		List<Extension> extensions = new ArrayList<>();
+	protected void processExtensions(BundleClassLoader loader, CDIContainerInitializer initializer) {
+		AtomicInteger counter = new AtomicInteger();
 
 		// Add the internal extensions
-		extensions.add(new BundleContextExtension(containerState.bundleContext()));
-		extensions.add(new RuntimeExtension(containerState, _configurationBuilder, _singleBuilder, _factoryBuilder));
-		extensions.add(new LoggerExtension(containerState));
+		initializer.addExtension(
+			new BundleContextExtension(containerState.bundleContext()),
+			Maps.of(Constants.SERVICE_ID, counter.decrementAndGet(),
+					Constants.SERVICE_DESCRIPTION, "Aries CDI BundleContextExtension"));
+		initializer.addExtension(
+			new RuntimeExtension(containerState, _configurationBuilder, _singleBuilder, _factoryBuilder),
+			Maps.of(Constants.SERVICE_ID, counter.decrementAndGet(),
+					Constants.SERVICE_DESCRIPTION, "Aries CDI RuntimeExtension"));
+		initializer.addExtension(
+			new LoggerExtension(containerState),
+			Maps.of(Constants.SERVICE_ID, counter.decrementAndGet(),
+					Constants.SERVICE_DESCRIPTION, "Aries CDI LoggerExtension"));
 
 		// Add extensions found from the bundle's class loader, such as those in the Bundle-ClassPath
-		ServiceLoader.load(Extension.class, containerState.classLoader()).forEach(extensions::add);
+		ServiceLoader.load(Extension.class, containerState.classLoader()).forEach(extension ->
+			initializer.addExtension(
+				extension,
+				Maps.of(Constants.SERVICE_ID, counter.decrementAndGet(),
+						Constants.SERVICE_DESCRIPTION, "ClassLoader Extension from " + containerState.bundle()))
+		);
 
 		// Add external extensions
-		containerState.containerDTO().extensions.stream().map(
-			ExtendedExtensionDTO.class::cast
-		).map(
-			e -> e.extension.getService()
-		).forEach(extensions::add);
+		for (ExtensionDTO extensionDTO : containerState.containerDTO().extensions) {
+			ExtendedExtensionDTO extendedExtensionDTO = (ExtendedExtensionDTO)extensionDTO;
 
-		return extensions;
+			initializer.addExtension(
+				extendedExtensionDTO.extension.getService(),
+				Maps.of(extendedExtensionDTO.extension.getServiceReference().getProperties()));
+
+			Bundle extensionBundle = extendedExtensionDTO.extension.getServiceReference().getBundle();
+
+			if (!loader.getBundles().contains(extensionBundle)) {
+				loader.getBundles().add(extensionBundle);
+			}
+		}
 	}
 
-	private volatile SeContainer _seContainer;
-	private final ServiceTracker<SeContainerInitializer, ServiceObjects<SeContainerInitializer>> _containerTracker;
+	private volatile AutoCloseable _containerInstance;
+	private final ServiceTracker<CDIContainerInitializer, ServiceObjects<CDIContainerInitializer>> _containerTracker;
 	private final ConfigurationListener.Builder _configurationBuilder;
 	private final FactoryComponent.Builder _factoryBuilder;
-	private final SeContainerInitializer _seContainerInitializerInstance;
-	private final ServiceObjects<SeContainerInitializer> _serviceObjects;
+	private CDIContainerInitializer _initializer;
+	private final ServiceObjects<CDIContainerInitializer> _serviceObjects;
 	private final SingleComponent.Builder _singleBuilder;
 	private final Syncro _lock = new Syncro(true);
 	private final Logger _log;
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/RuntimeExtension.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/RuntimeExtension.java
index 02d44ab..e5927c2 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/RuntimeExtension.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/RuntimeExtension.java
@@ -460,7 +460,6 @@ public class RuntimeExtension implements Extension {
 		}
 	}
 
-	@SuppressWarnings({ "rawtypes", "unchecked" })
 	private void registerServiceHandleFailure(
 		ExtendedComponentInstanceDTO componentInstance,
 		ExtendedActivationTemplateDTO activationTemplate,
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Annotates.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Annotates.java
index e2b7035..93da73a 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Annotates.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Annotates.java
@@ -14,7 +14,7 @@
 
 package org.apache.aries.cdi.container.internal.util;
 
-import static org.apache.aries.cdi.container.internal.util.Reflection.*;
+import static org.apache.aries.cdi.container.internal.util.Reflection.getRawType;
 
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Executable;
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Maps.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Maps.java
index ca61323..5b457a0 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Maps.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Maps.java
@@ -14,19 +14,23 @@
 
 package org.apache.aries.cdi.container.internal.util;
 
+import static java.util.Collections.list;
+import static java.util.Objects.requireNonNull;
+
 import java.lang.annotation.Annotation;
+import java.util.AbstractMap;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Dictionary;
-import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Objects;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.osgi.service.cdi.annotations.BeanPropertyType;
 import org.osgi.util.converter.TypeReference;
@@ -51,13 +55,14 @@ public class Maps {
 		}
 	}
 
+	public static <T> Stream<Map.Entry<String, T>> streamOf(Dictionary<String, T> dictionary) {
+		return list(dictionary.keys()).stream().map(key -> new AbstractMap.SimpleEntry<>(key, dictionary.get(key)));
+	}
+
 	public static Map<String, Object> of(Dictionary<String, ?> dict) {
 		Map<String, Object> map = new HashMap<>();
 
-		for (Enumeration<String> enu = dict.keys(); enu.hasMoreElements();) {
-			String key = enu.nextElement();
-			map.put(key, dict.get(key));
-		}
+		streamOf(dict).forEach(e -> map.put(e.getKey(), e.getValue()));
 
 		return map;
 	}
@@ -65,11 +70,7 @@ public class Maps {
 	public static Dictionary<String, ?> dict(Map<String, Object> map) {
 		Dictionary<String, Object> dict = new Hashtable<>();
 
-		if (map != null) {
-			for (Entry<String, Object> entry : map.entrySet()) {
-				dict.put(entry.getKey(), entry.getValue());
-			}
-		}
+		requireNonNull(map).forEach(dict::put);
 
 		return dict;
 	}
@@ -100,15 +101,28 @@ public class Maps {
 	}
 
 	public static Map<String, Object> merge(Collection<Annotation> annotations) {
-		return annotations.stream().filter(
+		return merge(annotations.stream().filter(
 			ann -> Objects.nonNull(ann.annotationType().getAnnotation(BeanPropertyType.class))
 		).map(
 			ann -> Conversions.convert(ann).sourceAs(ann.annotationType()).to(new TypeReference<Map<String, Object>>() {})
-		).map(Map::entrySet).flatMap(Collection::stream).collect(
+		).map(Map::entrySet).flatMap(Collection::stream));
+	}
+
+	public static Map<String, Object> merge(List<Dictionary<String, Object>> dictionaries) {
+		return merge(dictionaries.stream().flatMap(Maps::streamOf));
+	}
+
+	@SafeVarargs
+	public static Map<String, Object> merge(Map<String, Object>... maps) {
+		return merge(Arrays.stream(maps).map(Map::entrySet).flatMap(Collection::stream));
+	}
+
+	public static Map<String, Object> merge(Stream<Map.Entry<String, Object>> mapEntries) {
+		return mapEntries.collect(
 			Collectors.toMap(
 				Map.Entry::getKey,
 				Map.Entry::getValue,
-				Maps::merge
+				Maps::mergeValues
 			)
 		);
 	}
@@ -122,10 +136,11 @@ public class Maps {
 		);
 	}
 
-	@SuppressWarnings({ "rawtypes", "unchecked" })
-	public static List<?> merge(Object a, Object b) {
+	@SuppressWarnings("unchecked")
+	public static List<?> mergeValues(Object a, Object b) {
 		List<?> aList = Conversions.convert(a).to(new TypeReference<List<?>>() {});
 		List<?> bList = Conversions.convert(b).to(new TypeReference<List<?>>() {});
+		@SuppressWarnings({ "rawtypes" })
 		List checkedList = Collections.checkedList(new ArrayList(), aList.get(0).getClass());
 		checkedList.addAll(aList);
 		checkedList.addAll(bList);
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/package-info.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/package-info.java
index 66ef70b..55ede24 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/package-info.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/package-info.java
@@ -84,7 +84,7 @@
 )
 @Requirement(
 	namespace = ServiceNamespace.SERVICE_NAMESPACE,
-	filter = "(&(objectClass=javax.enterprise.inject.se.SeContainerInitializer)(aries.cdi.spi=*))",
+	filter = "(objectClass=org.apache.aries.cdi.spi.CDIContainerInitializer)",
 	effective = "active"
 )
 package org.apache.aries.cdi.container;
diff --git a/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/ContainerBootstrapTest.java b/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/ContainerBootstrapTest.java
index 2170176..24cc74a 100644
--- a/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/ContainerBootstrapTest.java
+++ b/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/ContainerBootstrapTest.java
@@ -25,8 +25,6 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.CopyOnWriteArrayList;
 
-import javax.enterprise.inject.se.SeContainerInitializer;
-
 import org.apache.aries.cdi.container.internal.container.CheckedCallback;
 import org.apache.aries.cdi.container.internal.container.ConfigurationListener;
 import org.apache.aries.cdi.container.internal.container.ContainerBootstrap;
@@ -40,6 +38,7 @@ import org.apache.aries.cdi.container.internal.util.Logs;
 import org.apache.aries.cdi.container.test.BaseCDIBundleTest;
 import org.apache.aries.cdi.container.test.TestUtil;
 import org.apache.aries.cdi.container.test.beans.FooService;
+import org.apache.aries.cdi.spi.CDIContainerInitializer;
 import org.junit.Ignore;
 import org.junit.Test;
 import org.osgi.framework.ServiceObjects;
@@ -82,7 +81,7 @@ public class ContainerBootstrapTest extends BaseCDIBundleTest {
 		componentDTO.template = containerState.containerDTO().template.components.get(0);
 
 		@SuppressWarnings("unchecked")
-		ServiceTracker<SeContainerInitializer, ServiceObjects<SeContainerInitializer>> serviceTracker = mock(ServiceTracker.class);
+		ServiceTracker<CDIContainerInitializer, ServiceObjects<CDIContainerInitializer>> serviceTracker = mock(ServiceTracker.class);
 
 		ContainerBootstrap containerBootstrap = new ContainerBootstrap(
 			containerState, serviceTracker,
diff --git a/cdi-owb/src/main/java/org/apache/aries/cdi/owb/Activator.java b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/Activator.java
index 8a17c96..7474276 100644
--- a/cdi-owb/src/main/java/org/apache/aries/cdi/owb/Activator.java
+++ b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/Activator.java
@@ -22,9 +22,9 @@ import static org.osgi.service.cdi.CDIConstants.CDI_EXTENSION_PROPERTY;
 import java.util.Dictionary;
 import java.util.Hashtable;
 
-import javax.enterprise.inject.se.SeContainerInitializer;
 import javax.enterprise.inject.spi.Extension;
 
+import org.apache.aries.cdi.spi.CDIContainerInitializer;
 import org.osgi.annotation.bundle.Header;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
@@ -42,12 +42,11 @@ public class Activator implements BundleActivator {
 	public void start(BundleContext bundleContext) throws Exception {
 		System.setProperty("openwebbeans.web.sci.active", "false"); // we handle it ourself, disable this jetty feature
 		Dictionary<String, Object> properties = new Hashtable<>();
-		properties.put(SERVICE_DESCRIPTION, "Aries CDI - OpenWebBeans SeContainerInitializer Factory");
+		properties.put(SERVICE_DESCRIPTION, "Aries CDI - OpenWebBeans CDIContainerInitializer Factory");
 		properties.put(SERVICE_VENDOR, "Apache Software Foundation");
-		properties.put("aries.cdi.spi", "OpenWebBeans");
 
-		_seContainerInitializer = bundleContext.registerService(
-			SeContainerInitializer.class, new OWBSeContainerInitializerFactory(bundleContext), properties);
+		_containerInitializer = bundleContext.registerService(
+			CDIContainerInitializer.class, new OWBCDIContainerInitializerFactory(bundleContext), properties);
 
 		if (webEnabled) {
 			properties = new Hashtable<>();
@@ -62,13 +61,13 @@ public class Activator implements BundleActivator {
 
 	@Override
 	public void stop(BundleContext context) throws Exception {
-		_seContainerInitializer.unregister();
+		_containerInitializer.unregister();
 		if (_webExtension != null) {
 			_webExtension.unregister();
 		}
 	}
 
-	private ServiceRegistration<SeContainerInitializer> _seContainerInitializer;
+	private ServiceRegistration<CDIContainerInitializer> _containerInitializer;
 	private ServiceRegistration<Extension> _webExtension;
 
 }
diff --git a/cdi-owb/src/main/java/org/apache/aries/cdi/owb/OSGiDefiningClassService.java b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/OSGiDefiningClassService.java
index 62c5e71..8186eb7 100644
--- a/cdi-owb/src/main/java/org/apache/aries/cdi/owb/OSGiDefiningClassService.java
+++ b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/OSGiDefiningClassService.java
@@ -45,6 +45,7 @@ public class OSGiDefiningClassService implements DefiningClassService {
 	 * @return the proxy class instance.
 	 */
 	@Override
+	@SuppressWarnings("unchecked")
 	public <T> Class<T> defineAndLoad(final String name, final byte[] bytes, final Class<T> proxied) {
 		if (requiresUnsafe(proxied)) { // todo: today we don't really support that
 			final ClassLoader classLoader = proxied.getClassLoader();
diff --git a/cdi-owb/src/main/java/org/apache/aries/cdi/owb/OWBSeContainerInitializer.java b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/OWBCDIContainerInitializer.java
similarity index 66%
rename from cdi-owb/src/main/java/org/apache/aries/cdi/owb/OWBSeContainerInitializer.java
rename to cdi-owb/src/main/java/org/apache/aries/cdi/owb/OWBCDIContainerInitializer.java
index f37abdb..a39756d 100644
--- a/cdi-owb/src/main/java/org/apache/aries/cdi/owb/OWBSeContainerInitializer.java
+++ b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/OWBCDIContainerInitializer.java
@@ -1,33 +1,29 @@
 package org.apache.aries.cdi.owb;
 
-import static java.util.Collections.list;
 import static java.util.Objects.requireNonNull;
-import static org.apache.aries.cdi.spi.Keys.BEANS_XML_PROPERTY;
-import static org.apache.aries.cdi.spi.Keys.BUNDLECONTEXT_PROPERTY;
 
 import java.io.IOException;
 import java.lang.annotation.Annotation;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.IdentityHashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 import java.util.Properties;
 import java.util.Set;
 
 import javax.enterprise.inject.Instance;
 import javax.enterprise.inject.se.SeContainer;
-import javax.enterprise.inject.se.SeContainerInitializer;
 import javax.enterprise.inject.spi.BeanManager;
 import javax.enterprise.inject.spi.Extension;
 import javax.enterprise.util.TypeLiteral;
 
+import org.apache.aries.cdi.spi.CDIContainerInitializer;
 import org.apache.aries.cdi.spi.loader.SpiLoader;
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.config.WebBeansFinder;
@@ -46,115 +42,58 @@ import org.osgi.framework.wiring.BundleCapability;
 import org.osgi.framework.wiring.BundleWire;
 import org.osgi.framework.wiring.BundleWiring;
 
-public class OWBSeContainerInitializer extends SeContainerInitializer {
+public class OWBCDIContainerInitializer extends CDIContainerInitializer {
 
-	public OWBSeContainerInitializer(BundleContext bundleContext) {
+	public OWBCDIContainerInitializer(BundleContext bundleContext) {
 		owbBundleContext = bundleContext;
 	}
 
 	@Override
-	public SeContainerInitializer addBeanClasses(Class<?>... classes) {
+	public CDIContainerInitializer addBeanClasses(Class<?>... classes) {
 		beanClasses.addAll(Arrays.asList(classes));
 		return this;
 	}
 
 	@Override
-	public SeContainerInitializer addPackages(Class<?>... packageClasses) {
-		// TODO Auto-generated method stub
+	public CDIContainerInitializer addBeanXmls(URL... beanXmls) {
+		beanDescriptorURLs.addAll(Arrays.asList(beanXmls));
 		return this;
 	}
 
 	@Override
-	public SeContainerInitializer addPackages(boolean scanRecursively, Class<?>... packageClasses) {
-		// TODO Auto-generated method stub
+	public CDIContainerInitializer addExtension(Extension extension, Map<String, Object> properties) {
+		this.extensions.put(extension, properties);
 		return this;
 	}
 
 	@Override
-	public SeContainerInitializer addPackages(Package... packages) {
-		// TODO Auto-generated method stub
-		return this;
-	}
-
-	@Override
-	public SeContainerInitializer addPackages(boolean scanRecursively, Package... packages) {
-		// TODO Auto-generated method stub
-		return this;
-	}
-
-	@Override
-	public SeContainerInitializer addExtensions(Extension... extensions) {
-		this.extensions.addAll(Arrays.asList(extensions));
-		return this;
-	}
-
-	@Override
-	public SeContainerInitializer addExtensions(Class<? extends Extension>... extensions) {
-		this.extensionClasses.addAll(Arrays.asList(extensions));
-		return this;
-	}
-
-	@Override
-	public SeContainerInitializer enableInterceptors(Class<?>... interceptorClasses) {
-		// TODO Auto-generated method stub
-		return this;
-	}
-
-	@Override
-	public SeContainerInitializer enableDecorators(Class<?>... decoratorClasses) {
-		// TODO Auto-generated method stub
-		return this;
-	}
-
-	@Override
-	public SeContainerInitializer selectAlternatives(Class<?>... alternativeClasses) {
-		// TODO Auto-generated method stub
-		return this;
-	}
-
-	@Override
-	public SeContainerInitializer selectAlternativeStereotypes(
-		Class<? extends Annotation>... alternativeStereotypeClasses) {
-
-		// TODO Auto-generated method stub
-		return this;
-	}
-
-	@Override
-	public SeContainerInitializer addProperty(String key, Object value) {
+	public CDIContainerInitializer addProperty(String key, Object value) {
 		properties.putIfAbsent(key, value);
 		return this;
 	}
 
 	@Override
-	public SeContainerInitializer setProperties(Map<String, Object> properties) {
-		properties.putAll(properties);
+	public CDIContainerInitializer setBundleContext(BundleContext bundleContext) {
+		clientBundleContext = bundleContext;
 		return this;
 	}
 
 	@Override
-	public SeContainerInitializer disableDiscovery() {
-		// TODO Auto-generated method stub
+	public CDIContainerInitializer setClassLoader(SpiLoader spiLoader) {
+		this.spiLoader = spiLoader;
 		return this;
 	}
 
 	@Override
-	public SeContainerInitializer setClassLoader(ClassLoader classLoader) {
-		this.classLoader = (SpiLoader)classLoader;
-		return this;
-	}
-
-	@Override
-	@SuppressWarnings("unchecked")
 	public SeContainer initialize() {
-		requireNonNull(classLoader).handleResources(
+		requireNonNull(spiLoader).handleResources(
 			s -> (s != null) && s.startsWith("META-INF/openwebbeans/"),
 			this::getResources
 		).findClass(
 			s -> (s != null) && (s.startsWith("org.apache.webbeans.") || s.startsWith("sun.misc.")),
 			this::loadClass);
 
-		classLoader.getBundles().add(owbBundleContext.getBundle());
+		spiLoader.getBundles().add(owbBundleContext.getBundle());
 
 		BundleWiring bundleWiring = owbBundleContext.getBundle().adapt(BundleWiring.class);
 		List<BundleWire> requiredWires = bundleWiring.getRequiredWires(PackageNamespace.PACKAGE_NAMESPACE);
@@ -168,8 +107,8 @@ public class OWBSeContainerInitializer extends SeContainerInitializer {
 			}
 
 			Bundle wireBundle = bundleWire.getProvider().getBundle();
-			if (!classLoader.getBundles().contains(wireBundle)) {
-				classLoader.getBundles().add(wireBundle);
+			if (!spiLoader.getBundles().contains(wireBundle)) {
+				spiLoader.getBundles().add(wireBundle);
 			}
 		}
 
@@ -177,9 +116,8 @@ public class OWBSeContainerInitializer extends SeContainerInitializer {
 		ClassLoader current = currentThread.getContextClassLoader();
 
 		try {
-			currentThread.setContextClassLoader(classLoader);
-			clientBundleContext = requireNonNull(BundleContext.class.cast(properties.get(BUNDLECONTEXT_PROPERTY)));
-			startObject = clientBundleContext;
+			currentThread.setContextClassLoader(spiLoader);
+			startObject = requireNonNull(clientBundleContext);
 
 			final Map<Class<?>, Object> services = new HashMap<>();
 			properties.setProperty(
@@ -188,13 +126,13 @@ public class OWBSeContainerInitializer extends SeContainerInitializer {
 
 			services.put(
 				OSGiDefiningClassService.ClassLoaders.class,
-				new OSGiDefiningClassService.ClassLoaders(current, classLoader));
+				new OSGiDefiningClassService.ClassLoaders(current, spiLoader));
 			services.put(
 				ApplicationBoundaryService.class,
-				new OsgiApplicationBoundaryService(current, classLoader));
+				new OsgiApplicationBoundaryService(current, spiLoader));
 			services.put(
 				ScannerService.class,
-				new CdiScannerService(beanClasses, Collection.class.cast(properties.get(BEANS_XML_PROPERTY))));
+				new CdiScannerService(beanClasses, beanDescriptorURLs));
 			services.put(BundleContext.class, clientBundleContext);
 
 			if (Activator.webEnabled) {
@@ -214,18 +152,11 @@ public class OWBSeContainerInitializer extends SeContainerInitializer {
 				services.put(org.apache.aries.cdi.owb.web.UpdatableServletContext.class, startObject);
 			}
 
-			Optional.ofNullable(clientBundleContext.getBundle().getHeaders()).ifPresent(
-				headers -> list(headers.elements()).stream()
-					.filter(it -> it.startsWith("org.apache.openwebbeans."))
-					.forEach(key -> properties.setProperty(key, headers.get(key))
-				)
-			);
-
 			bootstrap = new WebBeansContext(services, properties) {
 				private final ExtensionLoader overridenExtensionLoader = new ExtensionLoader(this) {
 					@Override
 					public void loadExtensionServices() {
-						extensions.removeIf(ext -> {addExtension(ext); return true;});
+						extensions.forEach((k, v) -> addExtension(k));
 					}
 				};
 
@@ -236,7 +167,7 @@ public class OWBSeContainerInitializer extends SeContainerInitializer {
 			};
 
 			final DefaultSingletonService singletonService = getSingletonService();
-			singletonService.register(classLoader, bootstrap);
+			singletonService.register(spiLoader, bootstrap);
 			final ContainerLifecycle lifecycle = bootstrap.getService(ContainerLifecycle.class);
 			lifecycle.startApplication(startObject);
 
@@ -275,11 +206,11 @@ public class OWBSeContainerInitializer extends SeContainerInitializer {
 	}
 
 	private volatile WebBeansContext bootstrap;
+	private final List<URL> beanDescriptorURLs = new ArrayList<>();
 	private volatile BundleContext clientBundleContext;
-	private volatile SpiLoader classLoader;
+	private volatile SpiLoader spiLoader;
 	private final Set<Class<?>> beanClasses = new HashSet<>();
-	private final List<Extension> extensions = new ArrayList<>();
-	private final List<Class<? extends Extension>> extensionClasses = new ArrayList<>();
+	private final Map<Extension, Map<String, Object>> extensions = new IdentityHashMap<>();
 	private final BundleContext owbBundleContext;
 	private final Properties properties = new Properties();
 	private Object startObject;
@@ -294,7 +225,7 @@ public class OWBSeContainerInitializer extends SeContainerInitializer {
 			Thread currentThread = Thread.currentThread();
 			ClassLoader current = currentThread.getContextClassLoader();
 			try {
-				currentThread.setContextClassLoader(requireNonNull(classLoader));
+				currentThread.setContextClassLoader(requireNonNull(spiLoader));
 				bootstrap.getService(ContainerLifecycle.class).stopApplication(startObject);
 			}
 			finally {
diff --git a/cdi-owb/src/main/java/org/apache/aries/cdi/owb/OWBSeContainerInitializerFactory.java b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/OWBCDIContainerInitializerFactory.java
similarity index 63%
rename from cdi-owb/src/main/java/org/apache/aries/cdi/owb/OWBSeContainerInitializerFactory.java
rename to cdi-owb/src/main/java/org/apache/aries/cdi/owb/OWBCDIContainerInitializerFactory.java
index 87e1b7c..db10ecd 100644
--- a/cdi-owb/src/main/java/org/apache/aries/cdi/owb/OWBSeContainerInitializerFactory.java
+++ b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/OWBCDIContainerInitializerFactory.java
@@ -14,29 +14,31 @@
 
 package org.apache.aries.cdi.owb;
 
-import javax.enterprise.inject.se.SeContainerInitializer;
-
+import org.apache.aries.cdi.spi.CDIContainerInitializer;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.PrototypeServiceFactory;
 import org.osgi.framework.ServiceRegistration;
 
-public class OWBSeContainerInitializerFactory implements PrototypeServiceFactory<SeContainerInitializer> {
+public class OWBCDIContainerInitializerFactory implements PrototypeServiceFactory<CDIContainerInitializer> {
 
-	public OWBSeContainerInitializerFactory(BundleContext bundleContext) {
+	public OWBCDIContainerInitializerFactory(BundleContext bundleContext) {
 		this.bundleContext = bundleContext;
 	}
 
 	@Override
-	public SeContainerInitializer getService(
-		Bundle bundle, ServiceRegistration<SeContainerInitializer> registration) {
+	public CDIContainerInitializer getService(
+		Bundle bundle,
+		ServiceRegistration<CDIContainerInitializer> registration) {
 
-		return new OWBSeContainerInitializer(bundleContext);
+		return new OWBCDIContainerInitializer(bundleContext);
 	}
 
 	@Override
 	public void ungetService(
-		Bundle bundle, ServiceRegistration<SeContainerInitializer> registration, SeContainerInitializer service) {
+		Bundle bundle,
+		ServiceRegistration<CDIContainerInitializer> registration,
+		CDIContainerInitializer service) {
 	}
 
 	private final BundleContext bundleContext;
diff --git a/cdi-owb/src/main/java/org/apache/aries/cdi/owb/OsgiApplicationBoundaryService.java b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/OsgiApplicationBoundaryService.java
index a9da88f..b3985f9 100644
--- a/cdi-owb/src/main/java/org/apache/aries/cdi/owb/OsgiApplicationBoundaryService.java
+++ b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/OsgiApplicationBoundaryService.java
@@ -16,29 +16,29 @@ package org.apache.aries.cdi.owb;
 import org.apache.webbeans.spi.ApplicationBoundaryService;
 
 public class OsgiApplicationBoundaryService implements ApplicationBoundaryService {
-    private final ClassLoader bundleLoader;
-    private final ClassLoader loader;
+	private final ClassLoader bundleLoader;
+	private final ClassLoader loader;
 
-    public OsgiApplicationBoundaryService(final ClassLoader bundleLoader, final ClassLoader loader) {
-        this.bundleLoader = bundleLoader;
-        this.loader = loader;
-    }
+	public OsgiApplicationBoundaryService(final ClassLoader bundleLoader, final ClassLoader loader) {
+		this.bundleLoader = bundleLoader;
+		this.loader = loader;
+	}
 
-    @Override
-    public ClassLoader getApplicationClassLoader() {
-        return bundleLoader;
-    }
+	@Override
+	public ClassLoader getApplicationClassLoader() {
+		return bundleLoader;
+	}
 
-    @Override
-    public ClassLoader getBoundaryClassLoader(final Class aClass) {
-        final ClassLoader classToProxyCl = aClass.getClassLoader();
-        if (classToProxyCl == null || classToProxyCl == loader) {
-            return loader;
-        }
-        if (classToProxyCl == bundleLoader) {
-            return classToProxyCl;
-        }
-        // todo: refine if needed
-        return classToProxyCl;
-    }
+	@Override
+	public ClassLoader getBoundaryClassLoader(@SuppressWarnings("rawtypes") final Class aClass) {
+		final ClassLoader classToProxyCl = aClass.getClassLoader();
+		if (classToProxyCl == null || classToProxyCl == loader) {
+			return loader;
+		}
+		if (classToProxyCl == bundleLoader) {
+			return classToProxyCl;
+		}
+		// todo: refine if needed
+		return classToProxyCl;
+	}
 }
diff --git a/cdi-owb/src/main/java/org/apache/aries/cdi/owb/package-info.java b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/package-info.java
index 063d4c7..5e523d8 100644
--- a/cdi-owb/src/main/java/org/apache/aries/cdi/owb/package-info.java
+++ b/cdi-owb/src/main/java/org/apache/aries/cdi/owb/package-info.java
@@ -13,10 +13,7 @@
  */
 
 @org.osgi.annotation.bundle.Capability(
-	attribute = {
-		"objectClass:List<String>=javax.enterprise.inject.se.SeContainerInitializer",
-		"aries.cdi.spi=OpenWebBeans"
-	},
+	attribute = "objectClass:List<String>=org.apache.aries.cdi.spi.CDIContainerInitializer",
 	namespace = org.osgi.namespace.service.ServiceNamespace.SERVICE_NAMESPACE
 )
 @org.osgi.service.cdi.annotations.RequireCDIImplementation
diff --git a/cdi-spi/src/main/java/org/apache/aries/cdi/spi/CDIContainerInitializer.java b/cdi-spi/src/main/java/org/apache/aries/cdi/spi/CDIContainerInitializer.java
new file mode 100644
index 0000000..9e1b883
--- /dev/null
+++ b/cdi-spi/src/main/java/org/apache/aries/cdi/spi/CDIContainerInitializer.java
@@ -0,0 +1,98 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.spi;
+
+import java.net.URL;
+import java.util.Map;
+
+import javax.enterprise.inject.spi.Extension;
+
+import org.apache.aries.cdi.spi.loader.SpiLoader;
+import org.osgi.annotation.versioning.ProviderType;
+import org.osgi.framework.BundleContext;
+
+@ProviderType
+public abstract class CDIContainerInitializer {
+
+	/**
+	 * Adds the listed classes to the resulting synthetic bean archive.
+	 * <p>
+	 * Contents will be added to those added during previous calls.
+	 *
+	 * @param classes
+	 * @return this
+	 */
+	public abstract CDIContainerInitializer addBeanClasses(Class<?>... classes);
+
+	/**
+	 * Adds the listed bean.xml files the resulting synthetic bean archive
+	 * <p>
+	 * Contents will be added to those added during previous calls.
+	 *
+	 * @param beanXmls
+	 * @return this
+	 */
+	public abstract CDIContainerInitializer addBeanXmls(URL... beanXmls);
+
+	/**
+	 * Adds the given Extension instance along with any service properties available to the synthetic bean archive
+	 * <p>
+	 * Contents will be added to those added during previous calls.
+	 *
+	 * @param extension
+	 * @param properties
+	 * @return this
+	 */
+	public abstract CDIContainerInitializer addExtension(Extension extension, Map<String, Object> properties);
+
+	/**
+	 * Adds a configuration property to the container
+	 * <p>
+	 * Contents will be added to those added during previous calls.
+	 *
+	 * @param key
+	 * @param value
+	 * @return this
+	 */
+	public abstract CDIContainerInitializer addProperty(String key, Object value);
+
+	/**
+	 * Sets the SpiLoader for this synthetic bean archive
+	 * <p>
+	 * The last such call will win.
+	 *
+	 * @param spiLoader
+	 * @return this
+	 */
+	public abstract CDIContainerInitializer setClassLoader(SpiLoader spiLoader);
+
+	/**
+	 * Sets the {@link BundleContext} for which this synthetic bean archive is created
+	 * <p>
+	 * The last such call will win.
+	 *
+	 * @param beanXmls
+	 * @return this
+	 */
+	public abstract CDIContainerInitializer setBundleContext(BundleContext bundleContext);
+
+	/**
+	 * Bootstraps the container that has been built from this CDIContainerInitializer
+	 *
+	 * @return a new SeContainer representing this synthetic bean archive
+	 */
+	public abstract AutoCloseable initialize();
+
+}
diff --git a/cdi-spi/src/main/java/org/apache/aries/cdi/spi/Keys.java b/cdi-spi/src/main/java/org/apache/aries/cdi/spi/Keys.java
deleted file mode 100644
index e2fb32b..0000000
--- a/cdi-spi/src/main/java/org/apache/aries/cdi/spi/Keys.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * 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
- * <p>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p>
- * 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.spi;
-
-import java.net.URL;
-
-import javax.enterprise.inject.se.SeContainerInitializer;
-
-public class Keys {
-
-	private Keys() {}
-
-	private static final String ROOT_PREFIX = "org.apache.aries.cdi.spi.";
-
-	/**
-	 * Key used for passing a {@code Collection<URL>} containing the list of {@code beans.xml}
-	 * {@link URL urls} using {@link SeContainerInitializer#addProperty(String, Object)} or
-	 * {@link SeContainerInitializer#setProperties(java.util.Map)}.
-	 */
-	public static final String BEANS_XML_PROPERTY = ROOT_PREFIX + "beansXml";
-
-	/**
-	 * Key used for passing a {@code BundleContext} of the CDI bundle using
-	 * {@link SeContainerInitializer#addProperty(String, Object)} or
-	 * {@link SeContainerInitializer#setProperties(java.util.Map)}.
-	 */
-	public static final String BUNDLECONTEXT_PROPERTY = ROOT_PREFIX + "bundleContext";
-
-
-}
diff --git a/cdi-weld/src/main/java/org/apache/aries/cdi/weld/Activator.java b/cdi-weld/src/main/java/org/apache/aries/cdi/weld/Activator.java
index 3d83511..e7da0ec 100644
--- a/cdi-weld/src/main/java/org/apache/aries/cdi/weld/Activator.java
+++ b/cdi-weld/src/main/java/org/apache/aries/cdi/weld/Activator.java
@@ -21,8 +21,7 @@ import static org.osgi.framework.Constants.SERVICE_VENDOR;
 import java.util.Dictionary;
 import java.util.Hashtable;
 
-import javax.enterprise.inject.se.SeContainerInitializer;
-
+import org.apache.aries.cdi.spi.CDIContainerInitializer;
 import org.osgi.annotation.bundle.Header;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
@@ -37,19 +36,18 @@ public class Activator implements BundleActivator {
 	@Override
 	public void start(BundleContext bundleContext) throws Exception {
 		Dictionary<String, Object> properties = new Hashtable<>();
-		properties.put(SERVICE_DESCRIPTION, "Aries CDI - Weld SeContainerInitializer Factory");
+		properties.put(SERVICE_DESCRIPTION, "Aries CDI - Weld CDIContainerInitializer Factory");
 		properties.put(SERVICE_VENDOR, "Apache Software Foundation");
-		properties.put("aries.cdi.spi", "Weld");
 
-		_seContainerInitializer = bundleContext.registerService(
-			SeContainerInitializer.class, new WeldSeContainerInitializerFactory(bundleContext), properties);
+		_containerInitializer = bundleContext.registerService(
+			CDIContainerInitializer.class, new WeldCDIContainerInitializerFactory(bundleContext), properties);
 	}
 
 	@Override
 	public void stop(BundleContext context) throws Exception {
-		_seContainerInitializer.unregister();
+		_containerInitializer.unregister();
 	}
 
-	private ServiceRegistration<SeContainerInitializer> _seContainerInitializer;
+	private ServiceRegistration<CDIContainerInitializer> _containerInitializer;
 
 }
diff --git a/cdi-weld/src/main/java/org/apache/aries/cdi/weld/WeldCDIContainerInitializer.java b/cdi-weld/src/main/java/org/apache/aries/cdi/weld/WeldCDIContainerInitializer.java
new file mode 100644
index 0000000..9057214
--- /dev/null
+++ b/cdi-weld/src/main/java/org/apache/aries/cdi/weld/WeldCDIContainerInitializer.java
@@ -0,0 +1,149 @@
+package org.apache.aries.cdi.weld;
+
+import static java.util.Objects.requireNonNull;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.IdentityHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import javax.enterprise.inject.spi.Extension;
+
+import org.apache.aries.cdi.spi.CDIContainerInitializer;
+import org.apache.aries.cdi.spi.loader.SpiLoader;
+import org.jboss.weld.bootstrap.WeldBootstrap;
+import org.jboss.weld.bootstrap.spi.BeanDeploymentArchive;
+import org.jboss.weld.bootstrap.spi.BeansXml;
+import org.jboss.weld.bootstrap.spi.Deployment;
+import org.jboss.weld.bootstrap.spi.Metadata;
+import org.jboss.weld.xml.BeansXmlParser;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+
+public class WeldCDIContainerInitializer extends CDIContainerInitializer {
+
+	public WeldCDIContainerInitializer(BundleContext bundleContext) {
+		weldBundleContext = bundleContext;
+	}
+
+	@Override
+	public CDIContainerInitializer addBeanClasses(Class<?>... classes) {
+		beanClasses.addAll(Arrays.asList(classes));
+		return this;
+	}
+
+	@Override
+	public CDIContainerInitializer addBeanXmls(URL... beanXmls) {
+		beanDescriptorURLs.addAll(Arrays.asList(beanXmls));
+		return this;
+	}
+
+	@Override
+	public CDIContainerInitializer addExtension(Extension extension, Map<String, Object> properties) {
+		this.extensions.put(extension, properties);
+		return this;
+	}
+
+	@Override
+	public CDIContainerInitializer addProperty(String key, Object value) {
+		properties.putIfAbsent(key, value);
+		return this;
+	}
+
+	@Override
+	public CDIContainerInitializer setBundleContext(BundleContext bundleContext) {
+		clientBundleContext = bundleContext;
+		return this;
+	}
+
+	@Override
+	public CDIContainerInitializer setClassLoader(SpiLoader spiLoader) {
+		this.spiLoader = spiLoader;
+		return this;
+	}
+
+	@Override
+	public AutoCloseable initialize() {
+		Thread currentThread = Thread.currentThread();
+		ClassLoader current = currentThread.getContextClassLoader();
+		BundleResourcesLoader resourceLoader = new BundleResourcesLoader(requireNonNull(spiLoader), weldBundleContext.getBundle());
+
+		try {
+			currentThread.setContextClassLoader(spiLoader);
+
+			// Add external extensions
+			List<Metadata<Extension>> metaExtensions = extensions.entrySet().stream().map(
+				e -> new ExtensionMetadata(e.getKey(), location(e.getValue()))
+			).collect(Collectors.toList());
+
+			BeansXml beansXml = BeansXml.EMPTY_BEANS_XML;
+
+			if (!beanDescriptorURLs.isEmpty()) {
+				BeansXmlParser beansXmlParser = new BeansXmlParser();
+				beansXml = beansXmlParser.parse(beanDescriptorURLs);
+			}
+
+			String id = clientBundleContext.getBundle().toString();
+
+			bootstrap = new WeldBootstrap();
+
+			beanDeploymentArchive = new ContainerDeploymentArchive(
+				resourceLoader,
+				id,
+				beanClasses.stream().map(Class::getName).collect(Collectors.toList()),
+				beansXml);
+
+			Deployment deployment = new ContainerDeployment(metaExtensions, beanDeploymentArchive);
+
+			bootstrap.startExtensions(metaExtensions);
+			bootstrap.startContainer(id, new ContainerEnvironment(), deployment);
+			bootstrap.startInitialization();
+			bootstrap.deployBeans();
+			bootstrap.validateBeans();
+			bootstrap.endInitialization();
+
+			return new WeldSeContainer();
+		}
+		finally {
+			currentThread.setContextClassLoader(current);
+		}
+	}
+
+	private String location(Map<String, Object> extensionProperties) {
+		return String.valueOf(extensionProperties.get(Constants.SERVICE_ID));
+	}
+
+	private volatile BeanDeploymentArchive beanDeploymentArchive;
+	private final List<URL> beanDescriptorURLs = new ArrayList<>();
+	private volatile WeldBootstrap bootstrap;
+	private volatile BundleContext clientBundleContext;
+	private volatile SpiLoader spiLoader;
+	private final Set<Class<?>> beanClasses = new HashSet<>();
+	private final Map<Extension, Map<String, Object>> extensions = new IdentityHashMap<>();
+	private final BundleContext weldBundleContext;
+	private final Properties properties = new Properties();
+
+	private class WeldSeContainer implements AutoCloseable {
+
+		@Override
+		public void close() {
+			Thread currentThread = Thread.currentThread();
+			ClassLoader current = currentThread.getContextClassLoader();
+			try {
+				currentThread.setContextClassLoader(requireNonNull(spiLoader));
+				bootstrap.shutdown();
+			}
+			finally {
+				currentThread.setContextClassLoader(current);
+			}
+		}
+
+	}
+
+}
diff --git a/cdi-weld/src/main/java/org/apache/aries/cdi/weld/WeldSeContainerInitializerFactory.java b/cdi-weld/src/main/java/org/apache/aries/cdi/weld/WeldCDIContainerInitializerFactory.java
similarity index 63%
rename from cdi-weld/src/main/java/org/apache/aries/cdi/weld/WeldSeContainerInitializerFactory.java
rename to cdi-weld/src/main/java/org/apache/aries/cdi/weld/WeldCDIContainerInitializerFactory.java
index 3ec972f..1ca91e1 100644
--- a/cdi-weld/src/main/java/org/apache/aries/cdi/weld/WeldSeContainerInitializerFactory.java
+++ b/cdi-weld/src/main/java/org/apache/aries/cdi/weld/WeldCDIContainerInitializerFactory.java
@@ -14,29 +14,32 @@
 
 package org.apache.aries.cdi.weld;
 
-import javax.enterprise.inject.se.SeContainerInitializer;
-
+import org.apache.aries.cdi.spi.CDIContainerInitializer;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.PrototypeServiceFactory;
 import org.osgi.framework.ServiceRegistration;
 
-public class WeldSeContainerInitializerFactory implements PrototypeServiceFactory<SeContainerInitializer> {
+public class WeldCDIContainerInitializerFactory
+	implements PrototypeServiceFactory<CDIContainerInitializer> {
 
-	public WeldSeContainerInitializerFactory(BundleContext bundleContext) {
+	public WeldCDIContainerInitializerFactory(BundleContext bundleContext) {
 		this.bundleContext = bundleContext;
 	}
 
 	@Override
-	public SeContainerInitializer getService(
-		Bundle bundle, ServiceRegistration<SeContainerInitializer> registration) {
+	public CDIContainerInitializer getService(
+		Bundle bundle,
+		ServiceRegistration<CDIContainerInitializer> registration) {
 
-		return new WeldSeContainerInitializer(bundleContext);
+		return new WeldCDIContainerInitializer(bundleContext);
 	}
 
 	@Override
 	public void ungetService(
-		Bundle bundle, ServiceRegistration<SeContainerInitializer> registration, SeContainerInitializer service) {
+		Bundle bundle,
+		ServiceRegistration<CDIContainerInitializer> registration,
+		CDIContainerInitializer service) {
 	}
 
 	private final BundleContext bundleContext;
diff --git a/cdi-weld/src/main/java/org/apache/aries/cdi/weld/WeldSeContainerInitializer.java b/cdi-weld/src/main/java/org/apache/aries/cdi/weld/WeldSeContainerInitializer.java
deleted file mode 100644
index 1de5bff..0000000
--- a/cdi-weld/src/main/java/org/apache/aries/cdi/weld/WeldSeContainerInitializer.java
+++ /dev/null
@@ -1,280 +0,0 @@
-package org.apache.aries.cdi.weld;
-
-import static java.util.Collections.list;
-import static java.util.Objects.requireNonNull;
-import static org.apache.aries.cdi.spi.Keys.BEANS_XML_PROPERTY;
-import static org.apache.aries.cdi.spi.Keys.BUNDLECONTEXT_PROPERTY;
-
-import java.lang.annotation.Annotation;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Properties;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import javax.enterprise.inject.Instance;
-import javax.enterprise.inject.se.SeContainer;
-import javax.enterprise.inject.se.SeContainerInitializer;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.inject.spi.Extension;
-import javax.enterprise.util.TypeLiteral;
-
-import org.apache.aries.cdi.spi.loader.SpiLoader;
-import org.jboss.weld.bootstrap.WeldBootstrap;
-import org.jboss.weld.bootstrap.spi.BeanDeploymentArchive;
-import org.jboss.weld.bootstrap.spi.BeansXml;
-import org.jboss.weld.bootstrap.spi.Deployment;
-import org.jboss.weld.bootstrap.spi.Metadata;
-import org.jboss.weld.xml.BeansXmlParser;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleReference;
-
-public class WeldSeContainerInitializer extends SeContainerInitializer {
-
-	public WeldSeContainerInitializer(BundleContext bundleContext) {
-		weldBundleContext = bundleContext;
-	}
-
-	@Override
-	public SeContainerInitializer addBeanClasses(Class<?>... classes) {
-		beanClasses.addAll(Arrays.asList(classes));
-		return this;
-	}
-
-	@Override
-	public SeContainerInitializer addPackages(Class<?>... packageClasses) {
-		// TODO Auto-generated method stub
-		return this;
-	}
-
-	@Override
-	public SeContainerInitializer addPackages(boolean scanRecursively, Class<?>... packageClasses) {
-		// TODO Auto-generated method stub
-		return this;
-	}
-
-	@Override
-	public SeContainerInitializer addPackages(Package... packages) {
-		// TODO Auto-generated method stub
-		return this;
-	}
-
-	@Override
-	public SeContainerInitializer addPackages(boolean scanRecursively, Package... packages) {
-		// TODO Auto-generated method stub
-		return this;
-	}
-
-	@Override
-	public SeContainerInitializer addExtensions(Extension... extensions) {
-		this.extensions.addAll(Arrays.asList(extensions));
-		return this;
-	}
-
-	@Override
-	public SeContainerInitializer addExtensions(Class<? extends Extension>... extensions) {
-		this.extensionClasses.addAll(Arrays.asList(extensions));
-		return this;
-	}
-
-	@Override
-	public SeContainerInitializer enableInterceptors(Class<?>... interceptorClasses) {
-		// TODO Auto-generated method stub
-		return this;
-	}
-
-	@Override
-	public SeContainerInitializer enableDecorators(Class<?>... decoratorClasses) {
-		// TODO Auto-generated method stub
-		return this;
-	}
-
-	@Override
-	public SeContainerInitializer selectAlternatives(Class<?>... alternativeClasses) {
-		// TODO Auto-generated method stub
-		return this;
-	}
-
-	@Override
-	public SeContainerInitializer selectAlternativeStereotypes(
-		Class<? extends Annotation>... alternativeStereotypeClasses) {
-
-		// TODO Auto-generated method stub
-		return this;
-	}
-
-	@Override
-	public SeContainerInitializer addProperty(String key, Object value) {
-		properties.putIfAbsent(key, value);
-		return this;
-	}
-
-	@Override
-	public SeContainerInitializer setProperties(Map<String, Object> properties) {
-		properties.putAll(properties);
-		return this;
-	}
-
-	@Override
-	public SeContainerInitializer disableDiscovery() {
-		// TODO Auto-generated method stub
-		return this;
-	}
-
-	@Override
-	public SeContainerInitializer setClassLoader(ClassLoader classLoader) {
-		this.classLoader = (SpiLoader)classLoader;
-		return this;
-	}
-
-	@Override
-	@SuppressWarnings("unchecked")
-	public SeContainer initialize() {
-		Thread currentThread = Thread.currentThread();
-		ClassLoader current = currentThread.getContextClassLoader();
-		BundleResourcesLoader resourceLoader = new BundleResourcesLoader(requireNonNull(classLoader), weldBundleContext.getBundle());
-
-		try {
-			currentThread.setContextClassLoader(classLoader);
-			clientBundleContext = requireNonNull(BundleContext.class.cast(properties.get(BUNDLECONTEXT_PROPERTY)));
-
-			Optional.ofNullable(clientBundleContext.getBundle().getHeaders()).ifPresent(
-				headers -> list(headers.elements()).stream()
-					.filter(it -> it.startsWith("org.jboss.weld."))
-					.forEach(key -> properties.setProperty(key, headers.get(key))
-				)
-			);
-
-			// Add external extensions
-			List<Metadata<Extension>> metaExtensions = extensions.stream().map(
-				extension -> {
-					Bundle extensionBundle = BundleReference.class.cast(extension.getClass().getClassLoader()).getBundle();
-					classLoader.getBundles().add(extensionBundle);
-					return new ExtensionMetadata(extension, extensionBundle.toString());
-				}
-			).collect(Collectors.toList());
-
-			BeansXml beansXml = BeansXml.EMPTY_BEANS_XML;
-
-			Collection<URL> beanDescriptorURLs = Collection.class.cast(properties.get(BEANS_XML_PROPERTY));
-
-			if (!beanDescriptorURLs.isEmpty()) {
-				BeansXmlParser beansXmlParser = new BeansXmlParser();
-				beansXml = beansXmlParser.parse(beanDescriptorURLs);
-			}
-
-			String id = clientBundleContext.getBundle().toString();
-
-			bootstrap = new WeldBootstrap();
-
-			beanDeploymentArchive = new ContainerDeploymentArchive(
-				resourceLoader,
-				id,
-				beanClasses.stream().map(Class::getName).collect(Collectors.toList()),
-				beansXml);
-
-			Deployment deployment = new ContainerDeployment(metaExtensions, beanDeploymentArchive);
-
-			bootstrap.startExtensions(metaExtensions);
-			bootstrap.startContainer(id, new ContainerEnvironment(), deployment);
-			bootstrap.startInitialization();
-			bootstrap.deployBeans();
-			bootstrap.validateBeans();
-			bootstrap.endInitialization();
-
-			return new WeldSeContainer();
-		}
-		finally {
-			currentThread.setContextClassLoader(current);
-		}
-	}
-
-	private volatile BeanDeploymentArchive beanDeploymentArchive;
-	private volatile WeldBootstrap bootstrap;
-	private volatile BundleContext clientBundleContext;
-	private volatile SpiLoader classLoader;
-	private final Set<Class<?>> beanClasses = new HashSet<>();
-	private final List<Extension> extensions = new ArrayList<>();
-	private final List<Class<? extends Extension>> extensionClasses = new ArrayList<>();
-	private final BundleContext weldBundleContext;
-	private final Properties properties = new Properties();
-
-	private class WeldSeContainer implements SeContainer {
-
-		private volatile boolean running = true;
-
-		@Override
-		public void close() {
-			running = false;
-			Thread currentThread = Thread.currentThread();
-			ClassLoader current = currentThread.getContextClassLoader();
-			try {
-				currentThread.setContextClassLoader(requireNonNull(classLoader));
-				bootstrap.shutdown();
-			}
-			finally {
-				currentThread.setContextClassLoader(current);
-			}
-		}
-
-		@Override
-		public Instance<Object> select(Annotation... qualifiers) {
-			return bootstrap.getManager(beanDeploymentArchive).createInstance().select(qualifiers);
-		}
-
-		@Override
-		public <U> Instance<U> select(Class<U> subtype, Annotation... qualifiers) {
-			return bootstrap.getManager(beanDeploymentArchive).createInstance().select(subtype, qualifiers);
-		}
-
-		@Override
-		public <U> Instance<U> select(TypeLiteral<U> subtype, Annotation... qualifiers) {
-			return bootstrap.getManager(beanDeploymentArchive).createInstance().select(subtype, qualifiers);
-		}
-
-		@Override
-		public boolean isUnsatisfied() {
-			return bootstrap.getManager(beanDeploymentArchive).createInstance().isUnsatisfied();
-		}
-
-		@Override
-		public boolean isAmbiguous() {
-			return bootstrap.getManager(beanDeploymentArchive).createInstance().isAmbiguous();
-		}
-
-		@Override
-		public void destroy(Object instance) {
-			bootstrap.getManager(beanDeploymentArchive).createInstance().destroy(instance);
-		}
-
-		@Override
-		public Iterator<Object> iterator() {
-			return bootstrap.getManager(beanDeploymentArchive).createInstance().iterator();
-		}
-
-		@Override
-		public boolean isRunning() {
-			return running;
-		}
-
-		@Override
-		public BeanManager getBeanManager() {
-			return bootstrap.getManager(beanDeploymentArchive);
-		}
-
-		@Override
-		public Object get() {
-			return bootstrap.getManager(beanDeploymentArchive).createInstance().get();
-		}
-
-	}
-
-}
diff --git a/cdi-weld/src/main/java/org/apache/aries/cdi/weld/package-info.java b/cdi-weld/src/main/java/org/apache/aries/cdi/weld/package-info.java
index 0e4cdfe..218f42e 100644
--- a/cdi-weld/src/main/java/org/apache/aries/cdi/weld/package-info.java
+++ b/cdi-weld/src/main/java/org/apache/aries/cdi/weld/package-info.java
@@ -13,10 +13,7 @@
  */
 
 @org.osgi.annotation.bundle.Capability(
-	attribute = {
-		"objectClass:List<String>=javax.enterprise.inject.se.SeContainerInitializer",
-		"aries.cdi.spi=Weld"
-	},
+	attribute = "objectClass:List<String>=org.apache.aries.cdi.spi.CDIContainerInitializer",
 	namespace = org.osgi.namespace.service.ServiceNamespace.SERVICE_NAMESPACE
 )
 @org.osgi.service.cdi.annotations.RequireCDIImplementation


[aries-cdi] 17/27: test fixes

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rotty3000 pushed a commit to branch rotty3000/cdi-spi
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit 1e0219d2496f8ccc9bf603526bc778fcdeae2f01
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Fri Nov 22 16:51:58 2019 -0500

    test fixes
    
    Signed-off-by: Raymond Augé <ro...@apache.org>
---
 .../aries/cdi/test/cases/AbstractTestCase.java     |  4 +-
 .../apache/aries/cdi/test/cases/CdiBeanTests.java  | 23 +++---
 .../aries/cdi/test/cases/ConfigurationTests.java   | 86 ++++++++++++++++------
 .../cdi/test/cases/OSGiBeanDescriptorTests.java    |  3 +-
 4 files changed, 80 insertions(+), 36 deletions(-)

diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/AbstractTestCase.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/AbstractTestCase.java
index 7ba6581..4c2fcda 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/AbstractTestCase.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/AbstractTestCase.java
@@ -91,7 +91,7 @@ public abstract class AbstractTestCase {
 		runtimeTracker = new ServiceTracker<>(
 				bundleContext, CDIComponentRuntime.class, null);
 		runtimeTracker.open();
-		servicesBundle = installBundle("services-one.jar");
+		servicesBundle = installBundle("services-one.jar", false);
 		servicesBundle.start();
 	}
 
@@ -104,7 +104,7 @@ public abstract class AbstractTestCase {
 	@Before
 	public void setUp() throws Exception {
 		cdiRuntime = runtimeTracker.waitForService(timeout);
-		cdiBundle = installBundle("basic-beans.jar");
+		cdiBundle = installBundle("basic-beans.jar", false);
 		cdiBundle.start();
 	}
 
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/CdiBeanTests.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/CdiBeanTests.java
index debd60a..29e613a 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/CdiBeanTests.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/CdiBeanTests.java
@@ -14,7 +14,10 @@
 
 package org.apache.aries.cdi.test.cases;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 
 import java.util.Map;
 import java.util.Set;
@@ -43,7 +46,7 @@ public class CdiBeanTests extends AbstractTestCase {
 		try (CloseableTracker<BeanService, BeanService> tracker = track(
 			"(&(objectClass=%s)(objectClass=*.%s))",
 			BeanService.class.getName(),
-			"ConstructorInjectedService");) {
+			"ConstructorInjectedService")) {
 
 			BeanService beanService = tracker.waitForService(timeout);
 
@@ -57,7 +60,7 @@ public class CdiBeanTests extends AbstractTestCase {
 		try (CloseableTracker<FieldInjectedReference, FieldInjectedReference> tracker = track(
 			"(&(objectClass=%s)(objectClass=*.%s))",
 			FieldInjectedReference.class.getName(),
-			"FieldInjectedBundleScopedImpl");) {
+			"FieldInjectedBundleScopedImpl")) {
 
 			FieldInjectedReference fieldInjectedReference = tracker.waitForService(timeout);
 
@@ -77,7 +80,7 @@ public class CdiBeanTests extends AbstractTestCase {
 		try (CloseableTracker<FieldInjectedReference, FieldInjectedReference> tracker = track(
 			"(&(objectClass=%s)(objectClass=*.%s))",
 			FieldInjectedReference.class.getName(),
-			"FieldInjectedPrototypeScopedImpl");) {
+			"FieldInjectedPrototypeScopedImpl")) {
 
 			FieldInjectedReference fieldInjectedReference = tracker.waitForService(timeout);
 
@@ -97,7 +100,7 @@ public class CdiBeanTests extends AbstractTestCase {
 		try (CloseableTracker<BeanService, BeanService> tracker = track(
 			"(&(objectClass=%s)(objectClass=*.%s))",
 			BeanService.class.getName(),
-			"FieldInjectedService");) {
+			"FieldInjectedService")) {
 
 			BeanService beanService = tracker.waitForService(timeout);
 
@@ -111,7 +114,7 @@ public class CdiBeanTests extends AbstractTestCase {
 		try (CloseableTracker<BeanService, BeanService> tracker = track(
 			"(&(objectClass=%s)(objectClass=*.%s))",
 			BeanService.class.getName(),
-			"MethodInjectedService");) {
+			"MethodInjectedService")) {
 
 			BeanService beanService = tracker.waitForService(timeout);
 
@@ -140,7 +143,7 @@ public class CdiBeanTests extends AbstractTestCase {
 		try (CloseableTracker<BeanService, BeanService> tracker = track(
 			"(&(objectClass=%s)(objectClass=*.%s))",
 			BeanService.class.getName(),
-			"ServiceWithProperties");) {
+			"ServiceWithProperties")) {
 
 			BeanService beanService = tracker.waitForService(timeout);
 
@@ -217,7 +220,7 @@ public class CdiBeanTests extends AbstractTestCase {
 		try (CloseableTracker<BeanService, BeanService> tracker = track(
 			"(&(objectClass=%s)(objectClass=*.%s))",
 			BeanService.class.getName(),
-			"Instance_ServiceProperties");) {
+			"Instance_ServiceProperties")) {
 
 			BeanService beanService = tracker.waitForService(timeout);
 
@@ -235,7 +238,7 @@ public class CdiBeanTests extends AbstractTestCase {
 		try (CloseableTracker<BeanService, BeanService> tracker = track(
 			"(&(objectClass=%s)(objectClass=*.%s))",
 			BeanService.class.getName(),
-			"Instance_ServiceReference");) {
+			"Instance_ServiceReference")) {
 
 			BeanService beanService = tracker.waitForService(timeout);
 
@@ -252,7 +255,7 @@ public class CdiBeanTests extends AbstractTestCase {
 		try (CloseableTracker<BeanService, BeanService> tracker = track(
 			"(&(objectClass=%s)(objectClass=*.%s))",
 			BeanService.class.getName(),
-			"Instance_Optional");) {
+			"Instance_Optional")) {
 
 			BeanService beanService = tracker.waitForService(timeout);
 
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/ConfigurationTests.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/ConfigurationTests.java
index 93272e0..c72a161 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/ConfigurationTests.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/ConfigurationTests.java
@@ -14,6 +14,7 @@
 
 package org.apache.aries.cdi.test.cases;
 
+import static java.lang.Thread.sleep;
 import static org.junit.Assert.*;
 
 import java.util.Dictionary;
@@ -112,29 +113,40 @@ public class ConfigurationTests extends AbstractTestCase {
 			p2.put("ports", new int[] {80});
 			configurationB.update(p2);
 
-			Thread.sleep(200); // give it a few cycles to make sure the configuration update has gone through
-
-			stA = new ServiceTracker<BeanService, BeanService>(
-				bundleContext, bundleContext.createFilter(
+			stA = new ServiceTracker<>(
+					bundleContext, bundleContext.createFilter(
 					"(&(objectClass=org.apache.aries.cdi.test.interfaces.BeanService)(bean=A))"), null);
 			stA.open(true);
 
 			BeanService<Callable<int[]>> beanService = stA.waitForService(timeout);
 
 			assertNotNull(beanService);
-			assertEquals("blue", beanService.doSomething());
-			assertArrayEquals(new int[] {12, 4567}, beanService.get().call());
 
-			stB = new ServiceTracker<BeanService, BeanService>(
-				bundleContext, bundleContext.createFilter(
+			assertWithRetries(() -> {
+				assertEquals("blue", beanService.doSomething());
+				try {
+					assertArrayEquals(new int[]{12, 4567}, beanService.get().call());
+				} catch (final Exception e) {
+					fail(e.getMessage());
+				}
+			});
+
+			stB = new ServiceTracker<>(
+					bundleContext, bundleContext.createFilter(
 					"(&(objectClass=org.apache.aries.cdi.test.interfaces.BeanService)(bean=B))"), null);
 			stB.open(true);
 
-			beanService = stB.waitForService(timeout);
+			final BeanService<Callable<int[]>> beanServiceB = stB.waitForService(timeout);
+			assertNotNull(beanServiceB);
 
-			assertNotNull(beanService);
-			assertEquals("green", beanService.doSomething());
-			assertArrayEquals(new int[] {80}, beanService.get().call());
+			assertWithRetries(() -> {
+				assertEquals("green", beanServiceB.doSomething());
+				try {
+					assertArrayEquals(new int[]{80}, beanServiceB.get().call());
+				} catch (final Exception e) {
+					fail(e.getMessage());
+				}
+			});
 		}
 		finally {
 			if (configurationA != null) {
@@ -163,6 +175,22 @@ public class ConfigurationTests extends AbstractTestCase {
 		}
 	}
 
+	private void assertWithRetries(final Runnable runnable) throws Exception {
+		int retries = 50;
+		for (int i = 0; i < retries; i++) { // can take some time to let configuration listener get the event and update the bean
+			try {
+				runnable.run();
+				break;
+			} catch (final AssertionError ae) {
+				retries--;
+				if (retries == 0) {
+					throw ae;
+				}
+				sleep(200);
+			}
+		}
+	}
+
 	@Test
 	@SuppressWarnings({ "rawtypes", "unchecked" })
 	public void testOptionalConfiguration() throws Exception {
@@ -192,29 +220,41 @@ public class ConfigurationTests extends AbstractTestCase {
 			configurationC.update(properties);
 
 			stC.close();
-			stC = new ServiceTracker<BeanService, BeanService>(
-				bundleContext, bundleContext.createFilter(
+			stC = new ServiceTracker<>(
+					bundleContext, bundleContext.createFilter(
 					"(&(objectClass=org.apache.aries.cdi.test.interfaces.BeanService)(bean=C)(ports=12))"), null);
 			stC.open(true);
 
-			beanService = stC.waitForService(timeout);
+			final BeanService<Callable<int[]>> beanServiceC = stC.waitForService(timeout);
 
-			assertNotNull(beanService);
-			assertEquals("blue", beanService.doSomething());
-			assertArrayEquals(new int[] {12, 4567}, beanService.get().call());
+			assertNotNull(beanServiceC);
+			assertWithRetries(() -> {
+				assertEquals("blue", beanServiceC.doSomething());
+				try {
+					assertArrayEquals(new int[]{12, 4567}, beanServiceC.get().call());
+				} catch (final Exception e) {
+					fail(e.getMessage());
+				}
+			});
 
 			configurationC.delete();
 
 			stC.close();
-			stC = new ServiceTracker<BeanService, BeanService>(
-				bundleContext, bundleContext.createFilter(
+			stC = new ServiceTracker<>(
+					bundleContext, bundleContext.createFilter(
 					"(&(objectClass=org.apache.aries.cdi.test.interfaces.BeanService)(bean=C)(!(ports=*)))"), null);
 			stC.open(true);
-			beanService = stC.waitForService(timeout);
+			final BeanService<Callable<int[]>> beanServiceC2 = stC.waitForService(timeout);
 
 			assertNotNull(beanService);
-			assertEquals("blue", beanService.doSomething());
-			assertArrayEquals(new int[] {35777}, beanService.get().call());
+			assertWithRetries(() -> {
+				assertEquals("blue", beanServiceC2.doSomething());
+				try {
+					assertArrayEquals(new int[] {35777}, beanServiceC2.get().call());
+				} catch (final Exception e) {
+					fail(e.getMessage());
+				}
+			});
 		}
 		finally {
 			if (configurationC != null) {
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/OSGiBeanDescriptorTests.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/OSGiBeanDescriptorTests.java
index 9446b0e..c8d8233 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/OSGiBeanDescriptorTests.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/OSGiBeanDescriptorTests.java
@@ -14,7 +14,8 @@
 
 package org.apache.aries.cdi.test.cases;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 
 import java.util.Set;
 


[aries-cdi] 22/27: use a base bndrun to avoid duplication

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rotty3000 pushed a commit to branch rotty3000/cdi-spi
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit 874aaab50a52c319efff7195a3c0f2bf73e0c9e8
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Sun Nov 24 15:54:52 2019 -0500

    use a base bndrun to avoid duplication
    
    Signed-off-by: Raymond Augé <ro...@apache.org>
---
 cdi-itests/base-itest.bndrun | 38 ++++++++++++++++++++++++++++++++++++++
 cdi-itests/owb-itest.bndrun  | 25 +------------------------
 cdi-itests/weld-itest.bndrun | 18 +-----------------
 3 files changed, 40 insertions(+), 41 deletions(-)

diff --git a/cdi-itests/base-itest.bndrun b/cdi-itests/base-itest.bndrun
new file mode 100644
index 0000000..cbf4ddb
--- /dev/null
+++ b/cdi-itests/base-itest.bndrun
@@ -0,0 +1,38 @@
+#    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.
+
+#-runjdb: 8000
+
+-standalone: true
+-runee: JavaSE-1.8
+-runfw: org.eclipse.osgi
+-runproperties: \
+	eclipse.log.enabled=false,\
+	logback.configurationFile=file:${.}/logback.xml,\
+	org.osgi.service.http.port=0,\
+	osgi.console=,\
+	tck.config.test.javaconfig.converter.stringvalues=foo
+
+-resolve.effective: resolve, active
+
+-runpath: \
+	ch.qos.logback.classic,\
+	ch.qos.logback.core,\
+	org.apache.felix.logback,\
+	slf4j.api
+
+-runsystempackages: \
+	org.slf4j;version=1.7.25,\
+	org.slf4j.event;version=1.7.25,\
+	org.slf4j.helpers;version=1.7.25,\
+	org.slf4j.spi;version=1.7.25,\
+	sun.misc
diff --git a/cdi-itests/owb-itest.bndrun b/cdi-itests/owb-itest.bndrun
index 7636162..183d25f 100644
--- a/cdi-itests/owb-itest.bndrun
+++ b/cdi-itests/owb-itest.bndrun
@@ -10,19 +10,9 @@
 #    See the License for the specific language governing permissions and
 #    limitations under the License.
 
+-include: base-itest.bndrun
 #-runjdb: 8000
 
--standalone: true
--runee: JavaSE-1.8
--runfw: org.eclipse.osgi
--runproperties: \
-	eclipse.log.enabled=false,\
-	logback.configurationFile=file:${.}/logback.xml,\
-	org.osgi.service.http.port=0,\
-	osgi.console=
-
--resolve.effective: resolve, active
-
 -runrequires: \
 	osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.owb)',\
 	osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.itests)',\
@@ -33,19 +23,6 @@
 	osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.weld)',\
 	osgi.identity;filter:='(osgi.identity=org.jboss.spec.*)'
 
--runpath: \
-	ch.qos.logback.classic,\
-	ch.qos.logback.core,\
-	org.apache.felix.logback,\
-	slf4j.api
-
--runsystempackages: \
-	org.slf4j;version=1.7.25,\
-	org.slf4j.event;version=1.7.25,\
-	org.slf4j.helpers;version=1.7.25,\
-	org.slf4j.spi;version=1.7.25,\
-	sun.misc
-
 -runbundles: \
 	biz.aQute.junit;version='[4.3.1,4.3.2)',\
 	javax.servlet.jsp-api;version='[2.3.3,2.3.4)',\
diff --git a/cdi-itests/weld-itest.bndrun b/cdi-itests/weld-itest.bndrun
index 3b4c242..e452bf3 100644
--- a/cdi-itests/weld-itest.bndrun
+++ b/cdi-itests/weld-itest.bndrun
@@ -10,19 +10,9 @@
 #    See the License for the specific language governing permissions and
 #    limitations under the License.
 
+-include: base-itest.bndrun
 #-runjdb: 8000
 
--standalone: true
--runee: JavaSE-1.8
--runfw: org.eclipse.osgi
--runproperties: \
-	eclipse.log.enabled=false,\
-	logback.configurationFile=file:${.}/logback.xml,\
-	org.osgi.service.http.port=0,\
-	osgi.console=
-
--resolve.effective: resolve, active
-
 -runrequires: \
 	osgi.identity;filter:='(osgi.identity=javax.ejb-api)',\
 	osgi.identity;filter:='(osgi.identity=javax.transaction-api)',\
@@ -35,12 +25,6 @@
 	osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.owb)',\
 	osgi.identity;filter:='(osgi.identity=org.jboss.spec.*)'
 
--runpath: \
-	ch.qos.logback.classic,\
-	ch.qos.logback.core,\
-	org.apache.felix.logback,\
-	slf4j.api
-
 -runsystempackages: \
 	org.slf4j;version=1.7.25,\
 	org.slf4j.event;version=1.7.25,\


[aries-cdi] 10/27: always use a new classloader with each cdi container instance

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rotty3000 pushed a commit to branch rotty3000/cdi-spi
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit a10177649bdf27a3cddb17bcf5a51d0e60d712cb
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Fri Nov 22 15:20:42 2019 -0500

    always use a new classloader with each cdi container instance
    
    Signed-off-by: Raymond Augé <ro...@apache.org>
---
 .../internal/container/ContainerBootstrap.java         |  4 +++-
 .../container/internal/container/ContainerState.java   | 11 +----------
 .../container/internal/loader/BundleClassLoader.java   | 18 +++++++++---------
 3 files changed, 13 insertions(+), 20 deletions(-)

diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerBootstrap.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerBootstrap.java
index 4d573da..5b63569 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerBootstrap.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerBootstrap.java
@@ -27,6 +27,7 @@ import javax.enterprise.inject.spi.Extension;
 
 import org.apache.aries.cdi.container.internal.container.Op.Mode;
 import org.apache.aries.cdi.container.internal.container.Op.Type;
+import org.apache.aries.cdi.container.internal.loader.BundleClassLoader;
 import org.apache.aries.cdi.container.internal.model.ExtendedExtensionDTO;
 import org.apache.aries.cdi.container.internal.model.FactoryComponent;
 import org.apache.aries.cdi.container.internal.model.OSGiBean;
@@ -105,7 +106,8 @@ public class ContainerBootstrap extends Phase {
 			_log.debug(log -> log.debug("CCR container startup for {}", bundle()));
 
 			_seContainer = _seContainerInitializerInstance
-				.setClassLoader(containerState.classLoader())
+				// always use a new class loader
+				.setClassLoader(new BundleClassLoader(containerState.bundle(), containerState.extenderBundle()))
 				.addBeanClasses(containerState.beansModel().getOSGiBeans().stream().map(OSGiBean::getBeanClass).toArray(Class<?>[]::new))
 				.setProperties(containerState.containerComponentTemplateDTO().properties)
 				.addProperty(BEANS_XML_PROPERTY, containerState.beansModel().getBeansXml())
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java
index bd3a8a2..2a9d130 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java
@@ -183,7 +183,7 @@ public class ContainerState {
 
 		_containerDTO.template.components.add(_containerComponentTemplateDTO);
 
-		_aggregateClassLoader = new BundleClassLoader(getBundles(_bundle, _extenderBundle));
+		_aggregateClassLoader = new BundleClassLoader(_bundle, _extenderBundle);
 
 		_beansModel = new BeansModelBuilder(this, _aggregateClassLoader, bundleWiring, cdiAttributes).build();
 
@@ -359,15 +359,6 @@ public class ContainerState {
 		return promise;
 	}
 
-	private static List<Bundle> getBundles(Bundle bundle, Bundle extenderBundle) {
-		List<Bundle> bundles = new ArrayList<>();
-
-		bundles.add(bundle);
-		bundles.add(extenderBundle);
-
-		return bundles;
-	}
-
 	private final BundleClassLoader _aggregateClassLoader;
 	private volatile Deferred<BeanManager> _beanManagerDeferred;
 	private final BeansModel _beansModel;
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/loader/BundleClassLoader.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/loader/BundleClassLoader.java
index bf8f863..404681a 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/loader/BundleClassLoader.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/loader/BundleClassLoader.java
@@ -24,26 +24,26 @@ import java.util.Enumeration;
 import java.util.List;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.function.Function;
 import java.util.function.Predicate;
 
 import org.apache.aries.cdi.spi.loader.SpiLoader;
 import org.osgi.framework.Bundle;
 
-public class BundleClassLoader extends SpiLoader {
+public final class BundleClassLoader extends SpiLoader {
 
-	public BundleClassLoader(List<Bundle> bundles) {
-		if (bundles.isEmpty()) {
-			throw new IllegalArgumentException(
-				"At least one bundle is required");
-		}
-
-		_bundles = bundles;
+	public BundleClassLoader(Bundle cdiBundle, Bundle extenderBundle) {
+		_bundles.add(requireNonNull(cdiBundle));
+		_bundles.add(requireNonNull(extenderBundle));
 	}
 
 	@Override
 	public URL findResource(String name) {
 		for (Bundle bundle : _bundles) {
+			if ((bundle.getState() & Bundle.UNINSTALLED) == Bundle.UNINSTALLED) {
+				continue;
+			}
 			URL url = bundle.getResource(name);
 
 			if (url != null) {
@@ -212,7 +212,7 @@ public class BundleClassLoader extends SpiLoader {
 		}
 	}
 
-	private final List<Bundle> _bundles;
+	private final List<Bundle> _bundles = new CopyOnWriteArrayList<>();
 	private final ConcurrentMap<String, Class<?>> _cache = new ConcurrentHashMap<>();
 	private volatile Predicate<String> classPredicate;
 	private volatile Function<String, Class<?>> classFunction;


[aries-cdi] 21/27: make sure @ApplicationScoped services are published on the right thread

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rotty3000 pushed a commit to branch rotty3000/cdi-spi
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit 7b7826296481019112417ccbf80af53d8e6e0533
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Sun Nov 24 15:53:55 2019 -0500

    make sure @ApplicationScoped services are published on the right thread
    
    Signed-off-by: Raymond Augé <ro...@apache.org>
---
 .../org/apache/aries/cdi/container/internal/container/Op.java     | 2 +-
 .../aries/cdi/container/internal/container/RuntimeExtension.java  | 8 ++++----
 .../cdi/container/internal/phase/ContainerBootstrapTest.java      | 2 +-
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Op.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Op.java
index 48c0380..5ff43cd 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Op.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Op.java
@@ -28,7 +28,7 @@ public class Op {
 		CONTAINER_COMPONENT,
 		CONTAINER_FIRE_EVENTS,
 		CONTAINER_INSTANCE,
-		CONTAINER_PUBLISH_SERVICES,
+		CONTAINER_INIT_COMPONENTS,
 		REFERENCES,
 		EXTENSION,
 		FACTORY_ACTIVATOR,
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/RuntimeExtension.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/RuntimeExtension.java
index e5927c2..777ac6a 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/RuntimeExtension.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/RuntimeExtension.java
@@ -226,11 +226,11 @@ public class RuntimeExtension implements Extension {
 
 		ComponentDTO componentDTO = _containerState.containerDTO().components.get(0);
 
+		registerServices(componentDTO, bm);
+
 		_containerState.submit(
-			Op.of(Mode.OPEN, Type.CONTAINER_PUBLISH_SERVICES, _containerState.id()),
-			() -> registerServices(componentDTO, bm)
-		).then(
-			s -> initComponents()
+			Op.of(Mode.OPEN, Type.CONTAINER_INIT_COMPONENTS, _containerState.id()),
+			this::initComponents
 		).then(s -> {
 			Dictionary<String, Object> properties = new Hashtable<>();
 			properties.put(CDIConstants.CDI_CONTAINER_ID, _containerState.id());
diff --git a/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/ContainerBootstrapTest.java b/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/ContainerBootstrapTest.java
index 24cc74a..fe71a79 100644
--- a/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/ContainerBootstrapTest.java
+++ b/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/ContainerBootstrapTest.java
@@ -103,7 +103,7 @@ public class ContainerBootstrapTest extends BaseCDIBundleTest {
 
 		Promise<Boolean> p0 = containerState.addCallback(
 			(CheckedCallback<Boolean, Boolean>) op -> {
-				return op.mode == Op.Mode.OPEN && op.type == Op.Type.CONTAINER_PUBLISH_SERVICES;
+				return op.mode == Op.Mode.OPEN && op.type == Op.Type.CONTAINER_INIT_COMPONENTS;
 			}
 		);
 


[aries-cdi] 07/27: missing spi package export

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rotty3000 pushed a commit to branch rotty3000/cdi-spi
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit c3b157faa46c29e37eecae0434d4deac5ddcd895
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Fri Nov 22 12:32:20 2019 -0500

    missing spi package export
    
    Signed-off-by: Raymond Augé <ro...@apache.org>
---
 .../java/org/apache/aries/cdi/spi/package-info.java     | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/cdi-spi/src/main/java/org/apache/aries/cdi/spi/package-info.java b/cdi-spi/src/main/java/org/apache/aries/cdi/spi/package-info.java
new file mode 100644
index 0000000..8f3c546
--- /dev/null
+++ b/cdi-spi/src/main/java/org/apache/aries/cdi/spi/package-info.java
@@ -0,0 +1,17 @@
+/**
+ * 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.
+ */
+
+@org.osgi.annotation.bundle.Export
+@org.osgi.annotation.versioning.Version("1.0.0")
+package org.apache.aries.cdi.spi;


[aries-cdi] 24/27: mp-config extension

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rotty3000 pushed a commit to branch rotty3000/cdi-spi
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit df6d32119095a0bc414e4c0a78820627032fa3f4
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Sun Nov 24 15:57:17 2019 -0500

    mp-config extension
    
    Signed-off-by: Raymond Augé <ro...@apache.org>
---
 cdi-bom/pom.xml                                    |   6 +
 cdi-extension-mp-config/pom.xml                    | 156 +++++++++++++++++++++
 .../apache/aries/cdi/extension/mp/config/BB.java   |  60 ++++++++
 .../mp/config/StubConfigProviderResolver.java      |  24 ++++
 .../cdi/extension/mp/config/StubExtension.java     |  52 +++++++
 .../cdi/extension/mp/config/package-info.java      |  39 ++++++
 pom.xml                                            |  14 ++
 7 files changed, 351 insertions(+)

diff --git a/cdi-bom/pom.xml b/cdi-bom/pom.xml
index c383257..29f8f16 100644
--- a/cdi-bom/pom.xml
+++ b/cdi-bom/pom.xml
@@ -71,6 +71,12 @@
 			</dependency>
 			<dependency>
 				<groupId>org.apache.aries.cdi</groupId>
+				<artifactId>org.apache.aries.cdi.extension.mp-config</artifactId>
+				<version>${project.version}</version>
+				<scope>compile</scope>
+			</dependency>
+			<dependency>
+				<groupId>org.apache.aries.cdi</groupId>
 				<artifactId>org.apache.aries.cdi.extra</artifactId>
 				<version>${project.version}</version>
 				<scope>compile</scope>
diff --git a/cdi-extension-mp-config/pom.xml b/cdi-extension-mp-config/pom.xml
new file mode 100644
index 0000000..eb7968d
--- /dev/null
+++ b/cdi-extension-mp-config/pom.xml
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<groupId>org.apache.aries.cdi</groupId>
+		<artifactId>org.apache.aries.cdi</artifactId>
+		<version>1.0.3-SNAPSHOT</version>
+		<relativePath>..</relativePath>
+	</parent>
+
+	<properties>
+		<mp.config.version>1.3</mp.config.version>
+		<byte.buddy.version>1.10.3</byte.buddy.version>
+	</properties>
+
+	<artifactId>org.apache.aries.cdi.extension.mp-config</artifactId>
+	<name>Apache Aries CDI - MicroProfile Config ${mp.config.version} Using Apache Geronimo</name>
+	<description>Apache Aries CDI - MicroProfile Config ${mp.config.version} Using Apache Geronimo</description>
+
+	<licenses>
+		<license>
+			<name>ASL 2.0</name>
+			<url>https://www.apache.org/licenses/LICENSE-2.0</url>
+		</license>
+	</licenses>
+
+	<scm>
+		<connection>scm:git:git@github.com:apache/aries-cdi.git</connection>
+		<developerConnection>scm:git:git@github.com:apache/aries-cdi.git</developerConnection>
+		<tag>HEAD</tag>
+		<url>https://github.com/apache/aries-cdi</url>
+	</scm>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>biz.aQute.bnd</groupId>
+				<artifactId>bnd-maven-plugin</artifactId>
+				<configuration>
+					<bnd><![CDATA[
+						Export-Package: org.eclipse.microprofile.config.*
+						Import-Package: \
+							!net.bytebuddy.*,\
+							!org.osgi.annotation.bundle.*,\
+							*
+						-includepackage: org.apache.geronimo.config.*
+						-cdiannotations:
+						-noclassforname: true
+						-fixupmessages: "Split package...";is:=ignore
+					]]></bnd>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>net.bytebuddy</groupId>
+				<artifactId>byte-buddy-maven-plugin</artifactId>
+				<version>${byte.buddy.version}</version>
+				<executions>
+					<execution>
+						<goals>
+							<goal>transform</goal>
+						</goals>
+					</execution>
+				</executions>
+				<configuration>
+					<transformations>
+						<transformation>
+							<plugin>org.apache.aries.cdi.extension.mp.config.BB</plugin>
+							<arguments>
+								<argument>
+									<index>1</index>
+									<value>${mp.config.version}</value>
+								</argument>
+							</arguments>
+						</transformation>
+					</transformations>
+				</configuration>
+				<dependencies>
+					<dependency>
+						<groupId>org.osgi</groupId>
+						<artifactId>osgi.annotation</artifactId>
+						<version>7.0.0</version>
+					</dependency>
+				</dependencies>
+			</plugin>
+		</plugins>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>biz.aQute.bnd</groupId>
+			<artifactId>biz.aQute.bnd.annotation</artifactId>
+			<version>${bnd.version}</version>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.geronimo.specs</groupId>
+			<artifactId>geronimo-annotation_1.3_spec</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.geronimo.specs</groupId>
+			<artifactId>geronimo-atinject_1.0_spec</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.geronimo.specs</groupId>
+			<artifactId>geronimo-jcdi_2.0_spec</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.geronimo.config</groupId>
+			<artifactId>geronimo-config-impl</artifactId>
+			<version>1.2.2</version>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.osgi</groupId>
+			<artifactId>org.osgi.namespace.service</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.osgi</groupId>
+			<artifactId>org.osgi.service.cdi</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.osgi</groupId>
+			<artifactId>osgi.annotation</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.osgi</groupId>
+			<artifactId>osgi.core</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>net.bytebuddy</groupId>
+			<artifactId>byte-buddy</artifactId>
+			<version>${byte.buddy.version}</version>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+
+</project>
\ No newline at end of file
diff --git a/cdi-extension-mp-config/src/main/java/org/apache/aries/cdi/extension/mp/config/BB.java b/cdi-extension-mp-config/src/main/java/org/apache/aries/cdi/extension/mp/config/BB.java
new file mode 100644
index 0000000..1de5285
--- /dev/null
+++ b/cdi-extension-mp-config/src/main/java/org/apache/aries/cdi/extension/mp/config/BB.java
@@ -0,0 +1,60 @@
+/**
+ * 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.extension.mp.config;
+
+import java.io.IOException;
+
+import org.osgi.annotation.bundle.Requirement;
+import org.osgi.service.cdi.CDIConstants;
+
+import net.bytebuddy.build.BuildLogger;
+import net.bytebuddy.build.Plugin;
+import net.bytebuddy.description.annotation.AnnotationDescription;
+import net.bytebuddy.description.type.TypeDescription;
+import net.bytebuddy.dynamic.ClassFileLocator;
+import net.bytebuddy.dynamic.DynamicType.Builder;
+
+public class BB implements Plugin {
+
+	private final BuildLogger buildLogger;
+	private final String mpVersion;
+
+	public BB(BuildLogger buildLogger, String mpVersion) {
+		this.buildLogger = buildLogger;
+		this.mpVersion = mpVersion;
+	}
+
+	@Override
+	public boolean matches(TypeDescription target) {
+		return target.getName().equals("org.eclipse.microprofile.config.inject.ConfigProperty");
+	}
+
+	@Override
+	public Builder<?> apply(Builder<?> builder, TypeDescription typeDescription, ClassFileLocator cfl) {
+		buildLogger.info("Processing class: " + typeDescription.getActualName());
+
+		return builder.annotateType(
+			AnnotationDescription.Builder.ofType(Requirement.class)
+				.define("namespace", CDIConstants.CDI_EXTENSION_PROPERTY)
+				.define("name", "eclipse.microprofile.config")
+				.define("version", mpVersion)
+				.build());
+	}
+
+	@Override
+	public void close() throws IOException {
+	}
+
+}
diff --git a/cdi-extension-mp-config/src/main/java/org/apache/aries/cdi/extension/mp/config/StubConfigProviderResolver.java b/cdi-extension-mp-config/src/main/java/org/apache/aries/cdi/extension/mp/config/StubConfigProviderResolver.java
new file mode 100644
index 0000000..63245e5
--- /dev/null
+++ b/cdi-extension-mp-config/src/main/java/org/apache/aries/cdi/extension/mp/config/StubConfigProviderResolver.java
@@ -0,0 +1,24 @@
+/**
+ * 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.extension.mp.config;
+
+import org.apache.geronimo.config.DefaultConfigProvider;
+import org.eclipse.microprofile.config.spi.ConfigProviderResolver;
+
+import aQute.bnd.annotation.spi.ServiceProvider;
+
+@ServiceProvider(ConfigProviderResolver.class)
+public class StubConfigProviderResolver extends DefaultConfigProvider {
+}
diff --git a/cdi-extension-mp-config/src/main/java/org/apache/aries/cdi/extension/mp/config/StubExtension.java b/cdi-extension-mp-config/src/main/java/org/apache/aries/cdi/extension/mp/config/StubExtension.java
new file mode 100644
index 0000000..84040cd
--- /dev/null
+++ b/cdi-extension-mp-config/src/main/java/org/apache/aries/cdi/extension/mp/config/StubExtension.java
@@ -0,0 +1,52 @@
+/**
+ * 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.extension.mp.config;
+
+import static org.apache.aries.cdi.extension.mp.config.StubExtension.EXTENSION_NAME;
+import static org.osgi.service.cdi.CDIConstants.CDI_EXTENSION_PROPERTY;
+
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.AfterBeanDiscovery;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.Extension;
+
+import org.apache.geronimo.config.cdi.ConfigExtension;
+import org.apache.geronimo.config.cdi.ConfigInjectionProducer;
+
+import aQute.bnd.annotation.spi.ServiceProvider;
+
+@ServiceProvider(
+	attribute = {
+		CDI_EXTENSION_PROPERTY + "=" + EXTENSION_NAME,
+		"service.scope=prototype",
+		"service.vendor=Apache Software Foundation",
+		"version:Version=1.3.0"
+	},
+	effective = "active",
+	uses = Extension.class,
+	value = Extension.class
+)
+public class StubExtension extends ConfigExtension {
+
+	public final static String EXTENSION_NAME = "eclipse.microprofile.config";
+
+	@Override
+	public void registerConfigProducer(@Observes AfterBeanDiscovery abd, BeanManager bm) {
+		abd.addBean().beanClass(ConfigInjectionProducer.class).createWith(c -> new ConfigInjectionProducer());
+
+		super.registerConfigProducer(abd, bm);
+	}
+
+}
diff --git a/cdi-extension-mp-config/src/main/java/org/apache/aries/cdi/extension/mp/config/package-info.java b/cdi-extension-mp-config/src/main/java/org/apache/aries/cdi/extension/mp/config/package-info.java
new file mode 100644
index 0000000..1980043
--- /dev/null
+++ b/cdi-extension-mp-config/src/main/java/org/apache/aries/cdi/extension/mp/config/package-info.java
@@ -0,0 +1,39 @@
+/**
+ * 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.
+ */
+
+@Capability(
+	attribute = "objectClass:List<String>=javax.enterprise.inject.spi.Extension",
+	namespace = SERVICE_NAMESPACE
+)
+@Capability(
+	namespace = CDI_EXTENSION_PROPERTY,
+	name = EXTENSION_NAME,
+	uses= {
+		javax.annotation.Priority.class,
+		javax.enterprise.event.Observes.class,
+		Extension.class
+	},
+	version = "1.3" // TODO ?maybe read this from pom property?
+)
+@RequireCDIExtender
+package org.apache.aries.cdi.extension.mp.config;
+
+import static org.apache.aries.cdi.extension.mp.config.StubExtension.EXTENSION_NAME;
+import static org.osgi.namespace.service.ServiceNamespace.SERVICE_NAMESPACE;
+import static org.osgi.service.cdi.CDIConstants.CDI_EXTENSION_PROPERTY;
+
+import javax.enterprise.inject.spi.Extension;
+
+import org.osgi.annotation.bundle.Capability;
+import org.osgi.service.cdi.annotations.RequireCDIExtender;
diff --git a/pom.xml b/pom.xml
index 1ccf7f5..f567cc4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -63,6 +63,7 @@
 		<module>cdi-extension-el-jsp</module>
 		<module>cdi-extension-http</module>
 		<module>cdi-extension-jndi</module>
+		<module>cdi-extension-mp-config</module>
 		<module>cdi-owb</module>
 		<module>cdi-weld</module>
 		<module>cdi-bom</module>
@@ -371,6 +372,19 @@
 										</ignore>
 									</action>
 								</pluginExecution>
+								<pluginExecution>
+									<pluginExecutionFilter>
+										<groupId>net.bytebuddy</groupId>
+										<artifactId>byte-buddy-maven-plugin</artifactId>
+										<versionRange>[${byte.buddy.version},)</versionRange>
+										<goals>
+											<goal>transform</goal>
+										</goals>
+									</pluginExecutionFilter>
+									<action>
+										<execute />
+									</action>
+								</pluginExecution>
 							</pluginExecutions>
 						</lifecycleMappingMetadata>
 					</configuration>