Java 如何摆脱OSGi捆绑包';在其相应配置中不存在的属性(“service.pid”等)?
我的课程与以下内容类似:Java 如何摆脱OSGi捆绑包';在其相应配置中不存在的属性(“service.pid”等)?,java,osgi,apache-karaf,apache-felix,apache-servicemix,Java,Osgi,Apache Karaf,Apache Felix,Apache Servicemix,我的课程与以下内容类似: @Component(configurationPid = "foo.bar", configurationPolicy = ConfigurationPolicy.REQUIRE) public class MyClass { @Activate public void activate(Map<String, Object> properties) throws Exception { for (String prope
@Component(configurationPid = "foo.bar", configurationPolicy = ConfigurationPolicy.REQUIRE)
public class MyClass {
@Activate
public void activate(Map<String, Object> properties) throws Exception {
for (String property : properties.keySet()) {
if (!isValidProperty(property)) {
throw new IllegalArgumentException("Unknown property: " + property);
}
...
}
}
}
组件(configurationPid=“foo.bar”,configurationPolicy=configurationPolicy.REQUIRE)
公共类MyClass{
@激活
public void activate(映射属性)引发异常{
for(字符串属性:properties.keySet()){
如果(!isValidProperty(属性)){
抛出新的IllegalArgumentException(“未知属性:+属性”);
}
...
}
}
}
属性
映射必须包含来自相应配置源(例如,用户提供的文件)的属性。是的,但它也包含一些不存在的属性(service.pid
,felix.fileinstall.dir
,等等),所以我的程序坏了。我想以某种方式摆脱它们。我尝试使用
ConfigurationAdmin.getConfiguration.getProperties
和blueprintcm properties
,但效果相同。我无法硬编码要排除的属性的名称,因为我不知道它们是什么。
有没有办法告诉OSGi运行时不要把它们放在我的地图上?
我使用ServiceMix的OSGi支持(基本上是Karaf、Felix和Aries)来实现这一点。目前没有办法排除这些人工属性,但我同意这是非常糟糕的
你可以打开一个问题,.目前没有办法排除这些人工属性,但我同意这是非常糟糕的
您可以打开一个问题,.只需忽略您不喜欢/不理解的属性即可。系统的设计使得进行配置的一方可以添加任何属性,并且该属性将被传递到组件,从而成为组件服务上的服务属性。删除组件开发人员不了解的属性是一种过度限制。您将使部署过程中的某个人无法以对其他人有意义的方式装饰您的服务。只需忽略您不喜欢/不理解的属性即可。系统的设计使得进行配置的一方可以添加任何属性,并且该属性将被传递到组件,从而成为组件服务上的服务属性。删除组件开发人员不了解的属性是一种过度限制。您将使部署过程中的某个人无法以对其他人有意义的方式装饰您的服务。这些属性是规范强制要求的,因此我不确定Felix如何“合法”摆脱它们这些属性是规范强制要求的,因此我不确定Felix如何“合法”摆脱它们