![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| kashka |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 29.11.2004 Где: Wolfenbuettel, Ge rmany Репутация: нет Всего: 1 |
Проблемма такая: уже во время выполнения программы надо загружать jar файл на сервер и из него соответственно классы.
Если я использую URLClassLoader то Tomcat-овский ClassLoader ети классы не видит. Может кто знает как ето решается. |
|||
|
||||
| Tony |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1159 Регистрация: 3.3.2006 Где: Riga Репутация: 1 Всего: 12 |
Moment.Если app загружает классы(Class forName("")),то Tomcatovskij class loader и не будет знать о нём.Если я не ошибаюсь, то при загрузке апп сна4ала ищутся классы загружаются апп класс лоадером ,затем если их не найдено,то вызывается Томкат класс лоадер(по цепо4ке идёт загрузка классов).А 4то ты хо4ешь вообще сделать? Коротко написала(бе о4ень понатно).
|
|||
|
||||
| kashka |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 29.11.2004 Где: Wolfenbuettel, Ge rmany Репутация: нет Всего: 1 |
Вобщем задача такая:
студенты получают задание имплементироварь заданный интерфейс, запаковать свой классы в jar архив и загрузить етот архив на сервер. После загрузки jar на сервере проводится проверка с junit-тест классами, правильно ли студенты выполнили свою задачу. Я сачала сделала junit- овскую часть, в еклипсе все работало, после внедрения в томкат перестало. Мне нужно както так классы загрузить что бы томкат их тоже знал. |
|||
|
||||
| Tony |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1159 Регистрация: 3.3.2006 Где: Riga Репутация: 1 Всего: 12 |
Например в сервлете вставить Class.forName("moj klasss zapakovannyj v jar");После этого загрузится классы.
|
|||
|
||||
| kashka |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 29.11.2004 Где: Wolfenbuettel, Ge rmany Репутация: нет Всего: 1 |
В том то и дело что не загружается, те что к моменту старта в WEB-INF/lib/ лежат грузятся без проблем, а классы которые уже во время исполнения аппликации в WEB-INF/lib/ копируются, он не находит
|
|||
|
||||
| Tony |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1159 Регистрация: 3.3.2006 Где: Riga Репутация: 1 Всего: 12 |
А как нас4ёт classpath ? Правелен?
|
|||
|
||||
| kashka |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 29.11.2004 Где: Wolfenbuettel, Ge rmany Репутация: нет Всего: 1 |
Да
|
|||
|
||||
| Tony |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1159 Регистрация: 3.3.2006 Где: Riga Репутация: 1 Всего: 12 |
Провёл эксперимент.Написал апп.В катором при загрузги станице срабативает Action.В нём делаю
Class.forName("com.mysql.jdbc.Driver"); Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1/test","root",""); jdbc connectior находится в етом же пакете.Происходит java.lang.ClassNotFoundException. Kak я предпологаю это проишодит из-за не стыковок пакетов.Тоесть мой Аction нахоится в com.acid.tester.actions.В этом пакете находится connector jdbc(ну какбудто его зака4али на сервер) где вызываем класс com.mysql.jdbc.Driver.А должен быть com.acid.tester.actions.com.mysql.jdbc.Driver ! Решить можно так.Когда все студентики загрузят jari(jari uplodatsja v <tvoj_proekt/lib>).Затем прегрузить приложение(перезаписав хмл в tomcat\conf\Catalina\localhost\tvoj_app.xml).Имея базу данных у4еников по о4ереди вызиваешь классы. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
Нет, такого не может быть. Короткое имя класса и директива import существуют только на этапе компиляции. В самих классах фигурируют только полные имена классов. Плюс такого понятия как "относительный пакадж" не существует вообще. kashka, а ты Thread.setContextClassLoader() делала? И вообще расскажи как ты пыталась грузить классы. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| kashka |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 29.11.2004 Где: Wolfenbuettel, Ge rmany Репутация: нет Всего: 1 |
Вобщем так:
я сначала сделала junit часть, т.е. тестировала в еклипсе
в Tester я просматривала jar на наличие файлов с расширением .class, потом загружала соответствующие junit тест классы (находятся в TestClasses.jar) все работало. После попытки подключитьвсе ето дело к моему серверному приложению, я получаю ошибку junit.framework,TestCase .ClassNotFoundException, я сначала думала что ето томкат библиотеку в WEB-INF/lib junit.jar не находит. Оказывается что то что томкатовским ClassLoader junit.jar загружает, мой URLClassLoader loader не видит. Добавлено @ 14:29 Тогда я попробывола мой .jar файлы положить в WEB-INF/lib и все бы хорошо да вот только два я могу еше до запуска приложения скопировать и там проблем не возникает, а вот третий (который студентческий) копируется туда уже после запуска, и я получаю при попытке
ошибку ClassNotFoundException Добавлено @ 14:30 А Thread.setContextClassLoader() я не делала надо попробовать. Добавлено @ 14:35 Попробывала не получается |
||||
|
|||||
| Tony |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1159 Регистрация: 3.3.2006 Где: Riga Репутация: 1 Всего: 12 |
Что зна4ет не может быть? Я специлано написал тестовие app чтобы это проверить.А насчёт "относительный пакадж" я не писал. |
||||||
|
|||||||
| Tony |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1159 Регистрация: 3.3.2006 Где: Riga Репутация: 1 Всего: 12 |
Так попробуй: this.getClass().getClassLoader().findClass("class_name");
|
|||
|
||||
| kkorsakoff |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.10.2005 Где: Санкт-Петербург Репутация: 4 Всего: 14 |
А там ли лежат jar'ы?
Используется "file:" + "jars/EKSWS_JUnit.jar" То есть относительно рабочей директории, а она, насколько я понимаю, может меняться, смотря откуда ты будешь запускать томкат. Может стоит использовать пути относительные к директории веб-приложения через servletContext.getRealPath("/jars/EKSWS_JUnit.jar")? Просто предположение на глупые грабли |
|||
|
||||
| kashka |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 29.11.2004 Где: Wolfenbuettel, Ge rmany Репутация: нет Всего: 1 |
Проблему решила
Все дело было в том что Tomcat свой ClassLoader от других закрывает (т.е. классы загруженные Tomcat-ом и например URLClassLoader, даже если они одинаковые все равно считаются различными). В моем случае была проблемма с библиотекой junit. Я ее грузила и вTomcatClassLoader -ом и моим URLClassLoader. А решение такое: грузить только URLClassLoader-ом а в коде Servlet-a использовать Reflektion. Вот Код до:
и после
|
||||
|
|||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Работа с сетью | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |