for background jobs you should have a look at [1]. if you have code running in the background without a requrest you have to create a resourceresolver instance yourself, and close it when you're done.
you should always use getServiceResourceResolver. additionally you have to create a service user and a osgi mapping that maps your bundle to this use. the ACLs of this service user control which content the bundle can accces. see [2]. this is a bit complicated to setup, but you have a save setup as the code does not run with "admin" privileges. stefan [1] https://sling.apache.org/documentation/bundles/apache-sling-eventing-and-job-handling.html [2] https://sling.apache.org/documentation/the-sling-engine/service-authentication.html >-----Original Message----- >From: John Logan [mailto:john.lo...@texture.com] >Sent: Friday, March 17, 2017 4:39 PM >To: users@sling.apache.org >Subject: Question about performing background processing triggered by a >request. > >Hi, > >I was wondering whether it's possible for a resource request to >invoke a service that performs background processing, such that >the worker thread spawned by the service has a resource >resolver and JCR session based on the authentication info for >the requesting user. > >I tried using ResourceResolverFactory.getResourceResolver() >along with the AuthenticationInfo object from the request >attributes, and this yielded a LoginException. > >Invoking requestedResource.getResourceResolver.clone(authInfo) >from inside the worker thread seems like an incorrect >approach due to race conditions. > >Is there a way to create a resourceResolver for the user in >this scenario, or should I really be looking to the service >authentication stuff for this? > >Thanks! John