gpt4 book ai didi

java - 如何使用 BundleContext 从包 list 中获取属性值?

转载 作者:搜寻专家 更新时间:2023-11-01 01:46:31 24 4
gpt4 key购买 nike

以我对 OSGi 的熟练程度,我可以从以下位置获取属性字符串:

  1. BundleContext.getProperty(key)(存储在'conf/config.properties')
  2. ComponentContext.getProperties().get(key)(存储在 bundle 的“MANIFEST.MF”中)

    服务组件:\foo.bar.impl.FixServer;application="quickfix.Application";properties:="acceptor.resourcename=acceptor.cfg"

我想在包 list 中获取属性,可在包级别(即 BundleContext)访问,该级别高于“服务组件”(即 ComponentContext)。

谁能告诉我如何做到这一点?


附录

来自 AValchev 和 Neil Bartlett 的回答,

java.util.Dictionary headers = Bundle.getHeaders();

是一个很好的方法。

2011-12-10 编辑

但是,JAR Manifest 语法(要求键中的第一个字符为大写,并且不允许使用“.”字符)会破坏我的应用程序键常量,除非我进行一些重构。

如果我这样做,如果我将来使用 .properties 文件,应用程序将再次中断。

为了克服 JAR list 语法的(IMO)“限制”,我想出了这个单一的 list 条目:

Bundle-Properties: \
foo.bar.prefix=MS,\
foo.bar.hostname=127.0.0.1,\
foo.bar.port=8106,\
foo.bar.homepath=/foo/bar/E3,\
foo.bar.secure=false,\

,以及将字符串消化到属性中的代码:

java.util.Properties properties = new java.util.Properties();
java.util.Dictionary headers = bcontext.getBundle().getHeaders();
String manifest_key = "Bundle-Properties";
String manifest_value = (String) headers.get(manifest_key);
if (manifest_value != null) {
String[] t = manifest_value.split(",");
for (int i = 0; i < t.length; i++) {
String[] u = t[i].split("=");
if (1 < u.length) {
String key = u[0];
String value = u[1];
properties.setProperty(key, value);
}
}
}

最佳答案

我不完全确定您的目标是什么,但您为什么不看一下定义为 OSGi 标准的 ConfigurationAdmin 服务。

设置所有 bundle 可用的属性的一种方法是在命令行中使用 -Dproperty=value 参数。如果您使用的是 equinox,则可以将您的属性放入 config.ini。

Bundle.getHeader(...) 方法怎么样?只需在您的 MANIFEST.MF 文件中指定 MY-Property: proper-value 之类的内容,然后您就可以通过 Bundle.getHeader() 访问它。这种方法的问题是 MANIFEST.MF 中所需的命名约定。

关于java - 如何使用 BundleContext 从包 list 中获取属性值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8430741/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com