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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Classpath для отдельного web приложения, под Tomcat 
:(
    Опции темы
3,14
Дата 4.10.2005, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



Как в tomcat-е добавить папки в classpath для отдельно взятого web приложения?


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
batigoal
Дата 4.10.2005, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

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



По-моему, достаточно просто положить их в webapps/yourApp/WEB-INF/lib.
http://jakarta.apache.org/tomcat/tomcat-5....ader-howto.html

Или нужно добавить их в classpath, не меняя реального расположения?

Это сообщение отредактировал(а) Lamer George - 4.10.2005, 17:03


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
3,14
Дата 5.10.2005, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



Цитата(Lamer @ 4.10.2005, 17:01)
Или нужно добавить их в classpath, не меняя реального расположения?

Именно так


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
pvo
Дата 5.10.2005, 13:32 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











ИМХО, свой classloader написать нужно
  Вверх
batigoal
Дата 5.10.2005, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

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



Видимо, да. Там еще в доках есть какой-то ClassLoaderFactory...


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
3,14
Дата 5.10.2005, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



А доки или примеры по написанию ClassLoader-ов есть где-нить? А то ничего не нашёл smile


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
pvo
Дата 5.10.2005, 16:46 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(3)
А доки или примеры по написанию ClassLoader-ов есть где-нить? А то ничего не нашёл smile

Гугл рулит, однако smile
http://www.google.ru/search?hl=ru&q=implem...0%B2+Google&lr=

  Вверх
Stampede
Дата 5.10.2005, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Цитата(3)
А доки или примеры по написанию ClassLoader-ов есть где-нить?


А tux для кого старался? Вам сюда: Разработка собственного загрузчика классов.



--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
3,14
Дата 6.10.2005, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



Разработка ClassLoader это конечно хорошо, но как это всё к Tomcat-у прикрутить, желательно не трогая исходного кода самого web приложения?


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
pvo
Дата 6.10.2005, 09:43 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











  Вверх
3,14
Дата 6.10.2005, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



И всё равно что-то не выходит smile
Поправил server.xml:
Код

        <!-- Provisioning Context -->
        <Context path="/prov" docBase="prov" debug="1"
                 reloadable="true" crossContext="true">
          <Loader debug="1" loaderClass="com.nortelnetworks.utils.ExternalClassLoader"/>
          <Logger className="org.apache.catalina.logger.FileLogger"
                     prefix="localhost_prov_log." suffix=".txt"
           timestamp="true"/>
        </Context>


Написал ClassLoader:
Код

package com.nortelnetworks.utils;

import java.io.File;    
import java.net.URL;    
import org.apache.catalina.loader.WebappClassLoader;

public class ExternalClassLoader extends ClassLoader {    
    protected WebappClassLoader currentLoader = null;    
    public static final String path = "D:/ims/classes";
 
    public ExternalClassLoader() {    
      try {
         currentLoader = new org.apache.catalina.loader.WebappClassLoader();
         currentLoader.addRepository(new File(path).toURL().toString());
       }
       catch(Exception e) {}
    }    
    
    public ExternalClassLoader(java.lang.ClassLoader parent) {    
      try {
         currentLoader = new org.apache.catalina.loader.WebappClassLoader(parent);
         currentLoader.addRepository(new File(path).toURL().toString());
       }
       catch(Exception e) {}
    }    
    
    protected synchronized Class findClass(String className) throws ClassNotFoundException {    
     return currentLoader.findClass(className);
    }
    
    protected URL findResource(String name) {    
     return currentLoader.findResource(name);
    }    
     
}


Выложил package в server/lib, а при запуске tomcat-а в stdout.log валится ошибка:
Код

Catalina.start: LifecycleException:  start: :  java.lang.ClassCastException
LifecycleException:  start: :  java.lang.ClassCastException
    at org.apache.catalina.loader.WebappLoader.start(WebappLoader.java:631)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:3486)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1141)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:707)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1141)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:316)
    at org.apache.catalina.core.StandardService.start(StandardService.java:450)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:2143)
    at org.apache.catalina.startup.CatalinaService.start(CatalinaService.java:222)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:324)
    at org.apache.catalina.startup.BootstrapService.start(BootstrapService.java:198)
    at org.apache.catalina.startup.BootstrapService.main(BootstrapService.java:260)
----- Root Cause -----
java.lang.ClassCastException
    at org.apache.catalina.loader.WebappLoader.createClassLoader(WebappLoader.java:735)
    at org.apache.catalina.loader.WebappLoader.start(WebappLoader.java:608)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:3486)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1141)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:707)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1141)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:316)
    at org.apache.catalina.core.StandardService.start(StandardService.java:450)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:2143)
    at org.apache.catalina.startup.CatalinaService.start(CatalinaService.java:222)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:324)
    at org.apache.catalina.startup.BootstrapService.start(BootstrapService.java:198)
    at org.apache.catalina.startup.BootstrapService.main(BootstrapService.java:260)
Bootstrap: Service started



--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
pvo
Дата 6.10.2005, 21:50 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Чем хорош томкат и другие продукты с открытым кодом, так это тем, что есть исходники и можно глянуть, что там происходит ...

В томкате версии 5.0.28 classLoader создается в следующем методе:

Код

 /**
     * Create associated classLoader.
     */
    private WebappClassLoader createClassLoader()
        throws Exception {

        Class clazz = Class.forName(loaderClass);
        WebappClassLoader classLoader = null;

        if (parentClassLoader == null) {
            parentClassLoader = Thread.currentThread().getContextClassLoader();
        }
        Class[] argTypes = { ClassLoader.class };
        Object[] args = { parentClassLoader };
        Constructor constr = clazz.getConstructor(argTypes);
        classLoader = (WebappClassLoader) constr.newInstance(args);

        return classLoader;

    }


Соответсвенно, не нужно верить документации, в которой написано, что custom classLoader должен быть наследником от ClassLoader, сделать его наследником от WebappClassLoader. Думаю, что проблема будет успешно решена. smile
  Вверх
batigoal
Дата 6.10.2005, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

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



pvo
Уже не в первый раз читаю Ваши интересные ответы. Предлагаю зарегистрироваться - так будет удобнее.



--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
3,14
Дата 7.10.2005, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



И в прямь помогло. pvo, был юы ты зарегистрированным, влепил бы тебе плюс в репку.



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

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

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


 




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


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

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