You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2015/11/16 17:28:44 UTC
svn commit: r1714623 -
/sling/trunk/contrib/extensions/bgservlets/engine/src/main/java/org/apache/sling/bgservlets/impl/BackgroundRequestExecutionJob.java
Author: bdelacretaz
Date: Mon Nov 16 16:28:43 2015
New Revision: 1714623
URL: http://svn.apache.org/viewvc?rev=1714623&view=rev
Log:
SLING-5261 - use distinct Sessions for captured output and processing, based on a patch by Joerg Hoh, thanks!
Modified:
sling/trunk/contrib/extensions/bgservlets/engine/src/main/java/org/apache/sling/bgservlets/impl/BackgroundRequestExecutionJob.java
Modified: sling/trunk/contrib/extensions/bgservlets/engine/src/main/java/org/apache/sling/bgservlets/impl/BackgroundRequestExecutionJob.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/bgservlets/engine/src/main/java/org/apache/sling/bgservlets/impl/BackgroundRequestExecutionJob.java?rev=1714623&r1=1714622&r2=1714623&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/bgservlets/engine/src/main/java/org/apache/sling/bgservlets/impl/BackgroundRequestExecutionJob.java (original)
+++ sling/trunk/contrib/extensions/bgservlets/engine/src/main/java/org/apache/sling/bgservlets/impl/BackgroundRequestExecutionJob.java Mon Nov 16 16:28:43 2015
@@ -35,7 +35,6 @@ import org.apache.sling.bgservlets.JobPr
import org.apache.sling.bgservlets.JobStatus;
import org.apache.sling.bgservlets.JobStorage;
import org.apache.sling.bgservlets.RuntimeState;
-import org.apache.sling.bgservlets.JobStatus.State;
import org.apache.sling.engine.SlingRequestProcessor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -49,7 +48,12 @@ class BackgroundRequestExecutionJob impl
private final HttpServletRequest request;
private final BackgroundHttpServletResponse response;
private final SuspendableOutputStream stream;
- private final ResourceResolver resourceResolver;
+
+ /** ResourceResolver used for the job processing */
+ private final ResourceResolver processingResourceResolver;
+
+ /** ResourceResolver used for the stats and to save the processing output */
+ private final ResourceResolver outputResourceResolver;
private final SlingRequestProcessor slingRequestProcessor;
private final String path;
private final String streamPath;
@@ -70,14 +74,17 @@ class BackgroundRequestExecutionJob impl
// Need a new ResourceResolver with the same credentials as the
// current request, for the background request.
- resourceResolver = request.getResourceResolver().clone(null);
+ processingResourceResolver = request.getResourceResolver().clone(null);
+
+ // And a dedicated session for the response object
+ outputResourceResolver = request.getResourceResolver().clone(null);
// Get JobData, defines path and used to save servlet output to the repository
- final Session s = resourceResolver.adaptTo(Session.class);
- if(s == null) {
- throw new IOException("Unable to get Session from ResourceResolver " + resourceResolver);
+ final Session outputSession = outputResourceResolver.adaptTo(Session.class);
+ if(outputSession == null) {
+ throw new IOException("Unable to get Session from ResourceResolver " + processingResourceResolver);
}
- final JobData d = storage.createJobData(s);
+ final JobData d = storage.createJobData(outputSession);
final String ext = request.getRequestPathInfo().getExtension();
if(ext != null) {
d.setProperty(JobData.PROP_EXTENSION, ext);
@@ -96,7 +103,7 @@ class BackgroundRequestExecutionJob impl
public void run() {
try {
- slingRequestProcessor.processRequest(request, response, resourceResolver);
+ slingRequestProcessor.processRequest(request, response, processingResourceResolver);
} catch (Exception e) {
// TODO report errors in the background job's output
log.error("Exception in background request processing", e);
@@ -108,8 +115,9 @@ class BackgroundRequestExecutionJob impl
log.error("ServletResponseWrapper cleanup failed", ioe);
}
- // cleanup the resource resolver
- resourceResolver.close();
+ // cleanup the resource resolvers
+ processingResourceResolver.close();
+ outputResourceResolver.close();
}
}
@@ -163,4 +171,4 @@ class BackgroundRequestExecutionJob impl
public void setProgressMessage(String str) {
progressMessage = str;
}
-}
+}
\ No newline at end of file