I have a osgi component which works with JCR (for example, CRUD).
@Component
@Service
public class SomeServiceImpl implements SomeService {
@Reference
private ResourceResolverFactory resourceResolverFactory;
private ResourceResolver resourceResolver;
@Activate
private void init() {
resourceResolver = resourceResolverFactory.getServiceResourceResolver(
Collections.singletonMap(ResourceResolverFactory.SUBSERVICE, "myService"));
}
@Override
public void serve() {
//does something with resourceResolver
}
@Deactivate
private void dispose() {
resourceResolver.close();
}
}
It creates new instance of resourceResolver and keeps it as long as this service is alive. From time to time this service is invoked outside.
My questions are:
- Is it correct approach where I once create resourceResolver and reuse it? Is it constantly?
- Do I have guarantees that underlying session will not be expired?
- By the way How long resourceResolver and their session lives and where can I see it?
- What about concurrency? Imagine this service is invoked from serveral places parallely, Does Jackrabbit guarantee me consistency?
@Component
@Service
public class SomeServiceImpl implements SomeService {
@Reference
private SlingRepository slingRepository;
private Session session;
@Activate
private void init() {
session = slingRepository.login();
}
@Override
public void serve() {
//does something with session
}
@Deactivate
private void dispose() {
session.logout();
}
}
The same questions for another service (with session implementation).
It will be nice to see some proofs if it's possible. Maybe docs...
Thanks.