SLING-9406: Add bundled script support to the servlets resolver

* provide the BundleContext of the active bundle to the BundledRenderUnitFinder
diff --git a/src/main/java/org/apache/sling/servlets/resolver/bundle/tracker/BundledRenderUnit.java b/src/main/java/org/apache/sling/servlets/resolver/bundle/tracker/BundledRenderUnit.java
index 14aba65..238ebcd 100644
--- a/src/main/java/org/apache/sling/servlets/resolver/bundle/tracker/BundledRenderUnit.java
+++ b/src/main/java/org/apache/sling/servlets/resolver/bundle/tracker/BundledRenderUnit.java
@@ -28,6 +28,7 @@
 import org.jetbrains.annotations.Nullable;
 import org.osgi.annotation.versioning.ConsumerType;
 import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
 
 /**
  * <p>
@@ -78,6 +79,12 @@
     @NotNull Bundle getBundle();
 
     /**
+     * Returns the {@link BundleContext} to use for this script or precompiled script. This method can be useful for getting an
+     * instance of the publishing bundle's context, when needed to load dependencies at run time.
+     */
+    @NotNull BundleContext getBundleContext();
+
+    /**
      * Returns the {@code Set} of {@link TypeProvider}s which are related to this unit.
      *
      * @return the set of providers; if the unit doesn't have any inheritance chains, then the set will contain only one {@link
diff --git a/src/main/java/org/apache/sling/servlets/resolver/bundle/tracker/BundledRenderUnitFinder.java b/src/main/java/org/apache/sling/servlets/resolver/bundle/tracker/BundledRenderUnitFinder.java
index 22bd437..66a2fb6 100644
--- a/src/main/java/org/apache/sling/servlets/resolver/bundle/tracker/BundledRenderUnitFinder.java
+++ b/src/main/java/org/apache/sling/servlets/resolver/bundle/tracker/BundledRenderUnitFinder.java
@@ -25,6 +25,7 @@
 import org.osgi.annotation.versioning.ConsumerType;
 import org.osgi.annotation.versioning.ProviderType;
 import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
 
 /**
  * The {@code BundledScriptFinder} finds the {@link BundledRenderUnit} corresponding to a certain chain of {@link TypeProvider}s or
@@ -37,6 +38,7 @@
      * Retrieves the best matching {@link BundledRenderUnit} for the provided {@code inheritanceChain}, by scanning all {@link TypeProvider}
      * bundles for the class or script capable of providing a rendering for resource type chain.
      *
+     * @param context             the bundle context to use.
      * @param inheritanceChain    the resource type chain; the set is ordered from the most specific resource type to the most generic one
      * @param allRelatedProviders this is a super set, containing both the {@code inheritanceChain} but also all the required providers; a
      *                            required provider is a provider that's needed by a {@link ResourceType} in order to delegate rendering to
@@ -44,11 +46,12 @@
      * @return a {@link BundledRenderUnit} if one was found, {@code null} otherwise
      */
     @Nullable
-    BundledRenderUnit findUnit(@NotNull Set<TypeProvider> inheritanceChain, @NotNull Set<TypeProvider> allRelatedProviders);
+    BundledRenderUnit findUnit(@NotNull BundleContext context, @NotNull Set<TypeProvider> inheritanceChain, @NotNull Set<TypeProvider> allRelatedProviders);
 
     /**
      * Retrieves a path-based {@link BundledRenderUnit} from the passed {@code provider}.
      *
+     * @param context             the bundle context to use.
      * @param provider            the provider from which to retrieve the unit
      * @param allRelatedProviders this is a super set, containing both the providers connected through an inheritance relationship but also
      *                            all the required providers; a required provider is a provider that's needed by a {@link ResourceType} in
@@ -57,5 +60,5 @@
      * @see BundledRenderUnitCapability#getPath()
      */
     @Nullable
-    BundledRenderUnit findUnit(@NotNull TypeProvider provider, @NotNull Set<TypeProvider> allRelatedProviders);
+    BundledRenderUnit findUnit(@NotNull BundleContext context, @NotNull TypeProvider provider, @NotNull Set<TypeProvider> allRelatedProviders);
 }
diff --git a/src/main/java/org/apache/sling/servlets/resolver/bundle/tracker/internal/BundledScriptTracker.java b/src/main/java/org/apache/sling/servlets/resolver/bundle/tracker/internal/BundledScriptTracker.java
index 1954eef..a68f857 100644
--- a/src/main/java/org/apache/sling/servlets/resolver/bundle/tracker/internal/BundledScriptTracker.java
+++ b/src/main/java/org/apache/sling/servlets/resolver/bundle/tracker/internal/BundledScriptTracker.java
@@ -176,12 +176,12 @@
                         }
                         Set<TypeProvider> aggregate =
                                 Stream.concat(inheritanceChain.stream(), requiresChain.stream()).collect(Collectors.toCollection(LinkedHashSet::new));
-                        executable = bundledRenderUnitFinder.findUnit(inheritanceChain, aggregate);
+                        executable = bundledRenderUnitFinder.findUnit(bundle.getBundleContext(), inheritanceChain, aggregate);
                     } else if (StringUtils.isNotEmpty(bundledRenderUnitCapability.getPath()) && StringUtils.isNotEmpty(
                             bundledRenderUnitCapability.getScriptEngineName())) {
                         Set<TypeProvider> aggregate =
                                 Stream.concat(inheritanceChain.stream(), requiresChain.stream()).collect(Collectors.toCollection(LinkedHashSet::new));
-                        executable = bundledRenderUnitFinder.findUnit(baseTypeProvider, aggregate);
+                        executable = bundledRenderUnitFinder.findUnit(bundle.getBundleContext(), baseTypeProvider, aggregate);
                     }
                     List<ServiceRegistration<Servlet>> regs = new ArrayList<>();