Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ClassLoader, Как загрузить классы не включенные в jar 
:(
    Опции темы
APXEOLOG
Дата 29.11.2011, 07:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 12.4.2007
Где: Мурманск

Репутация: нет
Всего: 1



Существует необходимость не включать часть классов в jar файл. Причем именно на этапе сборки jar'a, при компиляции они присутствуют, как и ссылки на них по всему коду. Затем в программе я пробую загрузить нехватающие классы из другого источника с помощью своего ClassLoader'a, что успешно происходит. Однако когда программа пытается обратиться к этим классам из кода, вылетает NoDefClassExceprtion. Я пробовал ставить свой лоадер дефолтным для потока (проблема в том что в приложении много потоков), но это не помогло... В чем может быть проблема, может быть кто-то знает решение? И еще вопрос, есть ли вариант назначить лоадер для всех потоков создающихся в программе?
--------------------
Ученые долго не знали как назвать частоту.Потом так и назвали Hz.
PM MAIL ICQ   Вверх
Skipy
Дата 29.11.2011, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 487
Регистрация: 24.8.2006
Где: Москва, Россия

Репутация: 6
Всего: 16



А чем вызвана необходимость?


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
math64
Дата 29.11.2011, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Если эти классы должны находиться в другом jar, и путь до этого jar известен при компиляции, добавь в манифест
Код

Class-Path: path/to/mylib/mylib.jar

Если не известен - указывай путь из командной строки.
PM   Вверх
APXEOLOG
Дата 29.11.2011, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 12.4.2007
Где: Мурманск

Репутация: нет
Всего: 1



Цитата(Skipy @  29.11.2011,  11:35 Найти цитируемый пост)
А чем вызвана необходимость?


Это механизм защиты добавленного в программу кода. Эти классы подгружаются по интернету после аутентификации пользователя. Так как защита навешивается на уже готовую программу мне бы хотелось минимизировать изменения в коде.


Цитата(math64 @  29.11.2011,  12:51 Найти цитируемый пост)
Если не известен - указывай путь из командной строки. 

Классы запакованы в специальном бинарном формате который парсится внутри программы.
--------------------
Ученые долго не знали как назвать частоту.Потом так и назвали Hz.
PM MAIL ICQ   Вверх
aleksandy
Дата 30.11.2011, 05:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 260
Регистрация: 17.12.2006

Репутация: 4
Всего: 5



Цитата(APXEOLOG @  29.11.2011,  16:44 Найти цитируемый пост)
Классы запакованы в специальном бинарном формате который парсится внутри программы. 

Распаковывай классы во временные файлы и грузи обыкновенным URLClassLoader-ом
PM   Вверх
APXEOLOG
Дата 30.11.2011, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 12.4.2007
Где: Мурманск

Репутация: нет
Всего: 1



Насколько я понял документацию, лоадеры не смотрят по нисходящей, только по восходящей иерархии. А так как jar файл загружается системным загрузчиком, даже наследуя от него кастомный лоадер и загружая в него классы, я все равно буду получать NoDefClassException в моем коде...
--------------------
Ученые долго не знали как назвать частоту.Потом так и назвали Hz.
PM MAIL ICQ   Вверх
COVD
Дата 30.11.2011, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Цитата

Эти классы подгружаются по интернету после аутентификации пользователя.

Приложения на модульной, плагинной архитектуре (OSGi, Netbeans Platform) примерно так работают. Сначала стартует контейнер плагинов. Потом он в рантайме загружает-выгружает необходимые плагины. Плагины в виде jar-ов доступны из сети по известным контейнеру адресам. Контейнер сам управляется с класслоадерами.  

Очевидно, готовую программу можно перевести на плагинную архитектуру постепенно. Начать можно с того, чтобы готовая программа по отношению к контейнеру стала плагином. Пользователь будет запускать контейнер, контейнер будет запускать единственный плагин. Ничего пока не изменилось. Преимущества появятся, когда мы начнем делать добавки, которые должны быть оформлены как отдельные плагины. Главная программы может общаться с плагинами только через контейнер, поэтому ее тоже придется менять, но это будут постепенные изменения, по мере добавления плагинов. Не требуется сразу разбивать всю главную программу на плагины.  

Это сообщение отредактировал(а) COVD - 30.11.2011, 18:51
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0482 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.