Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как заставить работать Class.forName(String) со совим ClassLoader / 7 сообщений из 7, страница 1 из 1
20.07.2007, 17:12:46
    #34674147
Олег Гапон
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить работать Class.forName(String) со совим ClassLoader
Как заставить работать Class.forName(String) со совим ClassLoader ?

Такой вариант естесно не помогает
Thread.currentThread().setContextClassLoader(myLoader);
...
Рейтинг: 0 / 0
20.07.2007, 17:20:57
    #34674182
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить работать Class.forName(String) со совим ClassLoader
Class.forName без указания загрузчика использует тот загрузчик, которым был загружен класс вызывающий этот метод.
...
Рейтинг: 0 / 0
20.07.2007, 17:42:39
    #34674256
Олег Гапон
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить работать Class.forName(String) со совим ClassLoader
А почему при таком раскладе
Код: plaintext
1.
2.
3.
 Class  testClass =  Class .forName("TestClass", true, myClassLoader);
System.out.println("ClassLoader: " + testClass.getClassLoader().getClass());


Выдаёт

Код: plaintext
1.
2.
ClassLoader:  class  sun.misc.Launcher$AppClassLoader


Я ведь загружал TestClass своим загрузчиком....
...
Рейтинг: 0 / 0
20.07.2007, 18:22:31
    #34674386
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить работать Class.forName(String) со совим ClassLoader
Такое поведение возможно если у myClassLoader был указан родительский загрузчик (sun.misc.Launcher$AppClassLoader). При запросе класса у myClassLoader последний делегирует поиск своему родителю. А сам ищет только если родителю не удалось найти класс. Судя по всем родитель его таки находит.

Это поведение можно предотвратить либо не указывая родительский загрузчик, либо переопределив соответствующие методы своего загрузчика. Дабы оный не делегировал поиск когда не надо кому не надо. Ж)
...
Рейтинг: 0 / 0
20.07.2007, 18:28:53
    #34674403
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить работать Class.forName(String) со совим ClassLoader
Значит он загрузился раньше. Либо myClassLoader==null.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 import  java.net.*;
 public   class  testCL
{
     public   static   void  main(String[] args)  throws  Exception
    {
        URLClassLoader cl = new  URLClassLoader( new  URL[] { new  URL("file:///d:/oracle/ora10201/jdbc/lib/ojdbc14.jar")});
         Class  c =  Class .forName("oracle.jdbc.driver.OracleDriver", true, cl);
        System.out.println(c.getClassLoader().getClass());
    }
}
Код: plaintext
 class  java.net.URLClassLoader
...
Рейтинг: 0 / 0
20.07.2007, 18:30:53
    #34674406
Олег Гапон
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить работать Class.forName(String) со совим ClassLoader
Спасибо Blazkowicz !!!

Получилось !!!

Куда пиво отсылать ???
...
Рейтинг: 0 / 0
20.07.2007, 18:36:45
    #34674421
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить работать Class.forName(String) со совим ClassLoader
Олег ГапонСпасибо Blazkowicz !!! Получилось !!!
Ну, ждем вопросов про ClassCastException и другие интересности в среде с множеством загрузчиков.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как заставить работать Class.forName(String) со совим ClassLoader / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]