如何将 web 应用程序部署到 Apache Felix?
Posted
技术标签:
【中文标题】如何将 web 应用程序部署到 Apache Felix?【英文标题】:How do I deploy a webapp into Apache Felix? 【发布时间】:2010-12-08 08:05:27 【问题描述】:我需要安装哪些捆绑包?至少,这必须是一个 servlet 容器/Web 服务器,例如 Jetty,但基本的 org.apache.felix.http.jetty
捆绑包可以吗,或者是否需要其他任何东西来发现其他捆绑包中的 web.xml
?
我是否将 webapp 放在标准 WAR 中,添加 OSGi 标头并完成?或者 OSGi 环境是否需要任何特定于 webapp 的标头?
还需要进行哪些配置?
使用 Maven 自动化这些步骤的选项有哪些?
我已尝试部署 org.apache.felix.http.jetty
捆绑包,但我在 localhost:8080 上收到 404 的 Jetty 应答。接下来,我尝试了一个简单的 webapp,除了配置为welcome-file
的静态 html 文件之外什么都没有。据我所知,Jetty 甚至没有注意到部署描述符,至少将测试 webapp 部署到 Felix 中并没有改变任何东西。
【问题讨论】:
【参考方案1】:您不必使用 Pax Web,但它确实使事情变得更容易。如果没有 Pax Web,您将需要一个实现 OSGi HTTP 服务的包(为此有一个 Jetty 包),然后获取对 HttpService 的服务引用。你可以用这个注册你的 webapp,但这很乏味。如果您想查看血腥细节,请查看 Pax Web 代码。 Pax Web 不会向 HttpService 添加任何内容,而只是处理所有注册问题。
【讨论】:
【参考方案2】:仅靠 Jetty 和 webapp 是不够的,必须有一些粘合剂在特定上下文下的 web 服务器上实际注册 webapp。
一个有效的例子:
使用org.ops4j.pax.web.pax-web-service
包中的 Pax Web 服务作为 HTTP 服务,它也运行 Jetty
将Webapp-Context
标头添加到您的捆绑清单中
使用 Pax Web 扩展程序在您的捆绑包注册时查找该标头,然后将其连接到 http 服务。
由于某种原因,它必须是 Pax 网络服务,如果我将其替换为来自 org.apache.felix 的基本码头包,它将无法正确解析 URL。
我距离真正理解这里发生的事情还有很长的路要走,但至少我让它工作了。我怀疑如果你让你的 webapp 包在它的包激活器中做一些事情来执行连接,你可以不用 Pax 包和包头。
【讨论】:
也许注册可以通过声明式服务注入(如果不是,它肯定应该是)。以上是关于如何将 web 应用程序部署到 Apache Felix?的主要内容,如果未能解决你的问题,请参考以下文章
将python web services 部署到tomcat上
Apache Ant + Ivy 构建了一个部署到本地 Tomcat 的 Web 应用程序