getClass (). getClassLoader (). getResource () Не работает на сервере приложений OC4J - PullRequest
1 голос
/ 01 августа 2011

У меня есть следующий фрагмент кода, который не работает в коде EJB в 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

1 Ответ

3 голосов
/ 01 августа 2011

Это не работает, потому что, как указывает URL, оно указывает на местоположение внутри файла JAR, которое не является существующим местоположением файловой системы: /C:/oc4j_extended_101330/j2ee/home/applications/MyEAR/MyEJB.jar!/com/me/a/service/impl/helper/Logger не является существующим каталогом.

Вы никогда не должны полагаться на ресурс, загруженный из загрузчика классов, указывающий на местоположение в файловой системе, потому что большую часть времени ресурсы встроены в файлы JAR.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...