Felix OSGi Web 控制台和 Grizzly HTTP 服务器(HTTP 端口冲突)

Felix OSGi Web Console and Grizzly HTTP Server (HTTP Port Conflict)

当我的 Felix (OSGi) 启动时,它会启动 Felix Web 控制台包。该捆绑包使用 Jetty,它使用 felix 属性 org.osgi.service.http.port 来确定要使用的 HTTP 端口号。

我在 OSGi 上的一个 bundle,是我自己开发的,需要 Grizzly 来处理 WebSockets 等,因此,OSGi 也推出的 bundle 之一是 Grizzly OSGi HTTP Server bundle。它将 Web 服务器附加到 org.osgi.service.http.port.

中定义的 HTTP 端口

这会导致 HTTP 端口发生冲突。困境,我需要 Felix Web Console 和 Grizzly。就我而言,Grizzly 可以 运行 在不同的 por 上。但似乎缺乏实现这一任务的手段。

以前有人遇到过这个问题吗?来自 2009 的这个问题反映了这个问题,似乎 Grizzly 团队修复了它,因为我使用的是最新版本 2.3.18,我不明白为什么我会遇到这个问题。

调查此 HTTP 端口冲突问题后。我很好奇为什么 Felix Web Console 特别需要 Jetty。所以我决定从 Felix 中删除 Felix Web Console 包,并从 Maven Central 下载它及其依赖项。

在此过程中,我没有看到任何对 Jetty 的依赖,所以我的猜测是我错误地包含了 Jetty 来为 Felix Web 控制台提供服务。

这样做之后,Felix Web Console 似乎与 Grizzly Http Service 相处得很好!

出于好奇,我决定查看 Felix Web 控制台代码,在他们的代码中有一个名为 OsgiManager 的 class。这个聪明的 class 将 Felix Web 控制台绑定到找到的第一个 HTTP 服务。

这就是 HTTP 服务默认查找 OSGi 属性 org.osgi.service.http.port 的原因。 Felix 一次应该只存在一个 HTTP 服务,这是有道理的。因此,因为我删除了我认为与 Felix Web 控制台相关的 Jetty 包,所以一切都开始工作了,因为现在 Grizzly HTTP 服务成为唯一可用的 HTTP 服务。这就是为什么这一切首先起作用的原因!