不同的配置/运行“模式”可以是不同的。在 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
...
或者类似的东西。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
引用理查德·霍尔的话:
最好和最可维护的解决方案是为每个运行时“模式”安装一组(稍微)不同的捆绑包。例如,大多数捆绑包都是相同的,但您要么部署 MySqlDao 捆绑包,要么部署 FileStoreDao。使用允许您轻松设置和启动不同捆绑包组合的工具或启动器至关重要。
如果您确实想在不更改捆绑包集的情况下执行此操作,则可以将 MySqlDao 和 FileStoreDao 打包到一个捆绑包中,并使用 DS 根据来自 Config Admin 的配置数据启用/禁用其中一个。
To quote Richard Hall:
The best and most maintainable solution will be to install a (slightly) different set of bundles for each of your runtime "modes". So for example, most of the bundles would be the same but you deploy either the MySqlDao bundle or the FileStoreDao. Using a tool or launcher that allows to you easily setup and launch different combinations of bundles will be critical.
If you really want to do this without changing the set of bundles, you could package both MySqlDao and FileStoreDao into a single bundle and use DS to enable/disable one or the other based on config data coming from Config Admin.
不确定您使用的是什么框架,但在 Equinox 中,您可以使用命令行开关传递不同的配置文件:
http://www.eclipse.org/equinox/documents/quickstart-framework.php
你可以有两个配置文件,并有一个包装器(java或批处理文件?) OSGi 引导程序选择正确的配置文件。我已经做过类似的事情,但就我而言,我最终选择了两个带有不同插件的发行版,因为它更简单,而且这就是我所需要的。希望这有帮助
Not sure what framework you're using, but in Equinox, you can pass a different config file with a command line swich:
http://www.eclipse.org/equinox/documents/quickstart-framework.php
You could have two config files, and have a wrapper (java or batch file?) around the OSGi bootstrapper to select the proper config file. I have done something like this, but in my case I ended up going with two distros with different plugins, as it was simpler and it was all that I needed. Hope this helps