【问题标题】:How to use Cardinality of @Property annotation in OSGI Declarative Services如何在 OSGI 声明式服务中使用 @Property 注释的基数
【发布时间】:2021-10-05 07:26:12
【问题描述】:

我正在将 Apache Felix SCR 注释迁移到 OSGI 声明式服务 [AEM]。虽然迁移,但我无法在 DS 中找到基数的确切替代品。

现有的 SCR 实施:

@Component (ds = true, immediate = true, metatype = false, policy = ConfigurationPolicy.OPTIONAL)
@Service (SampleService.class)
public class SampleServiceImpl implements SampleService
{
   private static final int VECTOR = Integer.MIN_VALUE + 1;

    @Property (value = REPOSTING_PATTERN, cardinality = VECTOR,description = "Event reposting pattern for QueuePosting ")
    private static String EVENT_REPOSTING_PATTERN = "eventRepostingPattern";
}

现在它在 OSGi 声明式服务中迁移如下

  @Component (configurationPolicy = ConfigurationPolicy.OPTIONAL, immediate = true, service =SampleService.class,
   property = {SampleServiceImpl .EVENT_REPOSTING_PATTERN +"="+SampleServiceImpl .EVENT_REPOSTING_PATTERN_VALUE })
  public class SampleServiceImpl implements SampleService
   {
     private static String EVENT_REPOSTING_PATTERN = "eventRepostingPattern";
     private static String EVENT_REPOSTING_PATTERN = "eventRepostingPatternValue";
   }

在 DS 注释实现中,我必须如何映射 @Property 中存在的参数 cardinality。请建议我

【问题讨论】:

    标签: java osgi osgi-bundle apache-felix declarative-services


    【解决方案1】:

    Documentation 关于@Property 和cardinality 像往常一样令人困惑,但我假设基于this 这些与配置有某种关系。您可以使用 @Designate 和 @ObjectClassDefinition 注释为您的服务设置类型安全配置。 cardinality 选项可以在@AttributeDefinition 注解中找到。

    ExampleServiceimpl.java

    import org.osgi.framework.BundleContext;
    import org.osgi.service.component.annotations.Activate;
    import org.osgi.service.component.annotations.Component;
    import org.osgi.service.metatype.annotations.Designate;
    
    @Component( immediate = true, service = ExampleService.class )
    @Designate( ocd = ExampleServiceConfig.class )
    public class ExampleServiceImpl implements ExampleService {
        
        @Activate
        public void activateService(BundleContext context, ExampleServiceConfig config){
            System.out.println(config.some_config());
        }
    }
    

    ExampleServiceConfig.java

    import org.osgi.service.metatype.annotations.AttributeDefinition;
    import org.osgi.service.metatype.annotations.ObjectClassDefinition;
    
    @ObjectClassDefinition(
        name = " Example service Configuration"
    )
    public @interface ExampleServiceConfig {
        
        @AttributeDefinition( cardinality = 1 )
        String some_config() default "default value";
    }
    

    现在作为免责声明,我自己从来没有使用过@AttributeDefinition 或cardinality 注释,所以可能会在这里关闭。当我尝试使用@AttributeDefinition 时遇到cardinality 选项,看看我是否可以使用它来使我的服务配置在hawtio 中非常漂亮,但可能缺少一些步骤。

    但希望这会为您指明正确的方向。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-09
      • 1970-01-01
      • 2012-04-27
      • 2018-05-20
      • 2018-05-18
      • 1970-01-01
      • 2021-01-05
      • 2018-11-05
      相关资源
      最近更新 更多