当我的Felix(OSGi)启动时,它会启动Felix Web Console捆绑包。此捆绑包使用Jetty,它使用felix属性org.osgi.service.http.port
来确定要使用的HTTP端口号。
我自己开发的OSGi上的一个捆绑包需要Grizzly处理WebSockets等等,因此,OSGi推出的捆绑包之一是Grizzly OSGi HTTP Server捆绑包。它将Web服务器附加到org.osgi.service.http.port
中定义的HTTP端口。
这会导致HTTP端口冲突。困境,我需要Felix Web控制台和Grizzly。对于我所关心的问题,Grizzly可以在另一个角色上运行。但似乎缺乏实现这一任务的手段。
以前有人有这个问题吗?来自2009的这个问题反映了这个问题,似乎Grizzly团队修复了它,因为我使用的是最新版本2.3.18,我看不出为什么我会遇到这个问题。
答案 0 :(得分:1)
调查此HTTP端口冲突问题后。我很好奇为什么Felix Web Console特别需要Jetty。所以我决定从Felix中删除Felix Web Console捆绑包,然后我从Maven Central下载它以及它的依赖项。
在这个过程中,我没有看到任何对Jetty的依赖,所以我的猜测是我让Jetty错误地服务于Felix Web控制台。
完成此操作后,Felix Web Console似乎与Grizzly Http Service相处得很好!
出于好奇,我决定查看Felix Web控制台代码,在他们的代码中,他们有一个名为OsgiManager的类。这个聪明的类将Felix Web控制台绑定到找到的第一个HTTP服务。
这就是HTTP服务默认查找OSGi属性org.osgi.service.http.port
的原因。在Felix中一次只能存在一个HTTP服务,这是有道理的。因此,因为我删除了我与Jetix Web控制台相关的Jetty捆绑包,所以一切都开始工作,因为现在Grizzly HTTP Service成为唯一可用的HTTP服务。这就是为什么这一切都起作用了!