簡體   English   中英

如何使用BundleContext從bundle manifest中獲取屬性值?

[英]How to get property values from bundle manifest using BundleContext?

憑借我對OSGi的熟練程度,我可以從以下地址獲取屬性字符串:

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

    Service-Component:\\ foo.bar.impl.FixServer; application =“quickfix.Application”; properties:=“acceptor.resourcename = acceptor.cfg”

我想在bundle清單中獲取屬性,可以在bundle級別(即BundleContext)訪問,它高於'Service-Component'(即ComponentContext)。

誰能告訴我怎么做到這一點?


附錄

根據AValchev和Neil Bartlett的回答,

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

是一個很好的方法。

編輯2011-12-10

但是,JAR Manifest語法(要求鍵中的第一個char為大寫,'。'char禁止)會破壞我的app鍵常量,除非我進行一些重構。

如果我這樣做,如果我將來使用.properties文件,應用程序將再次中斷。

為了克服JAR Manifest語法的(IMO)'限制',我提出了這個單一的清單條目:

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,\

,以及將字符串摘要到Properties中的代碼:

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);
        }
    }
}

我不完全確定你的目標是什么,但為什么你不看看ConfigurationAdmin服務,它被定義為OSGi標准。

設置所有包可用屬性的一種方法是在命令行中使用-Dproperty = value參數。 如果您使用的是equinox,則可以將屬性放入config.ini中。

Bundle.getHeader(...)方法怎么樣? 只需在您的MANIFEST.MF文件中指定類似於MY-Property:proper-value,然后您就可以通過Bundle.getHeader()訪問它。 此方法的問題是MANIFEST.MF中所需的命名約定。

您問題的標題和正文不匹配。 標題詢問如何從捆綁包清單中獲取屬性值...這很容易:

Dictionary dict = bundleContext.getBundle().getHeader();

但是,您的問題正文詢問如何在清單中設置屬性值。 這在運行時是不可能的,因為清單實際上是bundle的一部分,不能動態修改。

如果您正在尋找某種捆綁級別的配置數據,請考慮使用Configuration Admin服務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM