问题描述
我正在将 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,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。请建议我
解决方法
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
注释,因此可能会在这里关闭。我在尝试使用 cardinality
时遇到了 @AttributeDefinition
选项,以查看是否可以使用它在 hawtio 中使我的服务配置更漂亮,但可能遗漏了一些步骤。
但希望这会为您指明正确的方向。