2012-01-12 9 views
0

私たちのチームは、JBoss 4.2からWeblogic 10.3.4へのアプリケーションの移行を行います。getContextClassLoader()。getResource( "")JBoss上の戻りパス値中にWeblogicでnullを返します

耳のファイル名を知る必要があるアプリケーションにはいくつかのロジックがあります。この目的のために、以下のコードを使用してください:

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("")は本当に意味をなさないので、これはまったく驚くべきことではありません。空のStringはリソースパスではありません。

私の推測では、JBossは単にベースディレクトリの最後に引数を追加してから、その値を健全性チェックすることなくファイルとして解決していると思います。 Weblogicはもっと厳しいものをやっているかもしれません。

理由が何であれ、デザイナーが意図した方法で正式なAPIを使用するベースのEARディレクトリを見つけるより堅牢な方法を見つける必要があります。

編集:私の知る限り、JavaEE APIはあなたが望むことを行う方法を提供しません。 getResourceファッジを使用するか、クエリを使用してアプリケーションサーバー固有のロジックに依存する必要があります。 JMX MBeanはサーバーに組み込まれています。あなたは、両方のアプリケーションを動作させたい場合や、情報を必要としないようにアプリを変更したい場合は、実行時にサーバータイプを自動検出する必要があります。

+0

はい、これはスタイルのコーディングが悪いことを知っていますが、これはレガシーコードであり、おそらくnullを返すことはimmediatly上に表示されない他の問題の兆候となります。とにかく、ありがとう。 – nahab

+0

@nahab:ああ、アプリケーションサーバーの移行の喜び....決して滑らかではありません:) – skaffman

0

WLS 10.3.5の耳のアプリケーションからサービスを呼び出すときに直面していたのと同じ問題です。 Thread.currentThread().getContextClassLoader().getResource("META-INF/wsdls/test.wsdl");のリソース名を指定すると、my.jar!META-INF/wsdls/test.wsdlのような正しいURLパスが得られます。しかし、wsdlを読み込めません。

関連する問題