使用 pax web 在 OSGI 容器中部署 Web 应用程序时出错
Posted
技术标签:
【中文标题】使用 pax web 在 OSGI 容器中部署 Web 应用程序时出错【英文标题】:Error while deploying a web application in OSGI container using pax web 【发布时间】:2011-03-02 23:43:57 【问题描述】:您好,我正在尝试在 Felix 容器中部署 Web 应用程序。 我已经使用我的 Web 应用程序完成了所有必需的配置,例如设置清单标头: Webapp-上下文: 捆绑类路径: 捆绑激活器: 进口包装: 捆绑符号名称: 等等 我放在同一个容器中的 Pax 包是: pax-web-service-0.6.0.jar pax-web-jsp-0.7.1.jar pax-web-extender-war-0.7.1.jar pax-logging-service-1.5.0.jar pax-logging-api-1.5.0.jar
虽然 pax 网站上已经写到 pax-web-service 包含在 pax-war-extender 中,但似乎没有 pax-web-service 捆绑包,所有其他捆绑包都会受到影响。
我已经删除了其他 pax 捆绑包,例如 pax-web-extender-whiteboard-0.7.1.jar pax-web-jetty-0.7.1.jar,因为我没有看到它们的任何用处。
pax-web-jetty-0.7.1.jar 甚至无法启动。它具有无法从 PAX 提供的任何捆绑包中解析的依赖项。
我的浏览器显示: HTTP 错误 403
访问 /adminmodule/ 时出现问题。原因:
禁止
由 Jetty 提供支持://
虽然控制台日志显示:
[5884890@qtp-16567002-0 - /adminmodule/] 调试 org.mortbay.jetty - 在 org.mortbay.jetty.HttpConnection@1e94001 上请求 /adminmodule/ [5884890@qtp-16567002-0 - /adminmodule/] 调试 org.ops4j.pax.web.service.internal.model.ServerModel - 匹配 [/adminmodule/] ... [5884890@qtp-16567002-0 - /adminmodule/] 调试 org.ops4j.pax.web.service.internal.model.ServerModel - 路径 [/adminmodule/] 匹配到 pattern=/adminmodule/.*,model=ResourceModel id=org.ops4j.pax.web.service.internal.model.ResourceModel-2,name=,urlPatterns=[/],alias=/,servlet=ResourceServletcontext=/adminmodule,alias=/,name= ,initParams=,context=ContextModelid=org.ops4j.pax.web.service.internal.model.ContextModel-1,name=adminmodule,httpContext=org.ops4j.pax.web.extender.war.internal。 WebAppWebContainerContext@11710be,contextParams=webapp.context=adminmodule [5884890@qtp-16567002-0 - /adminmodule/] 调试 org.ops4j.pax.web.service.internal.HttpServiceContext - 使用 http 上下文 [org.ops4j.pax.web.extender 处理 [/adminmodule/] 的请求。 war.internal.WebAppWebContainerContext@11710be] [5884890@qtp-16567002-0 - /adminmodule/] 调试 org.mortbay.jetty - sessionManager=org.mortbay.jetty.servlet.HashSessionManager@19c6163 [5884890@qtp-16567002-0 - /adminmodule/] 调试 org.mortbay.jetty - session=null [5884890@qtp-16567002-0 - /adminmodule/] 调试 org.mortbay.jetty - servlet= [5884890@qtp-16567002-0-/adminmodule/] 调试 org.mortbay.jetty-chain=org.ops4j.pax.web.service.internal.model.FilterModel-3-> [5884890@qtp-16567002-0 - /adminmodule/] 调试 org.mortbay.jetty - servlet holder= [5884890@qtp-16567002-0 - /adminmodule/] 调试 org.mortbay.jetty - 调用过滤器 org.ops4j.pax.web.service.internal.model.FilterModel-3 [5884890@qtp-16567002-0 - /adminmodule/] 调试 org.ops4j.pax.web.service.internal.WelcomeFilesFilter - 应用欢迎文件过滤器... [5884890@qtp-16567002-0 - /adminmodule/] 调试 org.ops4j.pax.web.service.internal.WelcomeFilesFilter - Servlet 路径:/ [5884890@qtp-16567002-0 - /adminmodule/] 调试 org.ops4j.pax.web.service.internal.WelcomeFilesFilter - 路径信息:空 [5884890@qtp-16567002-0 - /adminmodule/] 信息 org.ops4j.pax.web.service.internal.HttpServiceContext - 获取资源:[/adminmodule.jsp] [5884890@qtp-16567002-0 - /adminmodule/] 调试 org.ops4j.pax.web.extender.war.internal.WebAppWebContainerContext - 搜索捆绑包 [com.cisco.zaloni.gwt.admin [1]] 以获取资源 [/ adminmodule.jsp],规范化为 [adminmodule.jsp] [5884890@qtp-16567002-0 - /adminmodule/] 调试 org.ops4j.pax.web.extender.war.internal.WebAppWebContainerContext - 找不到资源 [5884890@qtp-16567002-0 - /adminmodule/] 信息 org.ops4j.pax.web.service.internal.HttpServiceContext - 找到资源:空 [5884890@qtp-16567002-0 - /adminmodule/] 调试 org.mortbay.jetty - 调用 servlet [5884890@qtp-16567002-0 - /adminmodule/] 调试 org.ops4j.pax.web.extender.war.internal.WebAppWebContainerContext - 搜索捆绑包 [com.cisco.zaloni.gwt.admin [1]] 以获取资源 [/ ],归一化为 [/] [5884890@qtp-16567002-0 - /adminmodule/] 调试 org.ops4j.pax.web.extender.war.internal.WebAppWebContainerContext - 资源作为 url [bundle://1.0:1/] [5884890@qtp-16567002-0 - /adminmodule/] 调试 org.mortbay.jetty - 响应 /adminmodule/ 403
真的很郁闷。
请帮忙。因为我是 OSGI 的新手。
劳尔
【问题讨论】:
我也有类似的问题 - 也许这篇博文会有所帮助:leshazlewood.com/2010/09/08/osgi-maven-pax-and-web-applications 【参考方案1】:在 1.0 之前的 pax-web 版本中存在各种错误,这些错误总是让我感到困惑。我建议首先更新以使用最新版本,pax-web 1.0.2 似乎是今天最新的。如果你不想那么高,我发现 0.8.1 是第一个真正开始正常工作的版本。
此外,用于部署 Web 应用程序包的 OSGi 标准需要使用您未列出的 Web-ContextPath 标头。这设置为您要从中提供内容的上下文根。
Apache Aries 项目有几个示例可能值得查看,以了解您的包与那些没有帮助的包有何不同。 Apache Aries 博客示例记录在 here,可以从 here 下载。
【讨论】:
以上是关于使用 pax web 在 OSGI 容器中部署 Web 应用程序时出错的主要内容,如果未能解决你的问题,请参考以下文章
Equinox OSGi + JPA Eclipselink + PAX JDBC 驱动适配器