powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / osgi. hot deploy и classloading. Как это связано ?
20 сообщений из 20, страница 1 из 1
osgi. hot deploy и classloading. Как это связано ?
    #38633678
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не совсем понимаю механизм, который помогает osgi подгружать модули динамически.

То, что я понимаю:

-У нас на каждый модуль свой classloader

- Класслоадер загружает .class файлы в jvm

Целостной картины почему без OSGI нельзя, а с ним можно у меня нет.


Проясните пожалуйста.
...
Рейтинг: 0 / 0
osgi. hot deploy и classloading. Как это связано ?
    #38633770
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerЦелостной картины почему без OSGI нельзя, а с ним можно у меня нет.
Можно без OSGi. Можно самому на Classloader-ах написать. Можно взять Java Plug-in Framework. Был JSR какой-то, который вызвал серьезное недоумение OSGi. Для него тоже, возможно, что-то написано. JEE сервера всё время работали и про OSGi ничего не знали. Это только последние годы некоторые из них перешли на OSGi.

Другое дело, что существует масса нюансов во взаимодействии, версионности и пр. Которые в OSGi спецификации, вроде как, решены. А в своём велосипеде их придется и решать самому.
...
Рейтинг: 0 / 0
osgi. hot deploy и classloading. Как это связано ?
    #38633828
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

а в чём так сказать самая фишка то? За счёт чего это достигается?
Как "самому на Classloader-ах написать"?
...
Рейтинг: 0 / 0
osgi. hot deploy и classloading. Как это связано ?
    #38633877
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

ещё предпосылка появилась.

Как я понял мы не можем насильно cделать unload класса.

Но пазл всё равно ещё не сложился
...
Рейтинг: 0 / 0
osgi. hot deploy и classloading. Как это связано ?
    #38633887
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerКак "самому на Classloader-ах написать"?
Экземпляры классов и Classloader-ов это объекты в куче памяти. Как только они перестают быть нужны, GC имеет право их собрать, и тем самым выгрузить из JVM. Важно только чтобы экземпляры этих классов не утекали в глобальные реестры. Если хотя бы один класс, загруженный именно этим загрузчиком, без делегирования, не доступен для GC, то сам Classloader так же не доступен для GC как и все остальные классы им загруженные.

Например традиционная утечка в web приложении с велосипедным пулом, это регистрация JDBC драйвера в DriverManager. Которая не даёт возможность освободить весь .WAR модуль, загруженный выделенным Classloader-ом. В этом случае после редеплоя памяти не освобождается.
...
Рейтинг: 0 / 0
osgi. hot deploy и classloading. Как это связано ?
    #38633889
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerКак я понял мы не можем насильно cделать unload класса.
Ну, не то чтобы совсем не можем. В Hotspot Java 6 появился ключ, который через System.gc() позволяет форсировать сборку мусора в PermGen Space. Таким образом, если классы нигде не утекли, можно "cделать unload". Не помню остался ли этот ключ в Java 7 и Java 8, особенно в связи с отказом от PermGen.
...
Рейтинг: 0 / 0
osgi. hot deploy и classloading. Как это связано ?
    #38633891
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Blazkowiczбез делегирования

не понял что это значит в вашем контексте
...
Рейтинг: 0 / 0
osgi. hot deploy и classloading. Как это связано ?
    #38633894
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

мне не нагуглить пример самописного велосипедного hot deploy. По идее ведь и сервер не обязательно.


Можно например написать 2 потока один пишет какую-то строку в вечном цикле... второй сначала ждёт, потом подменяет .class файл класса потока.


Это возможно на коленке написать или требует серьезных по меркам форума трудозатрат?
...
Рейтинг: 0 / 0
osgi. hot deploy и classloading. Как это связано ?
    #38633896
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

ну и соответственно после подмены class файла выводиться будет новая строка....


ну или ещё какие варианты предложите попроще да понагляднее.
...
Рейтинг: 0 / 0
osgi. hot deploy и classloading. Как это связано ?
    #38633915
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Однажды я делал несложный сервлет и, соответственно, менял его реализацию.
После этого в новые классы копировались в WEB-INF/lib/classes (с сохранением структуры каталогов) и обновлялся тайм-штамп дескриптора контекста или web.xml при автоматическом развёртывании.
Остальное делал сервлет-контейнер (Tomcat).
Понятно, что это не хот-патч, но вполне себе оперативное развёртывание.
В случае war-файлов контейнеры позволяют использовать их распакованный вариант. Это, конечно, не по стандарту, но, вроде как, общепринятая фича, которая сильно ускоряет обновление и перезапуск приложения.
Это я всё к тому, что, может быть, проще надо быть?
...
Рейтинг: 0 / 0
osgi. hot deploy и classloading. Как это связано ?
    #38633927
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov,

на самом деле просто интересно докапаться до истины как эта штука работает, в чем основная идея. А то получается, что нефига и не понимаю..

Ну кстати похожий случай....ведь по стандарту если мы меняем jsp, то контейнер на лету должен отразить наши изменения, а jsp ведь это сервлет, то есть есть class файл.
...
Рейтинг: 0 / 0
osgi. hot deploy и classloading. Как это связано ?
    #38633934
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerведь по стандарту если мы меняем jsp, то контейнер на лету должен отразить наши изменения, а jsp ведь это сервлет, то есть есть class файл.Не совсем.
Если говорить о tomcat, то сервлет-контейнер проверяет изменения jsp-файлов тогда и только тогда, когда находится в режиме разработки (по умолчанию). Но эту фичу можно выключить в web.xml и тогда, после первого обращения, перекомпиляции происходить не будет.
Все скомпилированные классы находятся в отдельном временном каталоге. Если в каталоге появилась новая реализация, а старый класс был выгружен сборщиком мусора - новый вариант загрузится автоматически, когда вновь потребуется.
...
Рейтинг: 0 / 0
osgi. hot deploy и classloading. Как это связано ?
    #38633937
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov,

ну вообще хотелось бы апрув, ибо я слышал другую версию, но в целом это доказывает, что hot deploy иногда ближе чем кажется
...
Рейтинг: 0 / 0
osgi. hot deploy и classloading. Как это связано ?
    #38633940
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerну вообще хотелось бы апрувЧего?
Того, что jsp-компиляются в временный каталог? Достаточно один раз туда заглянуть.
Или моих измышлений на тему когда происходит загрузка? Так, вроде, везде указано, что JVM грузит классы по запросу, а не при старте. Нет запроса - нет и загрузки. Ну а сами запросы могут быть из разных неожиданных мест.
...
Рейтинг: 0 / 0
osgi. hot deploy и classloading. Как это связано ?
    #38633942
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov,

Basil A. Sidorovизмышлений на тему когда происходит загрузка

Basil A. Sidorov Если говорить о tomcat , то сервлет-контейнер проверяет изменения jsp-файлов тогда и только тогда, когда находится в режиме разработки (по умолчанию).

Впротивовес я слышал, что это часть спецификации(хз какой именно если честно).

Кулаком в грудь себя бить не стану, что я уверен, что это правда, но раз вопрос встал, то хочется каких-то серьезных доказательств.



Но и про основную тему - написать простейший hot deployer прошу остальных людей читающих эту тему не забывать.
...
Рейтинг: 0 / 0
osgi. hot deploy и classloading. Как это связано ?
    #38633948
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerно раз вопрос встал, то хочется каких-то серьезных доказательствВсё, о чём я написал подробно прокоменнтировано в web.xml этого самого tomcat. Доступно для изучения, проверки и всё такое прочее.Но и про основную тему - написать простейший hot deployer прошу остальных людей читающих эту тему не забывать.Самый простой вариант - ничего не делать.
Нет, как правило, такой задачи - "оперативная замена".
Есть, как правило, задача "минимизировать даун-тайм при обновлении приложения".
Простейший вариант - работать с распакованным war.
В том же tomcat, в актуальной седьмой версии, реализован механизм параллельного развёртывания.
Если две версии одного приложения не конфликтуют между собой, то они могут быть развёрнуты параллельно.
При этом контейнер будет направлять все "новые" запросы на новую версию, а после того, как отработают все "старые" запросы - "свернёт" старую версию, после чего её можно будет спокойно удалить.
...
Рейтинг: 0 / 0
osgi. hot deploy и classloading. Как это связано ?
    #38634088
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerне понял что это значит в вашем контексте
Мы же обсуждали уже в предыдущей теме, что по-умолчанию загрузчики делегируют загрузку родительским загрузчика. Соответсвенно сами, в этом случае, класс не загружает. Это делает "родитель". Тогда и класс этот связан с "родителем", а не текущим загрузчиком.
...
Рейтинг: 0 / 0
osgi. hot deploy и classloading. Как это связано ?
    #38634097
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerмне не нагуглить пример самописного велосипедного hot deploy.

https://www.google.com/search?q=classloader plugin
http://www.javaranch.com/journal/200607/Plugins.html и другие
Тот же JPF скачайте, посмотрите исходный код.

Вот ещё пара ссылок. Не совсем то, но для старта подходит.
http://www.javalobby.org/java/forums/t18345.html
http://javabender.blogspot.com/2012/07/hot-deploy-example.html

questionerЭто возможно на коленке написать или требует серьезных по меркам форума трудозатрат?
С нуля писать влом. Напишите прототип. Если не заработает, посмотрю, подскажу.
...
Рейтинг: 0 / 0
osgi. hot deploy и classloading. Как это связано ?
    #38634107
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerВпротивовес я слышал, что это часть спецификации(хз какой именно если честно).

JSP/Servlet спецификация требует возможности обновлять JSP не лету. Но она никак не ограничивает способ, которым это реализовано. Хоть интерпретацией.

questionerКулаком в грудь себя бить не стану, что я уверен, что это правда, но раз вопрос встал, то хочется каких-то серьезных доказательств.

За тебя спецификации нагуглить и поиском в них поискать ключевые слова?


questionerНо и про основную тему - написать простейший hot deployer прошу остальных людей читающих эту тему не забывать.
Простейший hot deployer выглядит так.
Код: java
1.
new URLClassLoader(new URL[]{urlToJarOrClassFolder}, currentClassLoader).loadClass("ClazzName");
...
Рейтинг: 0 / 0
osgi. hot deploy и classloading. Как это связано ?
    #38634157
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

авторМы же обсуждали уже в предыдущей теме, что по-умолчанию загрузчики делегируют загрузку родительским загрузчика. Соответсвенно сами, в этом случае, класс не загружает. Это делает "родитель". Тогда и класс этот связан с "родителем", а не текущим загрузчиком.

Да, вспомнил. Просто одно с другим что-то не соотнёс.



Так как это задача такая слегка "факультативная", я пока ее немного отложу всвязи с нехваткой времени, но как будут какие-нить результаты обязательно вернусь.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / osgi. hot deploy и classloading. Как это связано ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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