私はJCRで動作するosgiコンポーネント(CRUDなど)を持っています。Sling/Jackrabbit - リゾルバ/セッションライフタイムとその同時整合性
@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();
}
}
(セッション実装と)別のサービスのために同じ質問
。
可能であれば、いくつかの証拠を見てうれしいです。たぶんドキュメント...
ありがとう。
フィードバックに感謝します。 – Alex
ところで、「AEMはしばらくして閉鎖されていないセッションを収集しています」という情報を見つけることができます。 この[記事](http://tech.ethomasjoseph.com/2015/09/sling-who-is-closing-my-jcr-session.html)では、ResourceResolverの基盤となるJCRセッションを閉じるResourceResolverオブジェクトは収集されるガーベジです。あなたは、AEMが閉鎖されたセッションを閉鎖するか、または記事の挙動に言及する実際の仕事をしていることを意味しますか? – Alex
「AEMはしばらくして閉鎖されていないセッションを収集しています」の参照はありますか? ?私はこの製品でそのような機能性を認識していません。 –