JBoss 6.2上web应用程序的.ear文件中Java归档的Classpath



背景

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

  • WebApp.war
  • ReportService.ear
  • 其他.jar文件

ReportService.ear文件包含:

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

ReportService-ejb.jar包含:

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

环境

  • Java 1.7
  • NetBeans 8.0.2
  • JBoss 6.2.0 GA

问题

以下路径必须位于CLASSPATH上,以便在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"

问题是,当报告服务尝试读取文件时,会出现以下错误,这是一条自定义错误消息,只有在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中。

问题

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

注意:每次构建WebApp.war时,构建过程(通过build.xml和build-inpl.xml(都会覆盖MANIFEST.MF

想法

  • 更新生成脚本更改build-impl.xml以更新WebApp.war的清单,从而设置引用ReportServices.jar的Class-Path条目。如果.jar文件在ReportService.ear文件中,它将如何找到该.jar文件?

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

资源

  • JBoss服务配置指南
  • 向NetBeans生成的清单添加类路径
  • EJB 2和J2EE封装
  • CodeRanch线程
  • 打包EJB 3应用程序
  • AS7中的EAR类加载

更改:

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

至:

getClass().getResource(filename)

相关内容

  • 没有找到相关文章

最新更新