OSGi下的不同配置/运行“模式”?

时间:2011-11-10 23:58:10

标签: java configuration osgi

我有一个用OSGi构建的Java应用程序,我希望以不同的模式运行,比如说远程&本地数据源。我希望能够构建和部署单个版本,以便我可以在远程模式下将应用程序作为服务运行,然后停止服务&在本地模式下尝试不同的事情。

我正在使用声明性服务。

有没有办法做到这一点?

# app -remote
Starting app in remote mode
Disabling com.example.data.local.FileStoreDao
Enabling com.example.data.remote.MySqlDao
...

相反:

# app -local
Starting app in localmode
Disabling com.example.data.remote.MySqlDao
Enabling com.example.data.local.FileStoreDao
...

或类似的东西。

2 个答案:

答案 0 :(得分:3)

引用Richard Hall的话:

  

应用程序的配置==已安装的软件包集。

最好和最易维护的解决方案是为每个运行时“模式”安装(略微)不同的捆绑包。因此,例如,大多数捆绑包都是相同的,但您部署 MySqlDao捆绑包 FileStoreDao。使用工具或启动器可以轻松设置和启动不同的捆绑组合,这一点至关重要。

如果您确实希望在不更改捆绑包的情况下执行此操作,则可以将MySqlDao和FileStoreDao打包到一个捆绑包中,并使用DS根据来自Config Admin的配置数据启用/禁用其中一个。

答案 1 :(得分:1)

不确定您正在使用哪个框架,但在Equinox中,您可以使用命令行swich传递不同的配置文件:

http://www.eclipse.org/equinox/documents/quickstart-framework.php

你可以有两个配置文件,并在OSGi引导程序周围有一个包装器(java或批处理文件?)来选择正确的配置文件。我做过这样的事情,但在我的情况下,我最终得到了两个不同插件的发行版,因为它更简单,这就是我所需要的。希望这有帮助