2012-01-12 92 views
0

我們的團隊將應用程序從JBoss 4.2遷移到Weblogic 10.3.4。getContextClassLoader()。getResource(「」)在Weblogic上返回null,同時在JBoss上返回路徑值

應用程序中有一些邏輯需要知道ear文件名。爲此,使用以下代碼:

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

此代碼在Spring初始化期間的部署階段執行。

而在JBoss上,這個工作正常,但在Weblogic getResource("")返回null在這種情況下。

所以我的問題是爲什麼這不起作用的Weblogic?


Additionaly我已經創建了返回的Thread.currentThread().getContextClassLoader().getResource("")價值,這個工程Weblogic上的代碼只有幾行小test.jsp的頁面。所以我做了小桌子,以更清晰的方式展示這種情況:

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

應用程序的結構是接下來的。 getResource("")碼放在裏面my.jar:在JBoss

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  

回答

1

這工作得很好,但在這種情況下的Weblogic getResource("")回報null

這並不令人驚訝,因爲getResource("")沒有任何意義。一個空字符串不是資源路徑。

我的猜測是JBoss只是將參數追加到基本目錄的末尾,然後將其作爲文件解析,而不進行任何理智的檢查。 Weblogic可能會做更嚴格的事情。

不管出於何種原因,您需要找到一個更強大的方法來查找基本EAR目錄,這個方法使用正式API,並以設計者的意圖。

編輯:據我所知,JavaEE API不提供任何你想做的事情。您將不得不依賴特定於應用服務器的邏輯,或者使用您的getResource軟糖,或者查詢例如嵌入在服務器中的JMX MBean。如果您希望自己的應用程序可以同時運行,那麼您需要在運行時自動檢測服務器類型,或者更改應用程序以使其完全不需要該信息。

+0

是的,我知道這是糟糕的風格編碼,但這是遺留代碼,可能返回空值可能是其他問題的跡象,不立即顯示。無論如何,謝謝你的指導。 – nahab 2012-01-12 19:45:29

+0

@nahab:啊,是的,應用程序遷移的喜悅....從來沒有像它應該是光滑的:) – skaffman 2012-01-12 19:46:49

0

我在WLS 10.3.5上從耳朵應用程序中調用服務時遇到了同樣的問題。如果您將資源名稱的路徑設置爲 Thread.currentThread().getContextClassLoader().getResource("META-INF/wsdls/test.wsdl");,則會提供正確的URL路徑,如my.jar!META-INF/wsdls/test.wsdl。但無法加載wsdl。

相關問題