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

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

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

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

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


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

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

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

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

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

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

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

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

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

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


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


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

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


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

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

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

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

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

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

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

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



Но и про основную тему - написать простейший hot deployer прошу остальных людей читающих эту тему не забывать.
...
Рейтинг: 0 / 0
06.05.2014, 01:42
    #38633948
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
osgi. hot deploy и classloading. Как это связано ?
questionerно раз вопрос встал, то хочется каких-то серьезных доказательствВсё, о чём я написал подробно прокоменнтировано в web.xml этого самого tomcat. Доступно для изучения, проверки и всё такое прочее.Но и про основную тему - написать простейший hot deployer прошу остальных людей читающих эту тему не забывать.Самый простой вариант - ничего не делать.
Нет, как правило, такой задачи - "оперативная замена".
Есть, как правило, задача "минимизировать даун-тайм при обновлении приложения".
Простейший вариант - работать с распакованным war.
В том же tomcat, в актуальной седьмой версии, реализован механизм параллельного развёртывания.
Если две версии одного приложения не конфликтуют между собой, то они могут быть развёрнуты параллельно.
При этом контейнер будет направлять все "новые" запросы на новую версию, а после того, как отработают все "старые" запросы - "свернёт" старую версию, после чего её можно будет спокойно удалить.
...
Рейтинг: 0 / 0
06.05.2014, 09:14
    #38634088
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
osgi. hot deploy и classloading. Как это связано ?
questionerне понял что это значит в вашем контексте
Мы же обсуждали уже в предыдущей теме, что по-умолчанию загрузчики делегируют загрузку родительским загрузчика. Соответсвенно сами, в этом случае, класс не загружает. Это делает "родитель". Тогда и класс этот связан с "родителем", а не текущим загрузчиком.
...
Рейтинг: 0 / 0
06.05.2014, 09:19
    #38634097
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
osgi. hot deploy и classloading. Как это связано ?
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
06.05.2014, 09:24
    #38634107
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
osgi. hot deploy и classloading. Как это связано ?
questionerВпротивовес я слышал, что это часть спецификации(хз какой именно если честно).

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

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

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


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

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

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



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


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