将参数传递给OSGi应用程序

时间:2011-08-20 15:54:18

标签: osgi command-line-arguments

我是一个正在将一套Java应用程序转换为使用OSGi的团队。以前,我们使用自己的家庭酿造类加载器系统,它与OSGi有一些的相似之处,但它只是麻烦;我们希望通过使用像Apache Felix这样的系统,我们可以拥有一个更好的系统,同时需要更少的整体努力来支持。

我们一直在将构成应用程序的模块转换为OSGi包,这与使用Spring DM非常无痛。 然而,我们 - 我,因为这是我在团队中的责任 - 需要某种方式通过像Maven(或Jenkins)这样的工具可靠地生成应用程序;拥有可再发行的应用程序安装程序,它将为用户安装所有内容是绝对必要的。 (我们非常了解我们的用户群;他们想要一个简单的安装,安装后不会下载额外的东西,好吧,除非他们决定安装额外的插件,但这是另一个故事。)我们不希望构建应用程序在控制台上手动操作,或者使用GUI,因为手动过程很可能会遇到愚蠢的人为错误;我们想要把它弄好并调试一次

此外,我们套件中的一些应用程序必须“像传统应用程序一样”获取命令行参数。 (有问题的应用程序在内部进行了重要的处理,有时需要从其他进程调用,例如Web门户。)我知道这会导致默认的Felix main出现一些问题,它只允许其命令行参数自己的目的,而不是默认提供一种方法将它们导出到捆绑包。 (我知道我们可以用shell脚本包装东西,以便将它们作为属性传递,但是...... ewwww ... 必须有更好的方法。我怀疑制作自定义main导出提供对命令行参数的访问的服务是最好的方法。)

所以,我的问题是什么是自动构建整个OSGi应用程序的推荐方法,我是否使用合理的方法来提供命令行参数?

3 个答案:

答案 0 :(得分:2)

我猜你最好的选择是写你自己的主要特别是你想要的。从OSGi R4.2开始,启动API是标准的,非常简单。您可以从Felix'Main开始,因为它已经是通用的(即它可以启动任何R4.2框架,例如Felix或Equinox)并根据您的意愿进行更改。

如果命令行参数表示配置属性,则可以将它们推送到Config Admin。否则,只要让他们看到你认为合适的方式。

答案 1 :(得分:1)

Apache Sling Maven Launchpad Plugin从包含的包列表中生成一个已完成的OSGi应用程序,Sling installer也可用于包含初始配置。

即使它们来自Sling项目,这些模块也不需要您的应用程序使用Sling应用程序模型,它们只是用于构建,启动和配置它。

答案 2 :(得分:0)

对于您的参数,请使用metatype。它将允许您的捆绑包使用默认值加载,当用户通过Web控制台或配置文件配置捆绑包时,metatype会将值注入您的变量。安装程序还可以通过配置文件在安装时设置这些值。