diff options
author | gjoranv <gv@verizonmedia.com> | 2019-11-05 10:53:44 +0100 |
---|---|---|
committer | gjoranv <gv@verizonmedia.com> | 2019-11-05 10:53:44 +0100 |
commit | d75825d503b8566e66d45b0ef726a1d5834970d7 (patch) | |
tree | d6da7f8af45a6bef83823f1ae7068317a5d17e8d /jdisc_core | |
parent | 73cbfef0434123f59584f9ed5f5cceac6715adbd (diff) |
Reapply "Gjoranv/allow duplicate bundles"
This reverts commit 2ef1e922a1d845b3cd79e9fb329925e7e9896919.
Diffstat (limited to 'jdisc_core')
4 files changed, 39 insertions, 1 deletions
diff --git a/jdisc_core/src/main/java/com/yahoo/jdisc/application/OsgiFramework.java b/jdisc_core/src/main/java/com/yahoo/jdisc/application/OsgiFramework.java index f5346a21a4f..b1aceb81bc6 100644 --- a/jdisc_core/src/main/java/com/yahoo/jdisc/application/OsgiFramework.java +++ b/jdisc_core/src/main/java/com/yahoo/jdisc/application/OsgiFramework.java @@ -5,6 +5,7 @@ import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; import org.osgi.framework.BundleException; +import java.util.Collection; import java.util.List; /** @@ -13,6 +14,7 @@ import java.util.List; * {@link BundleInstaller} since that provides common convenience methods. * * @author Simon Thoresen Hult + * @author gjoranv */ public interface OsgiFramework { @@ -58,6 +60,8 @@ public interface OsgiFramework { /** * Synchronously refresh all bundles currently loaded. Once this method returns, the * class loaders of all bundles will reflect on the current set of loaded bundles. + * + * NOTE: This method is no longer used by the Jdisc container framework, but kept for completeness. */ void refreshPackages(); @@ -81,6 +85,20 @@ public interface OsgiFramework { List<Bundle> bundles(); /** + * Returns all installed bundles that are visible to the requesting bundle. Bundle visibility + * is controlled via implementations of {@link org.osgi.framework.hooks.bundle.FindHook}; + */ + List<Bundle> getBundles(Bundle requestingBundle); + + /** + * Allows this framework to install duplicates of the given collection of bundles. Duplicate detection + * is handled by the {@link com.yahoo.jdisc.core.BundleCollisionHook}. + * + * @param bundles The bundles to allow duplicates of + */ + void allowDuplicateBundles(Collection<Bundle> bundles); + + /** * This method starts the framework instance. Before this method is called, any call to {@link * #installBundle(String)} or {@link #bundles()} will generate a {@link NullPointerException}. * diff --git a/jdisc_core/src/main/java/com/yahoo/jdisc/core/BundleCollisionHook.java b/jdisc_core/src/main/java/com/yahoo/jdisc/core/BundleCollisionHook.java index 58ad5df9b0d..ae1c81195ce 100644 --- a/jdisc_core/src/main/java/com/yahoo/jdisc/core/BundleCollisionHook.java +++ b/jdisc_core/src/main/java/com/yahoo/jdisc/core/BundleCollisionHook.java @@ -15,6 +15,7 @@ import java.util.HashSet; import java.util.Map; import java.util.Objects; import java.util.Set; +import java.util.logging.Logger; /** * A bundle {@link CollisionHook} that contains a set of bundles that are allowed to collide with @@ -26,6 +27,7 @@ import java.util.Set; * @author gjoranv */ public class BundleCollisionHook implements CollisionHook, EventHook, FindHook { + private static Logger log = Logger.getLogger(BundleCollisionHook.class.getName()); private ServiceRegistration<?> registration; private Map<Bundle, BsnVersion> allowedDuplicates = new HashMap<>(5); @@ -105,6 +107,7 @@ public class BundleCollisionHook implements CollisionHook, EventHook, FindHook { } } } + log.info("Hiding bundles from bundle '" + context.getBundle() + "': " + bundlesToHide); bundles.removeAll(bundlesToHide); } diff --git a/jdisc_core/src/main/java/com/yahoo/jdisc/core/FelixFramework.java b/jdisc_core/src/main/java/com/yahoo/jdisc/core/FelixFramework.java index 19a1707e97c..c14e513fb98 100644 --- a/jdisc_core/src/main/java/com/yahoo/jdisc/core/FelixFramework.java +++ b/jdisc_core/src/main/java/com/yahoo/jdisc/core/FelixFramework.java @@ -117,6 +117,9 @@ public class FelixFramework implements OsgiFramework { return sb.toString(); } + /** + * NOTE: This method is no longer used by the Jdisc container framework, but kept for completeness. + */ @Override public void refreshPackages() { FrameworkWiring wiring = felix.adapt(FrameworkWiring.class); @@ -153,8 +156,13 @@ public class FelixFramework implements OsgiFramework { return Arrays.asList(felix.getBundleContext().getBundles()); } + @Override public List<Bundle> getBundles(Bundle requestingBundle) { - return Arrays.asList(requestingBundle.getBundleContext().getBundles()); + log.fine(() -> "All bundles: " + bundles()); + log.fine(() -> "Getting visible bundles for bundle " + requestingBundle); + List<Bundle> visibleBundles = Arrays.asList(requestingBundle.getBundleContext().getBundles()); + log.fine(() -> "Visible bundles: " + visibleBundles); + return visibleBundles; } public void allowDuplicateBundles(Collection<Bundle> bundles) { diff --git a/jdisc_core/src/main/java/com/yahoo/jdisc/test/NonWorkingOsgiFramework.java b/jdisc_core/src/main/java/com/yahoo/jdisc/test/NonWorkingOsgiFramework.java index 6b129e82a45..0f927aa97d3 100644 --- a/jdisc_core/src/main/java/com/yahoo/jdisc/test/NonWorkingOsgiFramework.java +++ b/jdisc_core/src/main/java/com/yahoo/jdisc/test/NonWorkingOsgiFramework.java @@ -5,6 +5,7 @@ import com.yahoo.jdisc.application.OsgiFramework; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; +import java.util.Collection; import java.util.Collections; import java.util.List; @@ -39,6 +40,14 @@ public class NonWorkingOsgiFramework implements OsgiFramework { } @Override + public List<Bundle> getBundles(Bundle requestingBundle) { + return Collections.emptyList(); + } + + @Override + public void allowDuplicateBundles(Collection<Bundle> bundles) { } + + @Override public void start() { } |