【问题标题】:How do i build and application that works as both OSGI bundles and a WAR我如何构建和作为 OSGI 包和 WAR 的应用程序
【发布时间】: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


    【解决方案1】:

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

    通过在注解上使用 XML,您只有一个额外的资源文件,如果您将捆绑包作为 lib 组装到 war 文件中,则可以忽略该文件,对特定注解没有额外的依赖。

    【讨论】:

      猜你喜欢
      • 2015-09-06
      • 2010-12-08
      • 2016-11-16
      • 2017-01-07
      • 2022-06-30
      • 2016-02-21
      • 2017-05-09
      • 2013-03-21
      • 2015-07-02
      相关资源
      最近更新 更多