Страница 1 из 1

Динамическая загрузка (перезагрузка?) классов

Добавлено: 31 май 2004, 11:42
mm
Интересует вот что.

Есть программа серверного типа, на Java. Работает себе потихонечку, ждет соединений по сокету. После соединения - обрабатывает это самое соединение (принимает запрос, отсылает ответ).
Но вот в какой то момент времени, скажем в 12-00, захотелось человеку подправить кусочек кода (маааленький такой), относящийся к обработке соединения. Что из этого получается. Новые классы естественно компилируются, НО. Программа то работает дальше, и пока ее не перезапустить, изменения в силу не вступят. А хочется сделать так, чтобы серверную прогу перезапускать не приходилось, т.е. скопировал новые классы, сделал еще что то (вопрос что - открытый), и оПа - все работае с новыми классами.

Добавлено: 31 май 2004, 11:55
AiK
mm, Classloader не подойдёт?

Добавлено: 31 май 2004, 11:57
mm
Class.forName что ли?

Добавлено: 31 май 2004, 12:06
AiK
mm, да нет, java.lang.ClassLoader.

Добавлено: 31 май 2004, 12:16
mm
Что-то в документации мутно написано...
нифига не понятно.
Если я делаю

ClassLoader.loadClass(className);

то:
1) если этот класс уже загружался, то ничего не происходит
2) иначе ищется класс с таким именем и загружается?

Это верно?

Re: Динамическая загрузка (перезагрузка?) классов

Добавлено: 02 июн 2004, 04:17
Bas
mm писал(а):...
и оПа - все работает с новыми классами.
Надо бы тебе переопределить ClassLoader - написать свой, который следил бы отдельной ниткой за изменениями классов, и в нужный момент этот класс перегружал бы... Но перегрузка связана со многими проблемами, основная из которых - следить за уже загруженными объектами данного класса.

некоторые мысли по этому поводу...

и еще одна ссылка (скачать исходники можно с sourceforge.net)

Добавлено: 02 июн 2004, 11:12
mm
Спасибо за ссылки. Насколько я понял, это непросто.
Буду разбираться.

Добавлено: 02 июн 2004, 11:18
mm
Еще я тут подумал. Вот написал я свой ClassLoader который каким то образом перезагружает нужные классы.
А потом мне захотелось перезагрузить ClassLoader )))). Причем никто это делать не запрещает, то есть такое тоже можно провернуть...

Я офигеваю от Java...