You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 10:11:22 UTC
[sling-org-apache-sling-scripting-sightly-js-provider] 06/24:
SLING-4855 - Add support for Compilable Script Engines in the Sightly JS
Use Provider
This is an automated email from the ASF dual-hosted git repository.
rombert pushed a commit to annotated tag org.apache.sling.scripting.sightly.js.provider-1.0.10
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-sightly-js-provider.git
commit e00f9f548f4e72614614d2e75f212b641bb7fcc8
Author: Radu Cotescu <ra...@apache.org>
AuthorDate: Tue Jul 14 12:01:45 2015 +0000
SLING-4855 - Add support for Compilable Script Engines in the Sightly JS Use Provider
* run Compilable#eval for ScriptEngine implementations that support Compilable
* added JS scripts to the scripts monitored by the ScriptCache implementation provided by Sling
* updated the Sightly tests launchpad to use the bundle versions corresponding to SLING-913, SLING-915
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/scripting/sightly/js-use-provider@1690906 13f79535-47bb-0310-9956-ffa450edef68
---
pom.xml | 8 +++-
.../scripting/sightly/js/impl/JsEnvironment.java | 15 +++++--
.../scripting/sightly/js/impl/JsUseProvider.java | 46 +++++++++++++++++++---
.../sling/scripting/sightly/js/impl/Utils.java | 4 +-
4 files changed, 62 insertions(+), 11 deletions(-)
diff --git a/pom.xml b/pom.xml
index 588584c..f7a08cd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -96,8 +96,14 @@
</dependency>
<dependency>
<groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.scripting.core</artifactId>
+ <version>2.0.29-SNAPSHOT</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.scripting.api</artifactId>
- <version>2.1.0</version>
+ <version>2.1.7-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
diff --git a/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsEnvironment.java b/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsEnvironment.java
index b2d096a..a82b264 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsEnvironment.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsEnvironment.java
@@ -21,8 +21,8 @@ package org.apache.sling.scripting.sightly.js.impl;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
-
import javax.script.Bindings;
+import javax.script.Compilable;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
@@ -36,6 +36,7 @@ import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceUtil;
import org.apache.sling.api.scripting.SlingBindings;
import org.apache.sling.api.scripting.SlingScriptHelper;
+import org.apache.sling.scripting.core.ScriptNameAwareReader;
import org.apache.sling.scripting.sightly.ResourceResolution;
import org.apache.sling.scripting.sightly.SightlyException;
import org.apache.sling.scripting.sightly.js.impl.async.AsyncContainer;
@@ -109,6 +110,7 @@ public class JsEnvironment {
CommonJsModule module = new CommonJsModule();
Bindings scriptBindings = buildBindings(scriptResource, globalBindings, arguments, module);
scriptContext.setBindings(scriptBindings, ScriptContext.ENGINE_SCOPE);
+ scriptContext.setAttribute(ScriptEngine.FILENAME, scriptResource.getPath(), ScriptContext.ENGINE_SCOPE);
runScript(scriptResource, scriptContext, callback, module);
}
@@ -156,8 +158,15 @@ public class JsEnvironment {
public void run() {
Reader reader = null;
try {
- reader = new InputStreamReader(scriptResource.adaptTo(InputStream.class));
- Object result = jsEngine.eval(reader, scriptContext);
+ Object result;
+ if (jsEngine instanceof Compilable) {
+ reader = new ScriptNameAwareReader(new InputStreamReader(scriptResource.adaptTo(InputStream.class)),
+ scriptResource.getPath());
+ result = ((Compilable) jsEngine).compile(reader).eval(scriptContext);
+ } else {
+ reader = new InputStreamReader(scriptResource.adaptTo(InputStream.class));
+ result = jsEngine.eval(reader, scriptContext);
+ }
if (commonJsModule.isModified()) {
result = commonJsModule.getExports();
}
diff --git a/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsUseProvider.java b/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsUseProvider.java
index ac2c886..2f6f3b5 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsUseProvider.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsUseProvider.java
@@ -18,6 +18,12 @@
******************************************************************************/
package org.apache.sling.scripting.sightly.js.impl;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Dictionary;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Set;
import javax.script.Bindings;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
@@ -26,15 +32,14 @@ import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferencePolicy;
import org.apache.felix.scr.annotations.Service;
-import org.apache.sling.api.SlingException;
-import org.apache.sling.api.resource.LoginException;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
-import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.api.scripting.SlingScriptHelper;
+import org.apache.sling.commons.osgi.PropertiesUtil;
+import org.apache.sling.scripting.api.ScriptCache;
import org.apache.sling.scripting.sightly.SightlyException;
-import org.apache.sling.scripting.sightly.impl.engine.runtime.RenderContextImpl;
import org.apache.sling.scripting.sightly.js.impl.async.AsyncContainer;
import org.apache.sling.scripting.sightly.js.impl.async.AsyncExtractor;
import org.apache.sling.scripting.sightly.js.impl.jsapi.SlyBindingsValuesProvider;
@@ -43,6 +48,9 @@ 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.service.cm.Configuration;
+import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.service.component.ComponentContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -68,8 +76,10 @@ import org.slf4j.LoggerFactory;
public class JsUseProvider implements UseProvider {
private static final String JS_ENGINE_NAME = "javascript";
+ private static final String SCRIPT_CACHE_PID = "org.apache.sling.scripting.core.impl.ScriptCacheImpl";
+ private static final String SCRIPT_CACHE_ADDITIONAL_EXTENSIONS = "org.apache.sling.scripting.cache.additional_extensions";
- private static final Logger log = LoggerFactory.getLogger(JsUseProvider.class);
+ private static final Logger LOGGER = LoggerFactory.getLogger(JsUseProvider.class);
private static final JsValueAdapter jsValueAdapter = new JsValueAdapter(new AsyncExtractor());
@Reference
@@ -78,6 +88,9 @@ public class JsUseProvider implements UseProvider {
@Reference
private SlyBindingsValuesProvider slyBindingsValuesProvider = null;
+ @Reference
+ private ConfigurationAdmin configurationAdmin = null;
+
@Override
public ProviderOutcome provide(String identifier, RenderContext renderContext, Bindings arguments) {
Bindings globalBindings = renderContext.getBindings();
@@ -105,4 +118,27 @@ public class JsUseProvider implements UseProvider {
}
}
}
+
+ @SuppressWarnings({"unused", "unchecked"})
+ protected void activate(ComponentContext componentContext) {
+ try {
+ Configuration configuration = configurationAdmin.getConfiguration(SCRIPT_CACHE_PID);
+ Dictionary properties = configuration.getProperties();
+ if (properties == null) {
+ properties = new Hashtable(1);
+ }
+ String[] additionalExtensions = PropertiesUtil.toStringArray(properties.get(SCRIPT_CACHE_ADDITIONAL_EXTENSIONS));
+ Set<String> extensionsSet = new HashSet<String>(1);
+ if (additionalExtensions != null) {
+ extensionsSet = new HashSet<String>(Arrays.asList(additionalExtensions));
+ }
+ extensionsSet.add(Utils.JS_EXTENSION);
+ properties.put(SCRIPT_CACHE_ADDITIONAL_EXTENSIONS, extensionsSet.toArray(new String[extensionsSet.size()]));
+ configuration.setBundleLocation(null);
+ configuration.update(properties);
+ } catch (IOException e) {
+ LOGGER.error("Unable to retrieve " + SCRIPT_CACHE_PID + " configuration. The Script Cache will not invalidate JavaScript file" +
+ " changes (e.g. files with the .js extension).");
+ }
+ }
}
diff --git a/src/main/java/org/apache/sling/scripting/sightly/js/impl/Utils.java b/src/main/java/org/apache/sling/scripting/sightly/js/impl/Utils.java
index 7d22159..3b21ede 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/js/impl/Utils.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/js/impl/Utils.java
@@ -30,7 +30,7 @@ import org.apache.sling.api.scripting.SlingScriptHelper;
* Utilities for script evaluation
*/
public class Utils {
- private static final String EXTENSION = "js";
+ public static final String JS_EXTENSION = "js";
public static final Bindings EMPTY_BINDINGS = new SimpleBindings(Collections.<String, Object>emptyMap());
@@ -40,7 +40,7 @@ public class Utils {
public static boolean isJsScript(String identifier) {
String extension = StringUtils.substringAfterLast(identifier, ".");
- return EXTENSION.equalsIgnoreCase(extension);
+ return JS_EXTENSION.equalsIgnoreCase(extension);
}
}
--
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.