2012-04-20 118 views
7

我需要重用最初为Eclipse RCP应用程序(即装入Eclipse插件/ OSGi包)开发的代码。将OSGi嵌入到OSGi的servlet容器或servlet容器中?

读了很多博客文章,文章,维基等我结束了在该点之后,我知道:

  1. OSGi框架(Equinox在我的情况)可以嵌入在一个servlet容器(Tomcat 7在我的情况下)
  2. 或者Tomcat可以嵌入到OSGi框架中。

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

我是一个非常丰富的Tomcat用户,将嵌入的Tomcat在春分改变重管理呢?或者换句话说,嵌入Equinox的Tomcat会有什么不同?

回答

5

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

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

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

+2

我完全忘了,如果你正在寻找进入春分运行Tomcat你可能会想看看[Eclipse的处女座(http://www.eclipse.org/virgo/),而不是亲自构建。 – 2012-04-23 05:44:44

4

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

5

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

的WABS有趣的好处BTW之一是,你可以很容易的WebApp之间共享代码,因为它们被部署为包,你可以简单地通过它们导出/导入包。今天非OSGi部署不太可能的东西。