|
|
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
Blazkowiczquestionerобщающиеся через rest или просто сидящие на одной базе Ну, это как два разрабочика, которые сидят за соседними столами, но общаются исключительно по email. Если они пересекаются раз в месяц - это нормально. А если плотно работают над общей задачей и общим кодом, то наверное такое общение может стать и узким местом. Тогда мы можем этих двух программистов посадить за один стол (задеплоить в один Tomcat), но что нам это даст? Как два варника, живушие в одном контейнере смогут делать прямые вызовы друг друга? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2017, 17:46 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
questionerКак два варника, живушие в одном контейнере смогут делать прямые вызовы друг друга? Как из одного метода можно вызвать другой метод внутри одной JVM? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2017, 18:24 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczquestionerКак два варника, живушие в одном контейнере смогут делать прямые вызовы друг друга? Как из одного метода можно вызвать другой метод внутри одной JVM? Да, но из разных приложений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2017, 20:32 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
Присоединяюсь к вопросу questioner. Было нужно, но я не разобрался, как нормальным образом получить ссылку на объект в другом приложение (Tomcat). Методы которые нашел, в одних версиях появлялись, в других исчезали.... В общем, кривость сплошная ((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2017, 21:18 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
questioner, - https://ru.wikipedia.org/wiki/Разделяемая_память - https://ru.wikipedia.org/wiki/New_I/O ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2017, 05:14 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevБыло нужно, но я не разобрался, как нормальным образом получить ссылку на объект в другом приложение (Tomcat). Методы которые нашел, в одних версиях появлялись, в других исчезали.... В общем, кривость сплошная ((( Так как ClassCastException не является "нормальной" ситуацией, то чего мы вдруг в этой теме озадачились "нормальным" способом передачи ссылки? В EJB есть локальные интерфейсы, которые являются то о чем я писал выше - оптимизацией вызовов между модулями. Через JNDI, я подозреваю, тоже можно получить ссылку на элементы другого модуля при особом желании. На сервлетах - не скажу. А вот EJB сплошь и рядом себя публикуют в JNDI. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2017, 09:07 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevПрисоединяюсь к вопросу questioner. Было нужно, но я не разобрался, как нормальным образом получить ссылку на объект в другом приложение (Tomcat). Методы которые нашел, в одних версиях появлялись, в других исчезали.... В общем, кривость сплошная ((( Как-то так: получаем другой контекст и у него из атрибутов берем объект. В Томкате надо в настройках контекста сказать crossContext="true", иначе ServletContext.getContext() будет всегда возвращать null. Код: java 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2017, 09:32 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
questionerДа, но из разных приложений Для операционки одно - jvm. А вот внутри нее класслоадеры разные. Собственно и создается впечатление, что это разные приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2017, 09:56 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
questionerВ java классы загружают в память класслоадеры. Этих класслоадеров по умолчанию 3. Можно добавлять и свои. Я не очень понял а зачем это всё нужно то? почему не сделать просто один лоадер, который всё грузит, все классы всегда видны, никаких проблем, солнышко светит, небо голубое. Я думаю что так и было когда-то. Сама по себе необходимость вводить новый уровень абстракции над packages появилась тогда, когда в браузер нужно было грузить апплеты. У которых априори не было никаких конвенций по именам. Вот здесь CL стал единственным и верным выходом. А иерархия? Ну .. она обычно возникает там где есть необходимость управления по цепочке. От верхнего к нижнему. Безопасность там. Политики и все такое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2017, 18:47 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
А, вообще, IMHO вопрос из разряда зачем топору обух. Одни ответят, чтоб на топорище держался, другие чтоб гвоздь забить можно было при случае. И все правы. В Java все пытаются сделать через классы. В том числе сделали и класслоадер. Класслоадер должен загружать любой класс. Так получилось, что и другой класслоадер. Вот и получилось. С одной стороны конструкция такая, с другой стороны можно и использовать. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2017, 10:45 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
Попробую сам объяснить) Свои класслоадеры нужны для: - загрузки классов из нестандартных источников: динамический classpath, сеть, шифрованные джарники и т.п. - горячей рекомпиляции классов - когда интерфейс и оригинальный класс находятся в базовом класслоадере, а новый экземпляр класса - в новом - изоляции библиотек и приложений - если нужно загрузить в одну JVM две версии одной и той же библиотеки, без разных класслоадеров не обойтись - выгрузки загруженных классов - т.к. класслоадер держит ссылку на экземпляр класса, класс можно выгрузить только вместе с его класслоадером ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2017, 13:31 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
scf- загрузки классов из нестандартных источников: динамический classpath, сеть, шифрованные джарники и т.п. Да, но при этом можно эту проблему решить через URLClassLoader и свой провайдер для URL через SPI для своего протокола. scf- горячей рекомпиляции классов - когда интерфейс и оригинальный класс находятся в базовом класслоадере, а новый экземпляр класса - в новом Ну, во-первых не "в базовом". Чтобы не было казусов, нужно чтобы старый и новый загрузчики жили в разных ветках иерархии. Во-вторых это не "рекомпиляция", а замена на лету. В-третьих если этот процесс нужен в разработке, то JRebel-у нет равных. А если в продакшне, то ещё попробуй напиши такой код, чтобы утечек в Metaspace не было. scf- изоляции библиотек и приложений - если нужно загрузить в одну JVM две версии одной и той же библиотеки, без разных класслоадеров не обойтись Вот это верно. scf- выгрузки загруженных классов - т.к. класслоадер держит ссылку на экземпляр класса, класс можно выгрузить только вместе с его класслоадером А это сложно назвать причиной для которой "свои класслоадеры нужны". Это просто уже нюанс в реализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2017, 13:45 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
scf, scf- горячей рекомпиляции классов - когда интерфейс и оригинальный класс находятся в базовом класслоадере, а новый экземпляр класса - в новом Этот пункт не понятен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2017, 13:48 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
questionerscf- горячей рекомпиляции классов - когда интерфейс и оригинальный класс находятся в базовом класслоадере, а новый экземпляр класса - в новом Этот пункт не понятен. Смотри Tomcat Parallel Deployment Тебе нужно обновить приложение. Но у тебя куча клиентов пользуются единственным сервером и выкидывать ты их не хочешь. Ты деплоишь новую версию war модуля в Tomcat. Она работает в отдельном ClassLoader-е. Все новые сессии Томкат создаёт на новом модуле. Ждешь пока старые сессии заэкспайрятся или разлогинятся, и можешь смело удалять старую версию. В результате ты на горячую заменил своё приложение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2017, 13:56 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
questionerscf, scf- горячей рекомпиляции классов - когда интерфейс и оригинальный класс находятся в базовом класслоадере, а новый экземпляр класса - в новом Этот пункт не понятен. Ну типа приходит к тебе json, на основании которого ты генеришь новый класс. Но не хочешь, чтоб этот новый класс случайно подменил что-то в том, что у тебя и так есть, исли в запросе предложат то же имя, что у тебя итак есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2017, 13:59 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczВо-вторых это не "рекомпиляция", а замена на лету.+1 Hot Swap ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2017, 14:06 |
|
||
|
Зачем нужна иерархичность загузчиков классов?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, да, "горячая замена" лучше подходит. Самодельная реализация бывает нужна, когда нужно отправлять приложению уведомления о том, что загружена новая версия. К примеру, автоматически обновлять страницу веб-приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2017, 14:12 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39385853&tid=2123252]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
82ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
| others: | 225ms |
| total: | 405ms |

| 0 / 0 |
