|
|
|
Кэширование объектов
|
|||
|---|---|---|---|
|
#18+
Всем привет! Подскажите пожалуйста как правильно организовать кеширование объектов? Описание логики программы: 1. Есть jar файл с main классом - main.jar 2. Есть jar файл с классами - test.jar 3. В test.jar есть класс MyClass 4. В методе main создаю объект URLClassLoader, загружаю test.jar 5. Создаю объект MyClass 6. Закрываю класслоудер (URLClassLoader) эти 6 пунктов отрабатывают правильно, так как мне нужно. далее... 7. В методе main создаю объект URLClassLoader, загружаю test.jar 8. Проверяю есть ли созданный объект MyClass, если есть пользуюсь тем что есть, если нет создаю. Тут мой гений разбивается о стену ограничений :) которая звучит примерно так "cannot cast MyClass to MyClass" вроде как классы загруженные разными класслоудерами - разные классы. Соответственно возникло два вопроса - "а правильно ли я строю свой кэш" или "как сделать "многоразовай" класслоуер". Конечно же я не мог поступить не правильно :) и выбрал правильный, на мой взгляд, подход к кэшированию объектов. Полез наследоваться от URLClassLouder и с помощью reflection добиваться успеха. Пока я по пути к успеху, хочу спросить у Вас - "а как вы организовали кэш объектов?" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 16:05 |
|
||
|
Кэширование объектов
|
|||
|---|---|---|---|
|
#18+
Лично я начал бы с общеизвестного вопроса: "Нужны ли мы нам?" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 16:09 |
|
||
|
Кэширование объектов
|
|||
|---|---|---|---|
|
#18+
ClassLoader не имеет вообще никакого отношения к "кешированию объектов". ClassLoader грузит классы, а не "объекты". Вроде как, это очевидно даже из названия. Для кеширования объектов существует 100500 разнообразных готовых решений. Например EhCache. Правильное кеширование само по себе задача не простая. Начать хотя бы с того что "кеширование объектов" в куче зачастую оказывает на много более пагубное воздействие на производительность системы, чем отсутствие этого кеша. Это связано с реализацией GC в Java. Попробуйте абстрагироваться от той ерунды что вы уже написали и кокретизировать супер-задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 16:12 |
|
||
|
Кэширование объектов
|
|||
|---|---|---|---|
|
#18+
Mandarin, Зачем каждый раз создаете ClassLoader? Хотите сделать что-то типа плагина, что бы если есть test.jar, то создавался объект, класс которого находится в нем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 17:04 |
|
||
|
Кэширование объектов
|
|||
|---|---|---|---|
|
#18+
pavel_nvMandarin, Зачем каждый раз создаете ClassLoader? Хотите сделать что-то типа плагина, что бы если есть test.jar, то создавался объект, класс которого находится в нем? верно test.jar это плагин подскажите еще как очистить кэш ClassLouder'a в котором хранятся загруженные классы? у меня вроде как получилось то, что я хотел, единственно что не нравиться, это то что надо программу перезапускать, для того чтобы загрузилась новая версия плагина. я хочу чтобы классы из моих плагинов загружались всегда новые а не брались из кэша. P/S/ спасибо за конкретный вопрос, а не "предупреждающий выстрел в воздух". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 18:59 |
|
||
|
Кэширование объектов
|
|||
|---|---|---|---|
|
#18+
Mandarinpavel_nvMandarin, Зачем каждый раз создаете ClassLoader? Хотите сделать что-то типа плагина, что бы если есть test.jar, то создавался объект, класс которого находится в нем? верно test.jar это плагин подскажите еще как очистить кэш ClassLouder'a в котором хранятся загруженные классы? у меня вроде как получилось то, что я хотел, единственно что не нравиться, это то что надо программу перезапускать, для того чтобы загрузилась новая версия плагина. я хочу чтобы классы из моих плагинов загружались всегда новые а не брались из кэша. P/S/ спасибо за конкретный вопрос, а не "предупреждающий выстрел в воздух". Может быть посмотреть на готовые решения? Например OSGi? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 06:51 |
|
||
|
Кэширование объектов
|
|||
|---|---|---|---|
|
#18+
MandarinP/S/ спасибо за конкретный вопрос, а не "предупреждающий выстрел в воздух". Мандарин снова в ударе. Вместо того чтобы спрашивать про непонятное и закрывать пробелы, сразу переводит тему в плоскость хамаства. Так что там с "кешированием объектов" и громкими классами? Для чего вам кешировать объекты? А на счет новых классов, так нет никакого "кеширования". Один загрузчик - одна версия класса. Другой загрузчик - другая. Какая нужна версия, ту и используй. Объекты же трансформировать от версии к версии можно только через сериализацию. Казалось бы при чем тут кэш? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 09:37 |
|
||
|
Кэширование объектов
|
|||
|---|---|---|---|
|
#18+
Предполагаю что у Мандарина проблема в том что он объявляет переменные экземпляром класса одного ClassLoader, а присваивает ему объект другого. Раньше с этим не сталкивался, но можно попробовать так: Интерфейс плагинов грузит Parent ClassLoader, а конкретные классы (реализующие интерфейс) - грузят URLClassLoader (у которых указан Parent ClassLoader). Ну и переменные объявлять и работать с ними через интерфейс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 10:02 |
|
||
|
Кэширование объектов
|
|||
|---|---|---|---|
|
#18+
pavel_nvПредполагаю что у Мандарина проблема в том что он объявляет переменные экземпляром класса одного ClassLoader, а присваивает ему объект другого. Раньше с этим не сталкивался, но можно попробовать так: Интерфейс плагинов грузит Parent ClassLoader, а конкретные классы (реализующие интерфейс) - грузят URLClassLoader (у которых указан Parent ClassLoader). Ну и переменные объявлять и работать с ними через интерфейс. Да, так большинство систем и работают, правда, есть проблема с обновлением интерфейса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 10:08 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=67&tid=2122870]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
32ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 341ms |

| 0 / 0 |
