我有一个与 JCR 一起使用的 osgi 组件(例如,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();
}
}
它会创建 resourceResolver 的新实例,并在此服务存在时一直保留它。有时会在外部调用此服务。
我的问题是:
- 我曾经创建 resourceResolver 并重用它的方法是否正确?是不断吗?
- 我是否保证基础会话不会过期?
- 顺便说一句,resourceResolver 和他们的会话存在多长时间,我在哪里可以看到它?
- 并发呢?想象一下这个服务是从多个地方并行调用的,Jackrabbit 能保证我的一致性吗?
@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();
}
}
另一个服务(带有会话实现)的相同问题。
如果可能的话,很高兴看到一些证据。也许文档...
谢谢。