Tomcat 在servlet容器中嵌入OSGi还是在OSGi中嵌入servlet容器?

Tomcat 在servlet容器中嵌入OSGi还是在OSGi中嵌入servlet容器?,tomcat,servlets,osgi,equinox,Tomcat,Servlets,Osgi,Equinox,我需要在servlet中重用最初为EclipseRCP应用程序开发的代码(即包装为EclipsePlugin/OSGi捆绑包) 在阅读了大量博客文章、文章、维基等之后,我终于知道: OSGi框架(在我的例子中是Equinox)可以嵌入到servlet容器中(在我的例子中是Tomcat7) 或者Tomcat可以嵌入到OSGi框架中 建议第二个选项更简单。但对于生产,他们推荐1。我不知道为什么。在哪种情况下,什么才是真正更好的?为什么 我是一个经验丰富的Tomcat用户,在Equinox中嵌入Tom

我需要在servlet中重用最初为EclipseRCP应用程序开发的代码(即包装为EclipsePlugin/OSGi捆绑包)

在阅读了大量博客文章、文章、维基等之后,我终于知道:

  • OSGi框架(在我的例子中是Equinox)可以嵌入到servlet容器中(在我的例子中是Tomcat7)
  • 或者Tomcat可以嵌入到OSGi框架中
  • 建议第二个选项更简单。但对于生产,他们推荐1。我不知道为什么。在哪种情况下,什么才是真正更好的?为什么


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

    首先,除了清单之外,代码还有任何OSGi/Equinox依赖关系吗?如果不是的话,它在普通的雄猫身上也能正常工作

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


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

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

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


    顺便说一句,WABs的一个有趣的好处是,您可以轻松地在WebApps之间共享代码,因为它们是作为捆绑包部署的,您可以简单地跨它们导出/导入包。在今天的非OSGi部署中,有些东西是不可能实现的。

    我完全忘记了,如果你想在Equinox中运行Tomcat,你可能想看看,而不是自己构建它。