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) {