summaryrefslogtreecommitdiffstats
path: root/jdisc_core
diff options
context:
space:
mode:
authorgjoranv <gv@verizonmedia.com>2019-11-05 10:53:44 +0100
committergjoranv <gv@verizonmedia.com>2019-11-05 10:53:44 +0100
commitd75825d503b8566e66d45b0ef726a1d5834970d7 (patch)
treed6da7f8af45a6bef83823f1ae7068317a5d17e8d /jdisc_core
parent73cbfef0434123f59584f9ed5f5cceac6715adbd (diff)
Reapply "Gjoranv/allow duplicate bundles"
This reverts commit 2ef1e922a1d845b3cd79e9fb329925e7e9896919.
Diffstat (limited to 'jdisc_core')
-rw-r--r--jdisc_core/src/main/java/com/yahoo/jdisc/application/OsgiFramework.java18
-rw-r--r--jdisc_core/src/main/java/com/yahoo/jdisc/core/BundleCollisionHook.java3
-rw-r--r--jdisc_core/src/main/java/com/yahoo/jdisc/core/FelixFramework.java10
-rw-r--r--jdisc_core/src/main/java/com/yahoo/jdisc/test/NonWorkingOsgiFramework.java9
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() {
}