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) {


Reply via email to