OSGI包的命令行参数和JVM参数

时间:2013-10-22 10:50:05

标签: java osgi

我正在努力将核心Java应用程序转换为OSGI包。我搜索了很多但是在将应用程序转换为bundle时无法找到完成以下内容的标准或最佳方法。

  1. 如何读取OSGI包中的命令行参数(目前,应用程序是从一个脚本调用的,该脚本传递的参数是在作为jar文件一部分的类之一的main函数内读取的)

  2. 在非OSGI部署中,我们使用-X选项对JVM的GC参数进行了微调。如何在OSGI中实现同样的目标?当我将当前应用程序拆分为捆绑包时,我需要对不同的捆绑包进行不同的GC调整。怎么做?

  3. 在代码中,很多地方Sytem.getProperty用于读取在-D选项中传递的参数。如何在OSGI中完成。

  4. 如果有人能指导我如何继续,将会有很大的帮助。

    由于 JK

2 个答案:

答案 0 :(得分:1)

bnd(tools)对此有标准支持。它将使用启动器的参数注册Object服务作为参数服务属性的launcher.arguments。以下代码演示了它的用法:

@Component
public class ShowArgs {
  String[] args;

  @Activate
  void start() { System.out.println(Arrays.toString(args); }

  @Reference
  void setDone( Object done, Map<String,Object> map) {
     this.args = (String[]) map.get("launcher.arguments")
  }

}

bnd(tools)也很适合将OSGi框架变成可执行jar。您可以将任何bndrun文件(包含有关框架,运行包等的信息)转换为可执行的JAR。通过bndtools中的“运行”窗格或通过bnd package x.bndrun命令。

答案 1 :(得分:0)

1:我认为没有办法读取命令行参数。您应该使用“-Dxxx”将参数指定为系统属性,因为它们可以在包的代码中读取

2:OSGi在一个JVM上运行。 JVM可以使用“-X”属性进行参数化。您不能为每个包指定这些属性。您无法为单独的捆绑包指定不同的GC设置,因为您无法为程序的不同部分定义不同的GC设置。如果你想做这样的事情,你的程序必须真的,真的(并且“真的”大约十次以上:))特别。你的动机是什么?

3:您可以以相同的方式获取系统属性:System.getProperty(...)