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 7b31afc  made sure dependencies of a bundled unit are loaded with the 
correct classloader
7b31afc is described below

commit 7b31afc95460eade4817445d2c92a201deff7dc9
Author: Radu Cotescu <[email protected]>
AuthorDate: Fri Sep 28 13:57:09 2018 +0200

    made sure dependencies of a bundled unit are loaded with the correct 
classloader
---
 pom.xml                                             |  7 +++++++
 .../sightly/impl/engine/SightlyScriptEngine.java    | 12 ++++++++----
 .../impl/engine/extension/use/JavaUseProvider.java  | 21 ++++++++++++++++-----
 3 files changed, 31 insertions(+), 9 deletions(-)

diff --git a/pom.xml b/pom.xml
index ec5993b..aa9a022 100644
--- a/pom.xml
+++ b/pom.xml
@@ -182,6 +182,13 @@
             <scope>provided</scope>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.scripting.resolver</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+            <scope>provided</scope>
+        </dependency>
+
         <!-- OSGI -->
         <dependency>
             <groupId>org.osgi</groupId>
diff --git 
a/src/main/java/org/apache/sling/scripting/sightly/impl/engine/SightlyScriptEngine.java
 
b/src/main/java/org/apache/sling/scripting/sightly/impl/engine/SightlyScriptEngine.java
index 8c5e9ed..f757be5 100644
--- 
a/src/main/java/org/apache/sling/scripting/sightly/impl/engine/SightlyScriptEngine.java
+++ 
b/src/main/java/org/apache/sling/scripting/sightly/impl/engine/SightlyScriptEngine.java
@@ -30,13 +30,11 @@ import javax.script.ScriptEngine;
 import javax.script.ScriptEngineFactory;
 import javax.script.ScriptException;
 
-import org.apache.sling.api.SlingHttpServletRequest;
-import org.apache.sling.api.scripting.SlingBindings;
-import org.apache.sling.api.scripting.SlingScriptConstants;
 import org.apache.sling.api.scripting.SlingScriptHelper;
 import org.apache.sling.scripting.api.AbstractSlingScriptEngine;
 import org.apache.sling.scripting.api.ScriptNameAware;
 import 
org.apache.sling.scripting.api.resource.ScriptingResourceResolverProvider;
+import org.apache.sling.scripting.resolver.BundledRenderUnit;
 import org.apache.sling.scripting.sightly.SightlyException;
 import org.apache.sling.scripting.sightly.compiler.CompilationResult;
 import org.apache.sling.scripting.sightly.compiler.CompilationUnit;
@@ -93,8 +91,14 @@ public class SightlyScriptEngine extends 
AbstractSlingScriptEngine implements Co
     public Object eval(Reader reader, ScriptContext scriptContext) throws 
ScriptException {
         checkArguments(reader, scriptContext);
         try {
-            Object renderUnit = scriptContext.getAttribute("precompiled.unit", 
SlingScriptConstants.SLING_SCOPE);
             SightlyCompiledScript compiledScript;
+            Bindings bindings = 
scriptContext.getBindings(ScriptContext.ENGINE_SCOPE);
+            Object bundledRenderUnit = 
bindings.get(BundledRenderUnit.VARIABLE);
+            Object renderUnit = null;
+            if (bundledRenderUnit instanceof BundledRenderUnit) {
+                renderUnit = ((BundledRenderUnit) bundledRenderUnit).getUnit();
+            }
+
             if (renderUnit instanceof RenderUnit) {
                 compiledScript = new SightlyCompiledScript(this, (RenderUnit) 
renderUnit);
             } else {
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 c0f65ee..8f5aa76 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
@@ -20,7 +20,7 @@ package 
org.apache.sling.scripting.sightly.impl.engine.extension.use;
 
 import java.util.HashMap;
 import java.util.Map;
-import java.util.regex.Pattern;
+
 import javax.script.Bindings;
 import javax.servlet.ServletRequest;
 
@@ -29,6 +29,7 @@ import org.apache.sling.api.adapter.Adaptable;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.scripting.SlingScriptHelper;
 import org.apache.sling.commons.classloader.ClassLoaderWriter;
+import org.apache.sling.scripting.resolver.BundledRenderUnit;
 import 
org.apache.sling.scripting.sightly.impl.engine.SightlyJavaCompilerService;
 import org.apache.sling.scripting.sightly.impl.utils.BindingsUtils;
 import org.apache.sling.scripting.sightly.impl.utils.Patterns;
@@ -37,6 +38,7 @@ import 
org.apache.sling.scripting.sightly.render.RenderContext;
 import org.apache.sling.scripting.sightly.use.ProviderOutcome;
 import org.apache.sling.scripting.sightly.use.UseProvider;
 import org.osgi.framework.Constants;
+import org.osgi.framework.wiring.BundleWiring;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 import org.osgi.service.metatype.annotations.AttributeDefinition;
@@ -93,18 +95,27 @@ public class JavaUseProvider implements UseProvider {
                 return ProviderOutcome.success(result);
             } else {
                 LOG.debug("Attempting to load class {} from the classloader 
cache.", identifier);
-                ClassLoader classLoader = (ClassLoader) 
renderContext.getBindings().get("org.apache.sling.scripting.sightly.render_unit.loader");
-                if (classLoader == null) {
+                BundledRenderUnit bundledRenderUnit = null;
+                ClassLoader classLoader;
+                Object bru = globalBindings.get(BundledRenderUnit.VARIABLE);
+                if (bru instanceof BundledRenderUnit) {
+                    bundledRenderUnit = (BundledRenderUnit) bru;
+                    classLoader = 
bundledRenderUnit.getBundle().adapt(BundleWiring.class).getClassLoader();
+                } else {
                     classLoader = classLoaderWriter.getClassLoader();
                 }
                 Class<?> cls = classLoader.loadClass(identifier);
                 // attempt OSGi service load
-                result = sling.getService(cls);
+                if (bundledRenderUnit != null) {
+                    result = bundledRenderUnit.getService(identifier);
+                } else {
+                    result = sling.getService(cls);
+                }
                 if (result != null) {
                     return ProviderOutcome.success(result);
                 }
                 Object adaptableCandidate = arguments.get(ADAPTABLE);
-                if (adaptableCandidate != null && adaptableCandidate 
instanceof Adaptable) {
+                if (adaptableCandidate instanceof Adaptable) {
                     Adaptable adaptable = (Adaptable) adaptableCandidate;
                     result = adaptable.adaptTo(cls);
                     if (result != null) {

Reply via email to