要在OSGi中将OSGi嵌入到servlet容器或servlet容器中?

时间:2012-04-20 20:00:23

标签: tomcat servlets osgi equinox

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

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

  1. OSGi框架(在我的例子中是Equinox)可以嵌入到servlet容器中(在我的例子中是Tomcat 7)
  2. 或Tomcat可以嵌入到OSGi框架中。
  3. Equinox建议第二种选择更容易。但对于生产他们建议1.我不确定为什么。什么是更好的在哪种情况下,为什么?

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

3 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:5)

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

BTW WW的一个有趣的好处是,您可以轻松地在WebApp之间共享代码,因为它们作为捆绑包部署,您可以简单地在它们之间导出/导入包。今天非OSGi部署无法实现的东西。

答案 2 :(得分:4)

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