7

我需要在 servlet 中重用最初为 Eclipse RCP 应用程序开发的代码(即装箱为 Eclipse 插件/OSGi 包)。

在阅读了很多博客文章、文章、wiki 等之后,我最终知道了这一点:

  1. OSGi 框架(在我的例子中是 Equinox)可以嵌入到 servlet 容器中(在我的例子中是 Tomcat 7)
  2. 或者 Tomcat 可以嵌入到 OSGi 框架中。

Equinox建议使用第二个选项,因为它更容易。但是对于生产,他们推荐 1。我不确定为什么。在哪种情况下真正更好的是什么,为什么?

我是一个经验丰富的 Tomcat 用户,将 Tomcat 嵌入 Equinox 会改变对它的大量管理吗?或者换句话说,嵌入在 Equinox 中的 Tomcat 会有什么不同?

4

3 回答 3

5

我们一直在将使用 Jetty 的相当复杂的 Web 应用程序从非 OSGi 迁移到 Equinox 上的 OSGi。我已经了解了一些肯定会以某种方式推动您做出决定的事情: - 如果您选择使用 OSGi 作为框架来运行您的应用程序,例如选项 #2,那么您的应用程序使用的所有内容都必须是 OSGi 捆绑包。商业图书馆的任何外部或第三方。如果您使用大量开源软件,很容易找到捆绑软件。或者,如果您找不到捆绑包,您可以随时使用 BNDTools 自己捆绑它们。尽管如此,这种方法可能会耗费大量时间来找出所有正确的依赖关系,并且可能的类加载器问题需要围绕 OSGi 进行破解 - 将 OSGi 嵌入到 Tomcat 中的方法,从表面上看,这似乎是更安全、更容易的方法。虽然我'

顺便说一句,WAB 的一个有趣的好处是您可以轻松地在 WebApp 之间共享代码,因为它们被部署为包,您可以简单地在它们之间导出/导入包。对于今天的非 OSGi 部署来说,这是不可能的。

于 2012-06-14T16:15:44.120 回答
5

首先,除了清单之外,代码是否有任何 OSGi/Equinox 依赖项?如果不是,它应该在普通的 Tomcat 中工作得很好。

我的理解是,将 Tomcat 嵌入 Equinox 将大大改变对它的管理。您的文件夹布局(包括 server.xml 和 catalina.sh)将消失。相反,您可能会通过配置管理员来管理 Equinox 应用程序。

其次,OSGi 有两种 servlet 编程和部署模型。第一个是 HttpService,您可以在其中以编程方式注册您的 servlet 和资源(您也可以通过扩展点执行此操作)。在这种情况下,您的应用程序只是捆绑包的集合。但是,您不能使用过滤器。第二个是 Web 应用程序包 (WAB),它是一个 OSGified WAR。

于 2012-04-23T05:20:48.590 回答
4

Apache Sling 的maven-launchpad-plugin可以生成嵌入 OSGi 框架的 war 文件(Apache Felix 作为标准,不确定是否支持其他框架)和您定义的一组捆绑包。可用于在 Tomcat 中运行 OSGi 应用程序。

于 2012-04-23T07:36:48.853 回答