- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
以我对 OSGi 的熟练程度,我可以从以下位置获取属性字符串:
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/
我最近开始使用 OSGi 框架。我正在尝试从 Java 主应用程序启动 OSGi 框架。我正在关注这个tutorial将 OSGI 容器嵌入到我的项目中。 下面是我的 Java 主应用程序,我用它来启
有人能说 BundleContext.installBundle 是否是线程安全的吗?我已阅读文档,但找不到。 最佳答案 The documentation明确指出 BundleContext 是线程
我是 Spring DM 的新成员,我想访问 Bundlecontext。我的问题是我有一个 Activator 捆绑包,但它没有 xml 配置文件。我无法触摸这个包,然后我需要访问 BundleCo
以我对 OSGi 的熟练程度,我可以从以下位置获取属性字符串: BundleContext.getProperty(key)(存储在'conf/config.properties') Componen
我编写了一个测试,其中运行一个需要加载 osgi 服务的类。当我开始测试时,每次都会收到 NullPointerException。运行应用程序时它工作正常。我的捆绑上下文为空。我该如何解决这个问题?
我按照本教程将 OSGi 嵌入到我的基于 Maven 的应用程序中。我有一个类文件,用于创建并启动如上所述的框架 here它在那里工作得很好,因为我可以轻松获取 BundleContext。 我已在
我有一个包含多个组件的 OSGi 包,我想激活/停用同一包中其他组件的组件。 我从下面的代码中得到了 BundleContext: import aQute.bnd.annotation.compon
如何在 bean 定义 xml 中传递对 BundleContext 的引用? 最佳答案 你可以这样做: 关于java - 如何在 SpringDM 中将 bundleContext 引用传
我正在使用 pax-exam 加载、激活和访问 osgi 包。 以下源代码是我的 pax-exam 测试,它使用 native 容器使用 pax-exam 2.3 运行。 package fr.xli
我刚刚开始使用 Eclipse RCP 应用程序,它基本上只是提供的“hello world”示例之一。 当应用程序启动时,我想查看我的命令行参数并根据它们启动一些服务。我可以在 IApplicati
我正在尝试以 Java 配置方式在 Spring 中配置 Apache Camel,详见 example .然而,我被困在依赖步骤,因为 BundleContextAware 和(传递地)Bundle
我是 OSGi 新手,在尝试运行此库的示例时遇到问题:https://github.com/jitsi/libjitsi java.lang.NoClassDefFoundError: org/osg
我是一名优秀的程序员,十分优秀!