Tomcat和OSGi

14

我想知道是否可以嵌入像Karaf这样的OSGi容器到Tomcat实例中。根据这个 Stack Overflow 的问题和其他一些信息,似乎是可能的,但我似乎找不到任何关于如何做到这一点或需要注意什么陷阱/注意事项的详细信息。

所以:

  1. 是否有可能将OSGi容器嵌入到Tomcat中,以便我可以在任何时候热部署OSGi bundles到此容器,而无需重新启动Tomcat?
  2. 如果上述问题的答案是“是”,那么嵌入OSGi到Tomcat中会暴露哪些系统服务/端口?我之所以问这个问题,是因为我想在托管在Java PaaS上的Tomcat服务器上部署OSGi,但我没有管理权限。我想知道当尝试将嵌入式的OSGi容器部署到Tomcat时,它是否会尝试监听端口,或者开始对本地文件系统进行某些操作。如果是这样的话,我可能会收到安全/权限错误。

提前感谢!


2
这个网站http://angelozerr.wordpress.com/category/java/osgi/equinox/equinox-servletbridge/提供了非常详细的解释,告诉你如何实现。 - M. Deinum
感谢@M.Deinum (+1) - 有趣的是文章提到他们无法这样做,因为他们试图部署到CloudBees,这是一个“非OSGi HTTP Tomcat”。我也正在尝试在CloudBees上部署!(我提到的Java PaaS)。您知道如何启用/禁用Tomcat的OSGi吗?再次感谢! - user1768830
不确定他们在哪里提到过。但是你不能将Tomcat部署为OSGI捆绑包,但反过来(OSGi内部Tomcat)应该可以工作。缺点是Servlet Bridge相当陈旧(Servlet 2.4)。 - M. Deinum
这篇文章在你上面提到的@M.Deinum - 它是标题为“Servlet容器中的Equinox(ServletBridge)”下的第一段。 - user1768830
这指的是将Tomcat作为OSGi捆绑包,而不是Tomcat内部的OSGi容器。他提到这是找出如何使用servlet-bridge/serverside-equinox的原因。 - M. Deinum
显示剩余2条评论
2个回答

5

能否在Tomcat内嵌入OSGi容器?

可以。实际上,如果你下载Karaf并查看<KARAF_HOME>/demos/web,你会发现一个演示项目demo project正是这样做的。

将OSGi嵌入Tomcat会暴露哪些系统服务/端口?

这取决于你安装了什么以及如何配置它。这里有一个有些古老(但我认为仍然相关)的关于默认端口和如何配置它们的讨论。


1
有趣的是,这个三年前的问题突然在RSS订阅中出现了,并且欺骗了我。噢,既然我已经写了答案,那我就把它留在这里供将来参考吧。 - Milen Dyankov
今天阅读了https://web.liferay.com/it/web/milen.dyankov/blog/-/blogs/liferay-karaf-compatibility-layer,我也发现了这篇文章。恭喜@milen。 - Daniele Baggio
演示项目链接已损坏。 - Kukeltje
感谢@Kukeltje的报告,我已更新项目链接,但请注意它指向较旧版本的Karaf。我不知道是否有类似的演示适用于最新版本。 - Milen Dyankov

1
我们以同样的方式部署我们的应用程序。我们使用一个servlet桥在tomcat和weblogic中部署karaf。使用容器的原因是为了克服环境限制,一些客户是“oracle”或“ibm”商店,希望所有部署都在这些服务器上完成。
由于您将使用servlet桥,因此不需要打开新端口以侦听http流量。如果该端口被阻止,则可能会出现karaf控制台问题。此外,我记得运行cxf时会出现问题,因为它启动在另一个端口上的嵌入式jetty实例。
除了端口之外,您还需要具有写访问权限的karaf主目录。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接