OSGi HTTP Bundle - 绑定到两个端口

时间:2013-11-19 14:29:35

标签: http osgi port apache-felix

我正在使用Apache Felix HTTP Jetty捆绑包。我可以启动servlet容器/ HttpService并使用系统属性

将其分配给端口
org.osgi.service.http.port=8080

但我希望有两个这样的服务,绑定到两个不同的端口,例如我的应用程序API应该在8080上提供,但是一些静态网页应该在端口80上提供。

  • 如何在其他端口上再次启动HTTP服务?
  • 注册servlet时,如何知道哪个服务绑定到哪个端口?

编辑:对于最后一个问题,该服务附带属性中设置的端口值 org.osgi.service.http.port:8080

4 个答案:

答案 0 :(得分:2)

如果您切换到Pax-Web,您将能够做类似的事情。 Pax-Web支持虚拟主机,让您将某个应用程序绑定到单个连接。关于如何使用它的更多细节,你可以在我的两篇博文中找到:
Bind web applications to specific http connectors - part 1
Bind web applications to specific http connectors - part 2

答案 1 :(得分:0)

据我所知,OSGi中的Http服务器无法实现这一点。在Java中创建一个小的转发器当然很容易做到。

答案 2 :(得分:0)

我相信如果Apache Felix HTTP Jetty包暴露了ManagedServiceFactory,你可以。 (编辑:没有)

How to support virtual hosts with OSGI HttpService

http://www.codeaffine.com/2011/10/05/raprwt-osgi-integration-ii/

如果我明白,魔法就在这里:

http://www.osgi.org/javadoc/r2/org/osgi/service/cm/ConfigurationAdmin.html#createFactoryConfiguration(java.lang.String)

如果您使用托管服务工厂的pid创建并注册配置,它将使用新的Pid创建一个新的HttpService实例。

答案 3 :(得分:0)

Felix http.jetty 3.2.6提供了一个ManagedServiceFactory,可以轻松创建具有不同配置的多个http实例。