【发布时间】:2015-07-06 23:58:28
【问题描述】:
我正在开发和应用一系列将在 Karaf 上运行的 OSGI 包。 Bundles 具有相当多的互操作性,既可以公开一堆服务,也可以相互使用服务。
但是,我非常希望能够与捆绑包一起构建应用程序的 WAR 文件。有一些客户端根本不允许在其服务器上使用 OSGI 容器。
所以我的问题是,将 OSGI 服务逻辑与应用程序逻辑分开的最佳方法是什么?激活器没有问题,因为它们只是在 WAR 部署中未使用,但我有很多从 bundlecontext 中检索服务的调用,例如 bundleContext.getServiceReference(stuffISortOfNeed.class)scattered 在我的代码周围。 bundleContext 目前是激活器设置的静态对象。
这在对 OSGI 一无所知的 WAR 容器中是行不通的。
是否有可能以某种方式隐藏 BundleContext 和 getServiceReference 调用远离实际应用程序?最好我会喜欢一种类似注入的方法,在这种方法中我可以使用@Annotations 定义我的服务,并为 OSGI 和 PlainOldJava 定义和注入器。
【问题讨论】:
标签: dependency-injection osgi war