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

Reply via email to