osgi - 使用 SlingScriptHelper#getService() 方法过滤 OSGi 服务

标签 osgi aem osgi-bundle sling

我想使用 sling taglib 在我的 jsp 中实例化一个服务对象。在正常情况下,服务类仅由 1 个类实现,这非常简单:-

RegistrationService registrationService = sling.getService(RegistrationService.class);

但是如果服务类有超过 1 个实现类,那么我们如何确保为特定类实例化对象。

我的java类是这样的:-
1. 接口(interface):RegistrationService
2. 实现类1:-

@Properties({@Property(name = "datasource", value = "SBWS"})
   @Service
   public class RegistrationServiceImpl implements RegistrationService{
   }


3. 实现类2:-

@Properties({@Property(name = "datasource", value = "SOLR"})
   @Service
   public class RegistrationServiceImpl implements RegistrationService{
   }

我如何确保使用

RegistrationService registrationService = sling.getService(RegistrationService.class);

在 jsp 中将为实现类 1 实例化服务

最佳答案

使用SlingScriptHelper#getServices(...)方法,该方法允许指定过滤器:

RegistrationService[] services = sling.getServices(RegistrationService.class, "(datasource=SBWS)");
if (services.length > 0) {
    // services[0] contains your service
}

获取 OSGi 服务并通过属性过滤它是相当低级的事情,请考虑将其从 JSP 移至 Java 类。

关于osgi - 使用 SlingScriptHelper#getService() 方法过滤 OSGi 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26254712/

相关文章:

java - 如果 ID 不需要按时间升序,为什么 OSGi 会选择 ID 最低的服务?

java - 启动服务时Jpa-hibernate错误

java - bundle 对处于已解决状态的 bundle 的依赖关系

java - Adobe CQ/AEM - 从自定义登录模块连接到数据库

aem - 不能适应我自己的吊带模型

java - 在 OSGi 包中添加第三方 Maven 依赖项的最佳方法

java - OSGi UI 应用程序中的最佳实践

grails - Gail Maven-OSGI捆绑软件为依存关系-解决问题

aem - 在 CQ/AEM 中禁用组件编辑

adobe - 从 xtype 选择类型复选框中选择值 CQ5