我正在将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中存在的参数基数。请推荐我
关于@属性
和基数
的文档与往常一样令人困惑,但基于此,我假设它们与配置有关。您可以使用@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。