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/12/02 16:32:24 UTC

[aries-cdi] branch master updated: ARIES-1952 SpiLoader should implement BundleReference

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

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


The following commit(s) were added to refs/heads/master by this push:
     new eb98492  ARIES-1952 SpiLoader should implement BundleReference
     new aeecc86  Merge pull request #8 from rotty3000/ARIES-1952
eb98492 is described below

commit eb9849208b6dd5c8a9d73fbc91ce1e1a3df041b1
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Mon Dec 2 11:04:58 2019 -0500

    ARIES-1952 SpiLoader should implement BundleReference
    
    Signed-off-by: Raymond Augé <ro...@apache.org>
---
 .../cdi/container/internal/loader/BundleClassLoader.java | 16 +++++++++++++---
 .../java/org/apache/aries/cdi/spi/loader/SpiLoader.java  |  3 ++-
 2 files changed, 15 insertions(+), 4 deletions(-)

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 404681a..14b2876 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
@@ -34,13 +34,19 @@ import org.osgi.framework.Bundle;
 public final class BundleClassLoader extends SpiLoader {
 
 	public BundleClassLoader(Bundle cdiBundle, Bundle extenderBundle) {
+		_bundle = cdiBundle;
 		_bundles.add(requireNonNull(cdiBundle));
 		_bundles.add(requireNonNull(extenderBundle));
 	}
 
 	@Override
+	public Bundle getBundle() {
+		return _bundle;
+	}
+
+	@Override
 	public URL findResource(String name) {
-		for (Bundle bundle : _bundles) {
+		for (Bundle bundle : getBundles()) {
 			if ((bundle.getState() & Bundle.UNINSTALLED) == Bundle.UNINSTALLED) {
 				continue;
 			}
@@ -56,7 +62,7 @@ public final class BundleClassLoader extends SpiLoader {
 
 	@Override
 	public Enumeration<URL> findResources(String name) {
-		for (Bundle bundle : _bundles) {
+		for (Bundle bundle : getBundles()) {
 			if ((bundle.getState() & Bundle.UNINSTALLED) == Bundle.UNINSTALLED) {
 				continue;
 			}
@@ -80,6 +86,9 @@ public final class BundleClassLoader extends SpiLoader {
 
 	@Override
 	public List<Bundle> getBundles() {
+		if (!_bundles.contains(_bundle)) {
+			_bundles.add(0, _bundle);
+		}
 		return _bundles;
 	}
 
@@ -118,7 +127,7 @@ public final class BundleClassLoader extends SpiLoader {
 		Object classLoadingLock = getClassLoadingLock(name);
 
 		synchronized (classLoadingLock) {
-			for (Bundle bundle : _bundles) {
+			for (Bundle bundle : getBundles()) {
 				if ((bundle.getState() & Bundle.UNINSTALLED) == Bundle.UNINSTALLED) {
 					continue;
 				}
@@ -212,6 +221,7 @@ public final class BundleClassLoader extends SpiLoader {
 		}
 	}
 
+	private final Bundle _bundle;
 	private final List<Bundle> _bundles = new CopyOnWriteArrayList<>();
 	private final ConcurrentMap<String, Class<?>> _cache = new ConcurrentHashMap<>();
 	private volatile Predicate<String> classPredicate;
diff --git a/cdi-spi/src/main/java/org/apache/aries/cdi/spi/loader/SpiLoader.java b/cdi-spi/src/main/java/org/apache/aries/cdi/spi/loader/SpiLoader.java
index 69360ad..c434983 100644
--- a/cdi-spi/src/main/java/org/apache/aries/cdi/spi/loader/SpiLoader.java
+++ b/cdi-spi/src/main/java/org/apache/aries/cdi/spi/loader/SpiLoader.java
@@ -22,8 +22,9 @@ import java.util.function.Function;
 import java.util.function.Predicate;
 
 import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleReference;
 
-public abstract class SpiLoader extends ClassLoader {
+public abstract class SpiLoader extends ClassLoader implements BundleReference {
 
 	public abstract List<Bundle> getBundles();