当前位置: 首页 > 知识库问答 >
问题:

如何在OSGI声明服务中使用@属性注释的基数

杜建章
2023-03-14

我正在将ApacheFelixSCR注释迁移到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中存在的参数基数。请推荐我

共有1个答案

轩辕乐邦
2023-03-14

关于@属性基数的文档与往常一样令人困惑,但基于此,我假设它们与配置有关。您可以使用@assign@ObjectClassDefinition注释为您的服务设置类型安全配置。基数选项可在@AttributeDefinition注释中找到。

例如erviceimpl.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());
    }
}

示例ServiceConfig。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";
}

现在作为免责声明,我从来没有设法使用@属性定义基数注释自己,所以可能在这里关闭。当我试图使用@属性定义来查看是否可以使用它来使我的服务配置在hawtio中变得漂亮,但可能会错过一些步骤时,遇到了基数选项。

但希望这能给你指明正确的方向。

 类似资料:
  • 我正在尝试测试一个用Declaratice Services注释()注释的OSGi服务。我已经根据AEM多项目示例生成了我的项目。 每当我在IntelliJ中运行此测试时,OSGi Mock都会抱怨测试类中缺少SCR元数据。 这是否意味着我只能测试带有ApacheFelix附带的旧SCR注释的类?OSGi模拟的文档表明2.0版支持声明性服务注释。0及以上。我使用的版本符合此标准。

  • 目前我们不想使用Bndtools,因为我们使用的是多模块化Maven项目。 目前,我们希望添加或修改bnd注释,并让Eclipse自动生成OSGI-INF文件夹中的component.xml文件,就像Maven自动生成清单一样。 现在,每次更改注释时,我们都必须对每个包执行Maven包,从jar中提取新的OSGI-INF文件夹,并手动将其添加到包中。这是令人厌烦的,混乱的,容易出错和耗时! 谢谢你

  • 我正在从ApacheFelixSCR注释更新到OSGiDSR6注释,而引起我更多问题的是类中的@Property。 在我之前: 现在我有: 和 这一切中最奇怪的事情是: 以前,我可以将我的AImpl类视为组件。 现在,我无法将我的AImpl类视为组件,并且由于不满意的引用,使用它的每个人都无法启动。 为什么像这样改变配置会导致这种行为?也许我错过了什么? 更奇怪的是,我的xml在. jar里面,看

  • 问题内容: 我的Jenkins 2.19.4使用管道:声明式代理程序API 1.0.1。如果您无法定义变量来分配读取的属性,那么如何使用readProperties? 例如,要捕获SVN版本号,我目前以脚本样式使用以下代码捕获它: 然后我可以使用: 由于以声明式定义svnProp是不合法的,因此如何使用readProperties? 问题答案: 您可以使用标记内的步骤来运行任意管道代码。 所以符合

  • 在我的应用程序中,我有一个服务聊天原型客户端。该实现是一个tcp客户端,它在蓝图“init-method”中连接到远程服务器,并在“破坏方法”中断开连接。 我还有另一个捆绑包,它使用此ChatRogcolClient的连接从通道ChatChannel读取和发布消息。目前,我有一个xml文件,它创建了ChatProcolClient的bean,并创建了一个bean ChatChannel,其中注入了

  • 我正在从Felix SCR注释迁移到R6 OSGI声明性服务,但该服务未在karaf中列出。根据下面的代码示例,ServiceImpl应该列出的是karaf。但它没有上市。是否有任何其他配置,我必须在pom。xml? 这是我正在使用的pom.xml。