使用 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 驱动适配器

OSGI容器中的Scala?

如何在 OSGi 中使用 servlet

Java Web应用集成OSGI

在嵌入式 Jetty Web 容器内运行 OSGi 容器。可能的?

如何使用 Maven 将第 3 方 OSGi 捆绑包添加到部署包中?