You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2009/07/17 13:48:35 UTC
svn commit: r795055 - in /sling/trunk:
bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/
bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/
contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/
Author: cziegeler
Date: Fri Jul 17 11:48:35 2009
New Revision: 795055
URL: http://svn.apache.org/viewvc?rev=795055&view=rev
Log:
Store script resource resolver in script context, return script resource with request resource resolver.
Modified:
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java
sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java
sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/JavaScriptEngineFactory.java
Modified: sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java?rev=795055&r1=795054&r2=795055&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java (original)
+++ sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java Fri Jul 17 11:48:35 2009
@@ -59,9 +59,12 @@
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceMetadata;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.resource.SyntheticResource;
import org.apache.sling.api.scripting.ScriptEvaluationException;
import org.apache.sling.api.scripting.SlingBindings;
import org.apache.sling.api.scripting.SlingScript;
+import org.apache.sling.api.scripting.SlingScriptConstants;
import org.apache.sling.api.scripting.SlingScriptHelper;
import org.apache.sling.scripting.core.ScriptHelper;
import org.osgi.framework.BundleContext;
@@ -74,6 +77,8 @@
// resource adapts (null if the resource does not adapt to a node
private static final String NODE = "currentNode";
+ private static ThreadLocal<ResourceResolver> requestResourceResolver = new ThreadLocal<ResourceResolver>();
+
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private Resource scriptResource;
@@ -95,7 +100,16 @@
// ---------- SlingScript interface ----------------------------------------
public Resource getScriptResource() {
- return scriptResource;
+ final ResourceResolver resolver = requestResourceResolver.get();
+ if ( resolver == null ) {
+ // if we don't have a request resolver we directly return the script resource
+ return scriptResource;
+ }
+ Resource rsrc = resolver.getResource(this.scriptResource.getPath());
+ if ( rsrc == null ) {
+ rsrc = new SyntheticResource(resolver, this.scriptResource.getPath(), this.scriptResource.getResourceType());
+ }
+ return rsrc;
}
/**
@@ -126,6 +140,13 @@
ctx.setWriter((Writer) bindings.get(OUT));
ctx.setErrorWriter(new LogWriter((Logger) bindings.get(LOG)));
+ // set the current resource resolver
+ requestResourceResolver.set(props.getRequest().getResourceResolver());
+
+ // set the script resource resolver as an attribute
+ ctx.setAttribute(SlingScriptConstants.ATTR_SCRIPT_RESOURCE_RESOLVER,
+ this.scriptResource.getResourceResolver(), ScriptContext.ENGINE_SCOPE);
+
reader = getScriptReader();
if ( method != null && !(this.scriptEngine instanceof Invocable)) {
reader = getWrapperReader(reader, method, args);
@@ -179,6 +200,7 @@
// don't care
}
}
+ requestResourceResolver.remove();
}
}
Modified: sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java?rev=795055&r1=795054&r2=795055&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java (original)
+++ sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java Fri Jul 17 11:48:35 2009
@@ -31,8 +31,10 @@
import org.apache.sling.api.SlingException;
import org.apache.sling.api.SlingIOException;
import org.apache.sling.api.SlingServletException;
+import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.scripting.SlingBindings;
import org.apache.sling.api.scripting.SlingScript;
+import org.apache.sling.api.scripting.SlingScriptConstants;
import org.apache.sling.api.scripting.SlingScriptHelper;
import org.apache.sling.commons.classloader.ClassLoaderWriter;
import org.apache.sling.commons.classloader.DynamicClassLoaderManager;
@@ -122,11 +124,18 @@
* @throws SlingIOException
*/
@SuppressWarnings("unchecked")
- private void callJsp(Bindings bindings, SlingScriptHelper scriptHelper) {
-
- ioProvider.setRequestResourceResolver(scriptHelper.getScript().getScriptResource().getResourceResolver());
+ private void callJsp(final Bindings bindings,
+ final SlingScriptHelper scriptHelper,
+ final ScriptContext context) {
+
+ ResourceResolver resolver = (ResourceResolver) context.getAttribute(SlingScriptConstants.ATTR_SCRIPT_RESOURCE_RESOLVER,
+ ScriptContext.ENGINE_SCOPE);
+ if ( resolver == null ) {
+ resolver = scriptHelper.getScript().getScriptResource().getResourceResolver();
+ }
+ ioProvider.setRequestResourceResolver(resolver);
try {
- JspServletWrapperAdapter jsp = getJspWrapperAdapter(scriptHelper);
+ final JspServletWrapperAdapter jsp = getJspWrapperAdapter(scriptHelper);
// create a SlingBindings object
final SlingBindings slingBindings = new SlingBindings();
slingBindings.putAll(bindings);
@@ -332,7 +341,7 @@
Thread.currentThread().setContextClassLoader(jspClassLoader);
try {
- callJsp(props, scriptHelper);
+ callJsp(props, scriptHelper, context);
} catch (SlingServletException e) {
// ServletExceptions use getRootCause() instead of getCause(),
// so we have to extract the actual root cause and pass it as
Modified: sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/JavaScriptEngineFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/JavaScriptEngineFactory.java?rev=795055&r1=795054&r2=795055&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/JavaScriptEngineFactory.java (original)
+++ sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/JavaScriptEngineFactory.java Fri Jul 17 11:48:35 2009
@@ -30,8 +30,10 @@
import org.apache.sling.api.SlingException;
import org.apache.sling.api.SlingIOException;
import org.apache.sling.api.SlingServletException;
+import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.scripting.SlingBindings;
import org.apache.sling.api.scripting.SlingScript;
+import org.apache.sling.api.scripting.SlingScriptConstants;
import org.apache.sling.api.scripting.SlingScriptHelper;
import org.apache.sling.commons.classloader.ClassLoaderWriter;
import org.apache.sling.commons.classloader.DynamicClassLoaderManager;
@@ -156,16 +158,24 @@
/**
* Call the servlet.
- * @param scriptHelper
+ * @param binding The bindings for the script invocation
+ * @param scriptHelper The script helper.
+ * @param context The script context.
* @throws SlingServletException
* @throws SlingIOException
*/
@SuppressWarnings("unchecked")
- private void callServlet(Bindings bindings, SlingScriptHelper scriptHelper) {
-
- ioProvider.setRequestResourceResolver(scriptHelper.getScript().getScriptResource().getResourceResolver());
+ private void callServlet(final Bindings bindings,
+ final SlingScriptHelper scriptHelper,
+ final ScriptContext context) {
+ ResourceResolver resolver = (ResourceResolver) context.getAttribute(SlingScriptConstants.ATTR_SCRIPT_RESOURCE_RESOLVER,
+ ScriptContext.ENGINE_SCOPE);
+ if ( resolver == null ) {
+ resolver = scriptHelper.getScript().getScriptResource().getResourceResolver();
+ }
+ ioProvider.setRequestResourceResolver(resolver);
try {
- ServletWrapper servlet = getWrapperAdapter(scriptHelper);
+ final ServletWrapper servlet = getWrapperAdapter(scriptHelper);
// create a SlingBindings object
final SlingBindings slingBindings = new SlingBindings();
slingBindings.putAll(bindings);
@@ -251,7 +261,7 @@
final Bindings props = context.getBindings(ScriptContext.ENGINE_SCOPE);
final SlingScriptHelper scriptHelper = (SlingScriptHelper) props.get(SLING);
if (scriptHelper != null) {
- ((JavaScriptEngineFactory)this.getFactory()).callServlet(props, scriptHelper);
+ ((JavaScriptEngineFactory)this.getFactory()).callServlet(props, scriptHelper, context);
}
return null;
}