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 2013/01/22 14:47:09 UTC
svn commit: r1436923 -
/sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java
Author: cziegeler
Date: Tue Jan 22 13:47:09 2013
New Revision: 1436923
URL: http://svn.apache.org/viewvc?rev=1436923&view=rev
Log:
SLING-2704 : NPE in JspScriptEngineFactory in case JSP bundle restart while servicing request. Applied patch from Chetan Mehrotra
Modified:
sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java
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=1436923&r1=1436922&r2=1436923&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 Tue Jan 22 13:47:09 2013
@@ -52,6 +52,7 @@ import org.apache.sling.scripting.api.Ab
import org.apache.sling.scripting.api.AbstractSlingScriptEngine;
import org.apache.sling.scripting.jsp.jasper.Options;
import org.apache.sling.scripting.jsp.jasper.compiler.JspRuntimeContext;
+import org.apache.sling.scripting.jsp.jasper.compiler.JspRuntimeContext.JspFactoryHandler;
import org.apache.sling.scripting.jsp.jasper.runtime.AnnotationProcessor;
import org.apache.sling.scripting.jsp.jasper.runtime.JspApplicationContextImpl;
import org.apache.sling.scripting.jsp.jasper.servlet.JspServletWrapper;
@@ -122,7 +123,7 @@ public class JspScriptEngineFactory
private boolean defaultIsSession;
/** The handler for the jsp factories. */
- private JspRuntimeContext.JspFactoryHandler jspFactoryHandler;
+ private JspFactoryHandler jspFactoryHandler;
public static final String[] SCRIPT_TYPE = { "jsp", "jspf", "jspx" };
@@ -157,6 +158,7 @@ public class JspScriptEngineFactory
/**
* @see javax.script.ScriptEngineFactory#getParameter(String)
*/
+ @Override
public Object getParameter(final String name) {
if ("THREADING".equals(name)) {
return "STATELESS";
@@ -167,9 +169,10 @@ public class JspScriptEngineFactory
/**
* Call the error page
- * @param bindings
- * @param scriptHelper
- * @param context
+ * @param bindings The bindings
+ * @param scriptHelper Script helper service
+ * @param context The script context
+ * @param scriptName The name of the script
*/
@SuppressWarnings("unchecked")
private void callErrorPageJsp(final Bindings bindings,
@@ -185,8 +188,17 @@ public class JspScriptEngineFactory
resolver = scriptHelper.getScript().getScriptResource().getResourceResolver();
}
final SlingIOProvider io = this.ioProvider;
+ final JspFactoryHandler jspfh = this.jspFactoryHandler;
+
+ // abort if JSP Support is shut down concurrently (SLING-2704)
+ if (io == null || jspfh == null) {
+ logger.warn("callJsp: JSP Script Engine seems to be shut down concurrently; not calling {}",
+ scriptHelper.getScript().getScriptResource().getPath());
+ return;
+ }
+
final ResourceResolver oldResolver = io.setRequestResourceResolver(resolver);
- jspFactoryHandler.incUsage();
+ jspfh.incUsage();
try {
final JspServletWrapper errorJsp = getJspWrapper(scriptName, slingBindings);
errorJsp.service(slingBindings);
@@ -209,13 +221,16 @@ public class JspScriptEngineFactory
request.removeAttribute("javax.servlet.error.status_code");
request.removeAttribute("javax.servlet.jsp.jspException");
} finally {
- jspFactoryHandler.decUsage();
+ jspfh.decUsage();
io.resetRequestResourceResolver(oldResolver);
}
}
/**
- * @param scriptHelper
+ * Call a JSP script
+ * @param bindings The bindings
+ * @param scriptHelper Script helper service
+ * @param context The script context
* @throws SlingServletException
* @throws SlingIOException
*/
@@ -230,8 +245,17 @@ public class JspScriptEngineFactory
resolver = scriptHelper.getScript().getScriptResource().getResourceResolver();
}
final SlingIOProvider io = this.ioProvider;
+ final JspFactoryHandler jspfh = this.jspFactoryHandler;
+
+ // abort if JSP Support is shut down concurrently (SLING-2704)
+ if (io == null || jspfh == null) {
+ logger.warn("callJsp: JSP Script Engine seems to be shut down concurrently; not calling {}",
+ scriptHelper.getScript().getScriptResource().getPath());
+ return;
+ }
+
final ResourceResolver oldResolver = io.setRequestResourceResolver(resolver);
- jspFactoryHandler.incUsage();
+ jspfh.incUsage();
try {
final SlingBindings slingBindings = new SlingBindings();
slingBindings.putAll(bindings);
@@ -240,7 +264,7 @@ public class JspScriptEngineFactory
// create a SlingBindings object
jsp.service(slingBindings);
} finally {
- jspFactoryHandler.decUsage();
+ jspfh.decUsage();
io.resetRequestResourceResolver(oldResolver);
}
}
@@ -548,6 +572,7 @@ public class JspScriptEngineFactory
this.jspRuntimeContext = null;
}
final Thread t = new Thread() {
+ @Override
public void run() {
destroyJspRuntimeContext(jrc);
}