无法从 Karaf 2.2.0 OSGi 容器中的根上下文运行 WAR
Posted
技术标签:
【中文标题】无法从 Karaf 2.2.0 OSGi 容器中的根上下文运行 WAR【英文标题】:Cannot Run WAR From Root Context in Karaf 2.2.0 OSGi Container 【发布时间】:2011-08-08 06:33:29 【问题描述】:我一直在努力让 Web 应用程序在 Karaf 2.2.0 的根应用程序上下文中运行(它在 Karaf 2.1.4 中运行良好)。我已经能够将问题隔离为使用 Tomcat 示例 WAR 轻松复制的问题。
从 Karaf 运行以下命令:
osgi:install -s webbundle:http://tomcat.apache.org/tomcat-5.5-doc/appdev/sample/sample.war?Bundle-SymbolicName=tomcat-sample&Webapp-Context=/anything
从您的网络浏览器访问应用程序 (http://localhost:8181/anything/index.html)
卸载示例包通过以下命令使用根上下文路径重新安装包:
osgi:install -s webbundle:http://tomcat.apache.org/tomcat-5.5-doc/appdev/sample/sample.war?Bundle-SymbolicName=tomcat-sample&Webapp-Context=/
尝试从您的网络浏览器访问应用程序 (http://localhost:8181/index.html)
注意 404 错误。查看日志,似乎当 Web 应用程序位于根应用程序上下文中时,它会在任何请求前添加“/default/”。例如,当尝试访问 /index.html 时,它会在 /default/index.html 中查找,找不到页面,并返回未找到错误(有关详细信息,请参阅下面的日志输出)。
有人知道如何解决这个问题吗?
日志输出
15:14:46,270 | DEBUG | 30 - /index.html | log | .eclipse.jetty.util.log.Slf4jLog 70 | 43 - org.eclipse.jetty.util - 7.2.2.v20101205 | REQUEST /index.html on org.eclipse.jetty.server.nio.SelectChannelConnector$3@693a1324
15:14:46,270 | DEBUG | 30 - /index.html | ServerModel | eb.service.spi.model.ServerModel 268 | 52 - org.ops4j.pax.web.pax-web-spi - 1.0.1 | Matching [/index.html]...
15:14:46,270 | DEBUG | 30 - /index.html | ServerModel | eb.service.spi.model.ServerModel 292 | 52 - org.ops4j.pax.web.pax-web-spi - 1.0.1 | Path [/index.html] matched to pattern=/.*,model=ResourceModelid=org.ops4j.pax.web.service.spi.model.ResourceModel-22,name=default,urlPatterns=[/],alias=/,servlet=ResourceServletcontext=/,alias=/,name=default,initParams=,context=ContextModelid=org.ops4j.pax.web.service.spi.model.ContextModel-21,name=,httpContext=org.ops4j.pax.web.extender.war.internal.WebAppWebContainerContext@3942ef25,contextParams=webapp.context=
15:14:46,270 | DEBUG | 30 - /index.html | log | .eclipse.jetty.util.log.Slf4jLog 70 | 43 - org.eclipse.jetty.util - 7.2.2.v20101205 | Got Session ID 17kb0ch4hv02w1ennfxju5owpw from cookie
15:14:46,270 | DEBUG | 30 - /index.html | log | .eclipse.jetty.util.log.Slf4jLog 70 | 43 - org.eclipse.jetty.util - 7.2.2.v20101205 | sessionManager=org.eclipse.jetty.server.session.HashSessionManager@7d8aecf1
15:14:46,271 | DEBUG | 30 - /index.html | log | .eclipse.jetty.util.log.Slf4jLog 70 | 43 - org.eclipse.jetty.util - 7.2.2.v20101205 | session=null
15:14:46,271 | DEBUG | 30 - /index.html | log | .eclipse.jetty.util.log.Slf4jLog 70 | 43 - org.eclipse.jetty.util - 7.2.2.v20101205 | servlet=default
15:14:46,271 | DEBUG | 30 - /index.html | log | .eclipse.jetty.util.log.Slf4jLog 70 | 43 - org.eclipse.jetty.util - 7.2.2.v20101205 | servlet holder=
15:14:46,271 | DEBUG | 30 - /index.html | HttpServiceContext | etty.internal.HttpServiceContext 115 | 54 - org.ops4j.pax.web.pax-web-jetty - 1.0.1 | Handling request for [/index.html] using http context [org.ops4j.pax.web.extender.war.internal.WebAppWebContainerContext@3942ef25]
15:14:46,271 | DEBUG | 30 - /index.html | log | .eclipse.jetty.util.log.Slf4jLog 70 | 43 - org.eclipse.jetty.util - 7.2.2.v20101205 | chain=
15:14:46,272 | DEBUG | 30 - /index.html | WebAppWebContainerContext | r.war.internal.WebAppHttpContext 113 | 64 - org.ops4j.pax.web.pax-web-extender-war - 1.0.1 | Searching bundle [tomcat-sample [97]] for resource [default/index.html], normalized to [default/index.html]
15:14:46,272 | DEBUG | 30 - /index.html | WebAppWebContainerContext | r.war.internal.WebAppHttpContext 140 | 64 - org.ops4j.pax.web.pax-web-extender-war - 1.0.1 | Resource not found
15:14:46,273 | DEBUG | 30 - /index.html | log
【问题讨论】:
【参考方案1】:此问题现已作为 Karaf 错误提交。见https://issues.apache.org/jira/browse/KARAF-577
【讨论】:
以上是关于无法从 Karaf 2.2.0 OSGi 容器中的根上下文运行 WAR的主要内容,如果未能解决你的问题,请参考以下文章
OSGi 容器 - Equinox 与 Apache Karaf 中的 Apache Felix
OSGi 纲要 (R6) 注释 + Felix SCR 2.0.0 + Karaf 3.0.6
OSGi:无法在 Apache Karaf 中找到 UserAdmin