我有一个用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
...
或类似的东西。
答案 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或批处理文件?)来选择正确的配置文件。我做过这样的事情,但在我的情况下,我最终得到了两个不同插件的发行版,因为它更简单,这就是我所需要的。希望这有帮助