@Reference Session显示不满意的错误

时间:2016-07-15 11:06:08

标签: java session cq5 aem sling

我正在使用吊索servlet。在那里我使用javax.jcr.Session作为参考。 在进行构建之后,当我在系统/控制台/组件中看到时,我看到以下错误

  

参考会议["不满意","服务名称:   javax.jcr.Session","基数:1..1","政策:静态","政策   选项:不情愿","没有服务约束"]

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

javx.jcr.Session不是服务组件,因此您无法使用@Reference引用它(请参阅http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html#reference)。

如果您需要当前用户会话,可以从SlingHttpServletRequest对象中提取它,如下所示:

Session session = slingHttpServletRequest.getResourceResolver()
                    .adaptTo(Session.class);

如果您需要其他用户的会话(技术用户可以使用"更好"权限),您可以使用ResourceResolverFactory,这是一种可以引用的服务。

答案 1 :(得分:3)

javax.jcr.Session不是服务,因此无法注入@Reference注释。

要获得会话,您可以执行以下操作 -

在AEM 6.x中,您可以使用这样的代码。

 /**
 * Gets the service resource resolver.
 *
 * @return resourceResolver.
 * @throws LoginException - exception if unable to login to repo.
 */
public static ResourceResolver getServiceResourceResolver(ResourceResolverFactory resourceResolverFactory) throws LoginException {
    final Map<String, Object> authParam = new HashMap();
    authParam.put(ResourceResolverFactory.SUBSERVICE, APPLICATION_READER_SUBSERVICE.value());

    return resourceResolverFactory.getServiceResourceResolver(authParam);
}

您可以参考上述方法的示例实现的here