java - sling 如何使用 osgi 包

标签 java osgi aem sling

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

我无法了解 sling 框架实际上如何与这些 bundle 交互以及来自 bundle 的响应去向何处?

最佳答案

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

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

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

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

<cq:defineObjects> 

你可以这样使用它:

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

此外,如果您有自己的 OSGi 组件(例如 Servlet、服务等),您可以使用 SCR 注释注入(inject)对其他 OSGI 组件/服务的引用。 Bertrand 在他对 Getting OSGi services from a bundle in Sling/CQ 的回答中描述了这一点.实际上,这意味着将 @Reference 注释添加到组件中的 OSGI 组件变量,如下所示:

 @Reference
 private SlingRepository repository;

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

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

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服务器host:port)

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

关于java - sling 如何使用 osgi 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14619410/

相关文章:

java - Hibernate 查询示例(来自 Spring 3)

java - 为什么interrupt()会快速连续中断两个线程?

java - 动态定义的 web 方法参数

osgi - Import-Package 分辨率 :=optional and no dependency at all 之间的区别

aem - 从 OSGI 包获取 .json 形式的 JCR 节点

java - 使用 JPA 进行 Spring Boot。无法保存到 SQL Server 中的自动增量字段字段。空错误

java - RxJava Flowable.create(),如何尊重subscribeOn()线程

java - 如何动态替换 Eclipse 插件的类加载器?

adobe - 创建带有必填字段的自定义 aem 表单字段

less - AEM 6.1 LESS 版本