powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблемы с ClassLoader
13 сообщений из 13, страница 1 из 1
Проблемы с ClassLoader
    #37691596
meqon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем.

Есть проблема при загрузки класса. Я написал свой ClassLoader загрузки из каталога сервера. Для работы с базой использую hibernate, класс загружается все хорошо, но при вызове выдает ошибку что не находит класс org.hibernate.Session, храниться в jar архиве, но ведь все jar архивы при компиляции записываются в classpath? Или я путаю? Подскажите что можно сделать.
...
Рейтинг: 0 / 0
Проблемы с ClassLoader
    #37691620
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
meqonно ведь все jar архивы при компиляции записываются в classpath?
Абсолютное непонимание концепции classpath. Ничего при компиляции туда не записывается. Это собирательное выражение для списка всех путей для поиска классов.
Переменная окружения CLASSPATH почти нигде не искпользуется
classpath используется либо как параметр запуска java.exe
либо как Class-Path: в META-INF/manifest.mf
...
Рейтинг: 0 / 0
Проблемы с ClassLoader
    #37691646
meqon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Теперь понят. Но как тогда при загрузить кода использующего стороннюю библиотеку, код которой в jar архиве? Можно ли при загрузки моего класса задать мой загрузчик?
...
Рейтинг: 0 / 0
Проблемы с ClassLoader
    #37691647
meqon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
загрузить код*
...
Рейтинг: 0 / 0
Проблемы с ClassLoader
    #37691679
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
meqonТеперь понят. Но как тогда при загрузить кода использующего стороннюю библиотеку, код которой в jar архиве? Можно ли при загрузки моего класса задать мой загрузчик?
Можно. А если вы ещё по-русски объясните чего хотите добиться, то можно обсудить и о то как это сделать.
...
Рейтинг: 0 / 0
Проблемы с ClassLoader
    #37691958
meqon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как тогда загрузить код использующий стороннии библиотеки(например hibernate), если использую свой загрузчик то он не находи класс org.hibernate.Session. Как в этом случае быть?
...
Рейтинг: 0 / 0
Проблемы с ClassLoader
    #37691967
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
meqonКак тогда загрузить код использующий стороннии библиотеки(например hibernate), если использую свой загрузчик то он не находи класс org.hibernate.Session. Как в этом случае быть?
a) Указать родительский загрузчик, который знает о либах.
б) В своём загрузчике организовать поиск и по библиотекам тоже.
...
Рейтинг: 0 / 0
Проблемы с ClassLoader
    #37692380
meqon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо
...
Рейтинг: 0 / 0
Проблемы с ClassLoader
    #37692743
rfq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicza) Указать родительский загрузчик, который знает о либах.
б) В своём загрузчике организовать поиск и по библиотекам тоже.

Если существует загрузчик, который знает о либах, то надо использовать его в качестве родительского. Иначе классы с одним и и тем же именем, тот же org.hibernate.Session, загруженные разными загрузчиками, будут разными и несовместимыми. В результате будут рантайм ошибки когда в переменную типа Session не удасться присвоить значение типа Session.
...
Рейтинг: 0 / 0
Проблемы с ClassLoader
    #37695691
meqon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пошел по методы а) но теперь при вызове метода выдаеться исключение nosuchmethoderror. В чем может быть проблема?
...
Рейтинг: 0 / 0
Проблемы с ClassLoader
    #37695698
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
meqonПошел по методы а) но теперь при вызове метода выдаеться исключение nosuchmethoderror. В чем может быть проблема?
Разные версии библиотек. Полный текст со стектрейсом покажите.
...
Рейтинг: 0 / 0
Проблемы с ClassLoader
    #37697425
meqon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообщем, использую tomcat пишу web сервис. Как уже писал пошел по пути а). Библиотека hibernate лежит в WEB-INF/lib. Написал загрузчик.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
public class ServerClassLoader extends ClassLoader {
	private String path;
	private HashMap<String, Class<?>> cache = new HashMap<String, Class<?>>();
	
	public ServerClassLoader(String path, ClassLoader parent) {		
		super(parent);
		this.path = path;
	}
	
	@Override
	public Class<?> loadClass(String name) {
		File f = new File(path + name.replace('.', '/') + ".class");
		try {
			if (f.exists() == false)		
				return super.findSystemClass(name);
			
			if (cache.get(name) != null) 
				return cache.get(name);
			
			FileInputStream is = new FileInputStream(f);			
			
			byte[] data = new byte[(int)f.length()];			
			
			if (is.read(data, 0, (int)f.length()) < 0) {
				throw new IOException("");
			}
			
			Class<?> cls = defineClass(name, data, 0, (int)f.length()); 
			
			cache.put(name, cls);
			
			return cls;
		}
		catch(FileNotFoundException e) {
			return null;
		}
		catch(ClassNotFoundException e) {
			return null;
		}
		catch(IOException e) {
			return null;
		}
	}


Вызываю так: ServerClassLoader cl = new ServerClassLoader(<путь где лежат файлы>, ClassLoader.getSystemClassLoader());

При загрузке org/hibernate/Session:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
java.lang.NoClassDefFoundError: org/hibernate/Session
	java.lang.Class.getDeclaredMethods0(Native Method)
	java.lang.Class.privateGetDeclaredMethods(Class.java:2442)
	java.lang.Class.getDeclaredMethod(Class.java:1952)
	service.Engine.invoke(Engine.java:105)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	java.lang.reflect.Method.invoke(Method.java:601)
	com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
	com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ObjectOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:258)
	com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
	com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288)
	com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
	com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
	com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
	com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
	com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469)
	com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400)
	com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349)
	com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339)
	com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
	com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
	com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:708)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
...
Рейтинг: 0 / 0
Проблемы с ClassLoader
    #37699213
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
meqonВообщем, использую tomcat пишу web сервис. Как уже писал пошел по пути а). Библиотека hibernate лежит в WEB-INF/lib. Написал загрузчик.Можно узнать, зачем, если для (отдельных) class-ов есть предопределённое место?
Это если вам так неймётся, что вы распаковали jar.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблемы с ClassLoader
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]