我刚刚开始 Apache sling 和 CQ5 开发。在 Sling 中有使用 OSGI 包的概念。
我不知道吊索框架实际上是如何与这些捆绑包交互的,以及捆绑包的响应在哪里?
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 服务器主机:端口)
一旦获得对组件的引用,就可以调用该组件的方法并使用这些调用的返回值。