java - getContextClassLoader().getResource ("") 在 Weblogic 上返回 null,而在 JBoss 上返回路径值

标签 java spring weblogic classloader

我们的团队将应用程序从 JBoss 4.2 迁移到 Weblogic 10.3.4。

应用程序中有一些逻辑需要知道ear文件名。为此,使用以下代码:

URL url = Thread.currentThread().getContextClassLoader().getResource("");

此代码在 Spring 初始化期间的部署阶段执行。

在 JBoss 上这工作正常,但在这种情况下,在 Weblogic getResource("") 上返回 null

所以我的问题是为什么这在 Weblogic 中不起作用?

<小时/>

此外,我还创建了一些小型 test.jsp 页面,其中只有几行代码,返回 Thread.currentThread().getContextClassLoader().getResource("") 的值,这适用于 Weblogic 。所以我做了一个小表格来更清楚地展示这种情况:

+----------+-------------+------------------------------+
|          | on JSP page | during spring initialization |
+----------+-------------+------------------------------+
| JBoss    | works       | works                        |
| Weblogic | works       | returns null                 |
+----------+-------------+------------------------------+

Structure of application is next. getResource("") code is placed inside my.jar:

my.ear
|
+-my.war
  |
  +-WEB-INF
  | |
  | +-lib
  |   |
  |   +-my.jar
  |   +-org.springframework.aop-3.0.5.RELEASE.jar
  |   +-org.springframework.beans-3.0.5.RELEASE.jar
  |   +-org.springframework.context.support-3.0.5.RELEASE.jar
  |   +-org.springframework.context-3.0.5.RELEASE.jar
  |   +-org.springframework.core-3.0.5.RELEASE.jar
  |   +-other jars
  |
  +-test.jsp
  +-jsp pages    

最佳答案

on JBoss this works fine but on Weblogic getResource("") return null in this case.

这并不完全令人惊讶,因为 getResource("") 并没有任何意义。空字符串不是资源路径。

我的猜测是 JBoss 只是将参数附加到基本目录的末尾,然后将其解析为文件,而不对该值进行任何健全性检查。 Weblogic 可能正在做一些更严格的事情。

无论出于何种原因,您都需要找到一种更强大的方法来定位基本 EAR 目录,该方法按照设计者预期的方式使用正式的 API。

编辑:据我所知,JavaEE API 没有提供一种方法来完成您想要的操作。您将不得不依赖于应用程序服务器特定的逻辑,要么使用您的 getResource 软糖,要么查询例如嵌入服务器中的 JMX MBean。如果您希望您的应用程序能够在这两种服务器上运行,您需要在运行时自动检测服务器类型,或者更改应用程序以使其根本不需要这些信息。

关于java - getContextClassLoader().getResource ("") 在 Weblogic 上返回 null,而在 JBoss 上返回路径值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8841164/

相关文章:

java - 碧 Jade 报告 : How to use subreport return values as input for Main Report Variable Calculation

Java 语言检测在给定相同输入的情况下返回不同的概率

java - 如何查找/更改 hibernate 查询

java - CXF 超时不起作用

java - 如何停止从 weblogic 容器中的 servlet 生成的线程?

log4j - weblogic 中具有多个 log4j.xml 的多个应用程序

JAVA_HOME "bug"

Java:数据库连接代码问题

java - Spring Framework AliasFor注解困境

java - 处理两个或多个 noSQL 数据库事务的方法是什么?