Author: bdelacretaz
Date: Mon Feb 22 14:49:34 2016
New Revision: 1731653
URL: http://svn.apache.org/viewvc?rev=1731653&view=rev
Log:
SLING-5227 - use ResourceResolverFactory#getThreadResourceResolver instead of
loginAdministrative
Modified:
sling/trunk/contrib/extensions/bgservlets/engine/pom.xml
sling/trunk/contrib/extensions/bgservlets/engine/src/main/java/org/apache/sling/bgservlets/impl/webconsole/JobConsolePlugin.java
Modified: sling/trunk/contrib/extensions/bgservlets/engine/pom.xml
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/bgservlets/engine/pom.xml?rev=1731653&r1=1731652&r2=1731653&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/bgservlets/engine/pom.xml (original)
+++ sling/trunk/contrib/extensions/bgservlets/engine/pom.xml Mon Feb 22
14:49:34 2016
@@ -78,7 +78,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.api</artifactId>
- <version>2.1.0</version>
+ <version>2.8.0</version>
<scope>provided</scope>
</dependency>
<dependency>
Modified:
sling/trunk/contrib/extensions/bgservlets/engine/src/main/java/org/apache/sling/bgservlets/impl/webconsole/JobConsolePlugin.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/bgservlets/engine/src/main/java/org/apache/sling/bgservlets/impl/webconsole/JobConsolePlugin.java?rev=1731653&r1=1731652&r2=1731653&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/bgservlets/engine/src/main/java/org/apache/sling/bgservlets/impl/webconsole/JobConsolePlugin.java
(original)
+++
sling/trunk/contrib/extensions/bgservlets/engine/src/main/java/org/apache/sling/bgservlets/impl/webconsole/JobConsolePlugin.java
Mon Feb 22 14:49:34 2016
@@ -25,7 +25,6 @@ import java.util.Dictionary;
import java.util.Hashtable;
import java.util.Iterator;
-import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
@@ -33,6 +32,8 @@ import javax.servlet.http.HttpServletRes
import org.apache.felix.webconsole.AbstractWebConsolePlugin;
import org.apache.felix.webconsole.WebConsoleConstants;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.bgservlets.JobConsole;
import org.apache.sling.bgservlets.JobStatus;
import org.apache.sling.jcr.api.SlingRepository;
@@ -76,6 +77,7 @@ public class JobConsolePlugin {
private ServiceRegistration serviceRegistration;
private final JobConsole jobConsole;
private ServiceTracker repositoryTracker;
+ private ServiceTracker resourceResolverFactoryTracker;
public Plugin(JobConsole console) {
jobConsole = console;
@@ -86,6 +88,9 @@ public class JobConsolePlugin {
repositoryTracker = new ServiceTracker(ctx,
SlingRepository.class.getName(), null);
repositoryTracker.open();
+
+ resourceResolverFactoryTracker = new ServiceTracker(ctx,
ResourceResolverFactory.class.getName(), null);
+ resourceResolverFactoryTracker.open();
Dictionary<String, Object> props = new Hashtable<String, Object>();
props.put(Constants.SERVICE_DESCRIPTION,
@@ -107,6 +112,10 @@ public class JobConsolePlugin {
repositoryTracker.close();
repositoryTracker = null;
}
+ if (resourceResolverFactoryTracker != null) {
+ resourceResolverFactoryTracker.close();
+ resourceResolverFactoryTracker = null;
+ }
super.deactivate();
}
@@ -119,6 +128,30 @@ public class JobConsolePlugin {
public String getTitle() {
return TITLE;
}
+
+ /** Return the JCR session of the current request's user */
+ private Session getRequestSession() throws ServletException {
+ Session result = null;
+ final ResourceResolverFactory f =
(ResourceResolverFactory)resourceResolverFactoryTracker.getService();
+ if(f == null) {
+ throw new ServletException("Unable to acquire
ResourceResolverFactory service");
+ }
+
+ final ResourceResolver r = f.getThreadResourceResolver();
+ if(r == null) {
+ throw new ServletException(
+ "Unable to acquire ResourceResolver from
ResourceResolverFactory service. "
+ + "This usually happens if the webconsole does not use
the Sling Security Provider."
+ );
+ }
+
+ result = r.adaptTo(Session.class);
+
+ if(result == null) {
+ throw new ServletException("ResourceResolver does not adapt to
Session");
+ }
+ return result;
+ }
@Override
protected void renderContent(HttpServletRequest req,
@@ -131,17 +164,7 @@ public class JobConsolePlugin {
pw.println("No SlingRepository service found");
return;
}
- Session s = null;
- try {
- s =
repository.loginAdministrative(repository.getDefaultWorkspace());
- renderJobs(req, pw, s, jobConsole);
- } catch(RepositoryException re) {
- throw new ServletException("RepositoryException in
renderContent()", re);
- } finally {
- if(s != null) {
- s.logout();
- }
- }
+ renderJobs(req, pw, getRequestSession(), jobConsole);
}
@Override
@@ -154,32 +177,23 @@ public class JobConsolePlugin {
pw.println("No SlingRepository service found");
return;
}
- Session s = null;
- try {
- s =
repository.loginAdministrative(repository.getDefaultWorkspace());
- final String jobPath = req.getParameter("jobPath");
- if (jobPath != null) {
- final JobStatus job = jobConsole.getJobStatus(s, jobPath);
- if (job != null) {
- final String action = req.getParameter("action");
- if ("suspend".equals(action)) {
- job.requestStateChange(JobStatus.State.SUSPENDED);
- } else if ("stop".equals(action)) {
- job.requestStateChange(JobStatus.State.STOPPED);
- } else if ("resume".equals(action)) {
- job.requestStateChange(JobStatus.State.RUNNING);
- }
+ final Session s = getRequestSession();
+ final String jobPath = req.getParameter("jobPath");
+ if (jobPath != null) {
+ final JobStatus job = jobConsole.getJobStatus(s, jobPath);
+ if (job != null) {
+ final String action = req.getParameter("action");
+ if ("suspend".equals(action)) {
+ job.requestStateChange(JobStatus.State.SUSPENDED);
+ } else if ("stop".equals(action)) {
+ job.requestStateChange(JobStatus.State.STOPPED);
+ } else if ("resume".equals(action)) {
+ job.requestStateChange(JobStatus.State.RUNNING);
}
}
-
- resp.sendRedirect(req.getServletPath() + req.getPathInfo());
- } catch(RepositoryException re) {
- throw new ServletException("RepositoryException in doPost()",
re);
- } finally {
- if(s != null) {
- s.logout();
- }
}
+
+ resp.sendRedirect(req.getServletPath() + req.getPathInfo());
}
private void renderJobs(HttpServletRequest req, PrintWriter pw,
Session s, JobConsole console) {