You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ra...@apache.org on 2018/09/19 15:51:12 UTC

[sling-org-apache-sling-scripting-sightly] branch experimental-scripting-resolver updated: allow the usage of a provided classloader

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

radu pushed a commit to branch experimental-scripting-resolver
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-sightly.git


The following commit(s) were added to refs/heads/experimental-scripting-resolver by this push:
     new 4ca98cd  allow the usage of a provided classloader
4ca98cd is described below

commit 4ca98cd13cfe41aab16a3402988564b7ca8b1b4f
Author: Radu Cotescu <ra...@apache.org>
AuthorDate: Wed Sep 19 17:48:26 2018 +0200

    allow the usage of a provided classloader
---
 .../sightly/impl/engine/extension/use/JavaUseProvider.java          | 6 +++++-
 .../scripting/sightly/impl/engine/runtime/RenderContextImpl.java    | 6 ++++++
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/JavaUseProvider.java b/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/JavaUseProvider.java
index 13e95ec..c0f65ee 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/JavaUseProvider.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/JavaUseProvider.java
@@ -93,7 +93,11 @@ public class JavaUseProvider implements UseProvider {
                 return ProviderOutcome.success(result);
             } else {
                 LOG.debug("Attempting to load class {} from the classloader cache.", identifier);
-                Class<?> cls = classLoaderWriter.getClassLoader().loadClass(identifier);
+                ClassLoader classLoader = (ClassLoader) renderContext.getBindings().get("org.apache.sling.scripting.sightly.render_unit.loader");
+                if (classLoader == null) {
+                    classLoader = classLoaderWriter.getClassLoader();
+                }
+                Class<?> cls = classLoader.loadClass(identifier);
                 // attempt OSGi service load
                 result = sling.getService(cls);
                 if (result != null) {
diff --git a/src/main/java/org/apache/sling/scripting/sightly/impl/engine/runtime/RenderContextImpl.java b/src/main/java/org/apache/sling/scripting/sightly/impl/engine/runtime/RenderContextImpl.java
index e70d6e4..648c339 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/impl/engine/runtime/RenderContextImpl.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/impl/engine/runtime/RenderContextImpl.java
@@ -22,6 +22,7 @@ import java.util.Map;
 import javax.script.Bindings;
 import javax.script.ScriptContext;
 
+import org.apache.sling.api.scripting.SlingScriptConstants;
 import org.apache.sling.scripting.sightly.SightlyException;
 import org.apache.sling.scripting.sightly.extension.RuntimeExtension;
 import org.apache.sling.scripting.sightly.impl.engine.ExtensionRegistryService;
@@ -42,6 +43,11 @@ public class RenderContextImpl implements RenderContext {
 
     public RenderContextImpl(ScriptContext scriptContext) {
         bindings = scriptContext.getBindings(ScriptContext.ENGINE_SCOPE);
+        ClassLoader classLoader = (ClassLoader) scriptContext.getAttribute("precompiled.bundle.classloader",
+                SlingScriptConstants.SLING_SCOPE);
+        if (classLoader != null) {
+            bindings.put("org.apache.sling.scripting.sightly.render_unit.loader", classLoader);
+        }
         extensionRegistryService = BindingsUtils.getHelper(bindings).getService(ExtensionRegistryService.class);
     }