3

我正在将核心 java 应用程序转换为 OSGI 包。我进行了很多搜索,但在将应用程序转换为捆绑包时找不到完成以下操作的标准或最佳方法。

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

  2. 在非 OSGI 部署中,我们使用 -X 选项微调了 JVM 的 GC 参数。当涉及到 OSGI 时,如何做到这一点?当我将当前应用程序拆分为包时,我需要针对不同的包进行不同的 GC 调整。它是怎么做的?

  3. 在代码中很多地方 Sytem.getProperty 用于读取 -D 选项中传递的参数。如何在 OSGI 中做到这一点。

如果有人能指导我如何进行,那将有很大帮助。

谢谢JK

4

2 回答 2

2

bnd(tools) 对此有标准支持。它将使用启动器的参数注册一个对象服务作为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命令。

于 2013-10-22T12:01:07.427 回答
1

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

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

3:同样可以获取系统属性:System.getProperty(...)

于 2013-10-22T11:06:40.910 回答