2011-08-01 19 views
1

私はOC4JにEJBコードでは動作しません。次のコードsnipetました:。出力ははgetClass()のgetClassLoader()のgetResource()OC4Jアプリケーションサーバーでは動作しません

String name = getClass().getPackage().getName(); 
name = name.replace('.','/'); 
URL url = this.getClass().getClassLoader().getResource(name); 
File directory = new File(url.getFile()); 
System.out.println("url.getFile() : " + url.getFile()); 

if (directory.exists())  // returns false!, why?? 
{ 
    System.out.println("directory.exists() : " + directory.exists()); 

} 

です:

url.getFile() : /C:/oc4j_extended_101330/j2ee/home/applications/MyEAR/MyEJB.jar!/com/me/a/service/impl/helper/Logger 

しかし、スタンドアロンモードでは、出力は次のようになります。

url.getFile() : /D:/eclipse/workspace/MyEJB/build/classes/com/me/a/service/impl/helper/Logger 
directory.exists() : true 

答えて

3

それは動作しませんURLが示すように、それはJARファイル内の場所を指す、ため、これはファイルシステムの既存の場所ではありません。/C:/oc4j_extended_101330/j2ee/home/applications/MyEAR/MyEJB.jar!/com/me/a/service/impl/helper/Loggerは既存のディレクトリではありません。

ほとんどの場合、リソースはjarファイルの中に埋め込まれているため、クラスローダーからロードされたリソースをファイルシステムの場所を参照することは決して避けてください。

関連する問題