dependency-injection - 我如何构建既可以作为 OSGI bundle 又可以作为 WAR 运行的应用程序

标签 dependency-injection osgi war

我正在开发和应用一系列将在 Karaf 上运行的 OSGI 包。 Bundles 具有相当多的互操作性,既公开大量服务,又相互使用服务。

但是,我非常希望能够与 bundle 一起构建应用程序的 WAR 文件。有一些客户端根本不允许在其服务器上使用 OSGI 容器。

所以我的问题是,将 OSGI 服务逻辑与应用程序逻辑分离的最佳方法是什么?激活器没有问题,因为它们只是在 WAR 部署中未使用,但我有很多从捆绑上下文中检索服务的调用,例如 bundleContext.getServiceReference(stuffISortOfNeed.class) 分散在我的代码中。 BundleContext 当前是激活器设置的静态对象。

这在对 OSGI 一无所知的 WAR 容器中是行不通的。

是否可以以某种方式将 BundleContext 和 getServiceReference 调用隐藏在实际应用程序之外?我最好喜欢一种类似注入(inject)的方法,在这种方法中,我可以使用 @Annotations 定义我的服务,并为 OSGI 和 PlainOldJava 定义和注入(inject)器。

最佳答案

要真正拥有 POJO,您可以使用 Blueprint XML 来注册您的 Web 应用程序包 (WAB)。 一个很好的例子可以在pax web project中找到。 .

通过在注释上使用 XML,您只有一个额外的资源文件,如果您将 bundle 组装为 war 文件中的库,则可以忽略该资源文件,而不会额外依赖于特定注释。

关于dependency-injection - 我如何构建既可以作为 OSGI bundle 又可以作为 WAR 运行的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29914255/

相关文章:

jboss - Web 应用程序不会加入 Infinispan 集群

java - Dagger 与二传手进行测试

c# - 使用 Unity 跨多种类型注入(inject)相同的 DataContext 实例

java - 调试已编译的 Java Equinox 程序

OSGi ConfigAdmin 不清楚更新字典的值类型

java - 如何创建文件并将其放入与 Maven 的 war 中?

java - 如何解包和重新打包 WAR 文件

flutter - 使用 DI 将 BLoC 作为单例注入(inject)的效果以及在哪里关闭流?

dependency-injection - 构造函数中的依赖注入(inject)容器

java - 在 Karaf 中将第 3 方 jar 作为 OSGI 包获取时遇到问题