Tomcat 和 OSGi
Posted
技术标签:
【中文标题】Tomcat 和 OSGi【英文标题】:Tomcat and OSGi 【发布时间】:2013-09-20 10:08:09 【问题描述】:我想知道是否可以在 Tomcat 实例中嵌入像 Karaf 这样的 OSGi 容器。根据this SO question 和其他一些人的说法,这似乎是可能,但我似乎找不到任何关于如何做到这一点或需要注意哪些陷阱/警告的可靠细节。
所以:
-
是否可以在 Tomcat 中嵌入 OSGi 容器,以便我可以随时将 OSGi 包热部署到该容器,而无需重新启动 Tomcat?
如果上面 #1 的答案是“是”,那么在 Tomcat 中嵌入 OSGi 会暴露哪些系统服务/端口?我问是因为我想将 OSGi 部署在托管在我没有管理员权限的 Java PaaS 上的 Tomcat 服务器中。而且我想知道 - 当我尝试将嵌入式 OSGi 容器部署到 Tomcat 时,它是否会尝试开始侦听端口,或者可能开始对本地文件系统执行某些操作。如果是这种情况,我可能会收到安全/权限错误。
提前致谢!
【问题讨论】:
angelozerr.wordpress.com/category/java/osgi/equinox/… 非常详细地解释了如何做到这一点。 感谢@M.Deinum (+1) - 有趣的是,这篇文章提到他们无法做到这一点,因为他们试图部署到 CloudBees,这是一个“非 OSGi HTTP Tomcat”。 我也在尝试在 CloudBees 上进行部署! (我提到的 Java PaaS)。 你知道 Tomcat 是如何启用/禁用 OSGi 的吗?再次感谢! 不确定他们在哪里提到它。但是您不能将 tomcat 部署为 OSGI 包,但反过来(tomcat 中的 OSGi)应该可以工作。缺点是 Servlet Bridge 已经过时了(Servlet 2.4)。 在你上面提到的那篇文章@M.Deinum - 这是标题为“Servlet Container (ServletBridge) 中的 Equinox”部分下的第一段。 这将 Tomcat 称为 OSGi 包...而不是 Tomcat 内的 OSGi 容器。他提到这是弄清楚如何使用 servlet-bride/serverside-equinox 的原因。 【参考方案1】:是否可以在 Tomcat 中嵌入 OSGi 容器?
是的。事实上,如果你下载 Karaf 并查看 <KARAF_HOME>/demos/web
,你会发现 demo project 正是这样做的。
在 Tomcat 中嵌入 OSGi 会暴露哪些系统服务/端口?
这取决于您在其中安装的内容以及如何配置它。 Here is 关于默认端口以及如何配置它们的讨论有些陈旧(但恕我直言仍然相关)。
【讨论】:
有趣的是,这个 3 年前的问题如何在 RSS 提要中显示为新问题并欺骗了我。哦,好吧,我想既然我已经写了一个答案,我就把它留在这里以备将来参考。 今天看了web.liferay.com/it/web/milen.dyankov/blog/-/blogs/…之后,我也发现了这篇文章..恭维@milen 演示项目链接已损坏 感谢您报告它@Kukeltje 我更新了项目链接,但请记住它指向旧版本的 Karaf。不知道最新版本有没有类似的demo。【参考方案2】:我们以同样的方式部署我们的应用程序。我们已经使用servelt桥在tomcat和weblogic上部署了karaf。使用容器的原因是为了克服环境限制,其中一些客户是“oracle”或“ibm”商店,并希望在这些服务器上完成所有部署。
由于您将使用 servlet 桥接器,因此无需打开新端口即可列出 http 流量。如果该端口被阻止,您可能会遇到与 karaf 控制台有关的问题。我还记得由于嵌入式码头实例在另一个端口上启动而导致运行 cxf 时遇到问题。
除了端口之外,您还需要一个具有写入权限的 karaf 主目录。
【讨论】:
以上是关于Tomcat 和 OSGi的主要内容,如果未能解决你的问题,请参考以下文章
如何在myeclipse中安装tomcat和部署项目到tomcat中