有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

jakarta内Java归档的ee类路径。JBoss 6.2上web应用程序的ear文件

背景

在JBoss上运行J2EE应用程序。内容存储库包含:

  • 网络应用。战争
  • 报告服务。耳朵
  • 额外的。jar文件

ReportService.ear文件包含:

/ReportService-ejb.jar
/lib/*.jar

{}包含:

/META-INF/reports/Report.jasper
/META-INF/reports/Subreport.jasper

环境

  • Java 1.7
  • NetBeans 8.0.2
  • JBoss 6.2.0 GA

问题

以下路径必须位于类路径上,以便在Web应用程序运行时,报表服务可以找到META-INF目录的根目录:

ReportService.ear >> ReportService-ejb.jar >> /META-INF/.

也就是说,Thread.currentThread().getContextClassLoader().getResource(filename)必须能够在以下情况下读取文件/META-INF/reports/Report.jasper

filename = "/META-INF/reports/Report.jasper"

问题在于,当reporting service尝试读取该文件时,会出现以下错误,这是一条自定义错误消息,仅当getResource无法找到该文件时才会发生:

java.io.IOException: Missing resource path: '/META-INF/reports/Report.jasper'.

在针对部署(通过RMI)运行报表服务单元测试时,报表会成功运行。这可能是因为NetBeans使报表模板文件(即/META-INF/reports/*.jasper文件)的本地副本可用

其他细节

关于Web应用程序:

  • MANIFEST.MF由NetBeans使用project.properties自动生成,当前不包含Class-Path
  • jboss-app.xml文件只包含<jboss-app/>
  • jboss-web.xml文件包含上下文根、安全域和其他配置项
  • application.xml不存在

WebApp.war文件也可以捆绑并部署在WebApp.ear

问题:

必须使用类路径更新哪个文件,以便Web应用程序可以使用报表服务在嵌套在ReportService.ear中的/META-INF/目录中成功查找文件

注意:构建过程(通过build.xml和build impl.xml)会在每次构建WebApp.war时覆盖MANIFEST.MF

想法

  • 更新生成脚本更改构建impl。xml来更新WebApp的清单。war设置引用ReportServices的Class-Path项。罐子它将如何找到这个问题。jar文件(如果它在ReportService中)。耳锉

  • 更新Web应用程序EAR清单。将MANIFEST.MF内的WebApp.ear更改为包含Class-Path:

资源


共 (1) 个答案

  1. # 1 楼答案

    改变:

    Thread.currentThread().getContextClassLoader().getResource(filename)
    

    致:

    getClass().getResource(filename)