7

我刚刚开始 Apache sling 和 CQ5 开发。在 Sling 中有使用 OSGI 包的概念。

我不知道吊索框架实际上是如何与这些捆绑包交互的,以及捆绑包的响应在哪里?

4

1 回答 1

7

OSGi 是 Sling 和 CQ5 产品使用的模块框架和服务平台。Sling 本身由一系列托管在 Felix OSGi 容器中的捆绑包组成。Bundles 是由容器管理的组件/服务和 java 类的集合组。捆绑包可以指定将导入、导出哪些包以及这些依赖项的版本。

您可以通过多种方式从 Sling 与 OSGi 交互。在 JSP/JSP 中,您可以使用 sling 对象(类型为SlingScriptHelper),如果您包含以下行,则该对象很可能在您的 JSP 页面中可用:

<%@include file="/libs/foundation/global.jsp"%>

在您的组件中或具有以下内容:

<cq:defineObjects> 

你可以像这样使用它:

QueryBuilder queryBuilder = sling.getService(QueryBuilder.class);

此外,如果您有自己的 OSGi 组件(例如 Servlet、Service 等),您可以使用 SCR 注释注入对其他 OSGI 组件/服务的引用。Bertrand 在他对从 Sling/CQ 中的捆绑包中获取 OSGi 服务的回答中对此进行了描述。实际上,这意味着将 @Reference 注释添加到组件中的 OSGI 组件变量中,如下所示:

 @Reference
 private SlingRepository repository;

当您的组件被加载时,引用将由 OSGi 容器注入。

捆绑包没有这样的响应。已部署的包应该在系统控制台中可见:

http://localhost:4502/system/console/bundles

其组件、服务和配置在这里声明:

http://localhost:4502/system/console/services
http://localhost:4502/system/console/components
http://localhost:4502/system/console/configMgr

(将 localhost:4502 替换为您自己的 CQ 服务器主机:端口)

一旦获得对组件的引用,就可以调用该组件的方法并使用这些调用的返回值。

于 2013-01-31T07:59:59.013 回答