【问题标题】:Command Line Arguments and JVM Parameters for OSGI bundlesOSGI 包的命令行参数和 JVM 参数
【发布时间】:2013-10-31 04:47:30
【问题描述】:

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

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

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

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

如果有人能指导我应该如何进行,那将是非常有帮助的。

谢谢 JK

【问题讨论】:

    标签: java osgi


    【解决方案1】:

    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 命令。

    【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 应用程序部署为单个 JAR 文件,其中一个类作为入口点(例如 Start.java)。从单个 jar 中,将根据传递给的命令行参数启动 4 个不同的组件 (JVM)来自脚本的 Start.java。这些组件中的每一个都有不同的 GC 设置(目前在脚本中进行了处理。脚本在根据启动的组件调用 Start.java 时将 GC 设置与 -D 参数一起传递)。示例:如果 A 然后使用 -XParallelGc 调用 Start.java; if B then invoke with other GC etc.. 现在计划将这些组件拆分为 4 个捆绑包。
    • 关于第 1 点和第 3 点,您能否就如何实现它提供更多解释(即传递和读取 -D 参数)目前我只是做 bundle:start() 所以我不知道如何传递参数.
    • 问题是,你如何启动你的 OSGi 容器。例如:“java -Dxxx=yyy -jar equinox.osgi.jar”。在这种情况下,您可以在任何地方(即使您在捆绑包中)System.getProperty("xxx")。可能你过度混淆了 OSGi。对于 OSGi,每个包都在同一个 JVM 下运行。如果您想要不同的 JVM,OSGi 可能无法解决您的问题。
    • 我使用的是 karaf,目前我只使用 bin dir 中的 ./karaf。感谢您提供有关 GC 的指针。
    • 在这种情况下,这是一个与 Karaf 相关的问题,如何设置系统属性。就像在 Tomcat 中一样,您可以设置特殊的环境变量,我想 Karaf 也有一些选项。
    猜你喜欢
    • 2010-09-30
    • 2016-03-25
    • 2012-10-04
    • 2010-12-08
    • 2012-01-28
    • 2013-03-24
    • 2013-11-13
    • 2013-04-09
    • 1970-01-01
    相关资源
    最近更新 更多