Пишу клиентское приложение на базе Eclipse.
Создал пару таблиц, фару форм ...
У клиента всё работает.
Теперь надо добавить работу с БД.
Добавляем в проект JDBC драйвер, например к Firebird.
Что бы не мучаться, будем использовать Hibernate.
Конфигурируем, всё заработало! Ураа ...
Но "Eclipse product export wizard" не может сохранить готовый проект в zip.
В логах читаем, а написано что не знает где классы hibernate лежат.
Наверное также не знает где и классы JDBC драйвера лежат.
Пробовал разными способами добавлять библиотеки в проект.
Здравствуйте, RavshanKos, Вы писали:
RK>Здравствуйте, Mr WeL, Вы писали:
MW>>Пробовал разными способами добавлять библиотеки в проект. MW>>Как же быть? RK>здесь
Здравствуйте, RavshanKos, Вы писали:
RK>Здравствуйте, Mr WeL, Вы писали:
MW>>Можно ещё раз, ссылка направильная RK>Сорри. RK>здесь
Это не совсем та ссылка
Вот более правильная. здесь
Вообще там много было топиков про сторонние либы в RCP приложениях.
Здравствуйте, RavshanKos, Вы писали:
RK>Здравствуйте, RavshanKos, Вы писали:
RK>>Здравствуйте, Mr WeL, Вы писали:
MW>>>Можно ещё раз, ссылка направильная RK>>Сорри. RK>>здесь RK>Это не совсем та ссылка RK>Вот более правильная. RK>здесь RK>Вообще там много было топиков про сторонние либы в RCP приложениях.
Здравствуйте, Mr WeL, Вы писали:
MW>Здравствуйте, RavshanKos, Вы писали:
RK>>Здравствуйте, RavshanKos, Вы писали:
RK>>>Здравствуйте, Mr WeL, Вы писали:
MW>>>>Можно ещё раз, ссылка направильная RK>>>Сорри. RK>>>здесь RK>>Это не совсем та ссылка RK>>Вот более правильная. RK>>здесь RK>>Вообще там много было топиков про сторонние либы в RCP приложениях.
MW>У вас получилось? У меня нет.
MW>Может надо тупо в CLASSPATH прописать все либы?
Здравствуйте, Mr WeL, Вы писали:
MW>Здравствуйте, Mr WeL, Вы писали:
MW>Короче решил проблему! MW>Не знаю, является ли этот путь правильным, но всё работает. MW>Если интересно, могу рассказать
MW>Короче решил проблему! MW>Не знаю, является ли этот путь правильным, но всё работает. MW>Если интересно, могу рассказать
Конечно интересно. Я знаю только тупое указание в classpath. Как еще можно?
Здравствуйте, mitHANDler, Вы писали:
MW>>Короче решил проблему! MW>>Не знаю, является ли этот путь правильным, но всё работает. MW>>Если интересно, могу рассказать HAN>Конечно интересно. Я знаю только тупое указание в classpath. Как еще можно?
Здравствуйте, WFrag, Вы писали:
WF>Здравствуйте, Mr WeL, Вы писали:
MW>>Короче нифига с этим Hibernate не получилось.
WF>Расскажи, что делал и что получилось. В чем проблема-то?
Привет!
Первое что я сделал, создал плагин который содержит нужные мне jar-ы (firebirdsql-full.jar, hibernate3.jar и т.п.)
Назову его "firehib".
Теперь в своём плагине подключаю этот firehib, сразу становятся видны нужные классы.
Написал "hibernate.cfg.xml" и "patient.hbm.xml" они рабочие, проверял ...
При запуске говорит что не может найти файл "hibernate.cfg.xml". Ладно, указал ему прямой путь.
Тут же говорит что не видит файл "patient.hbm.xml". Указал ему прямой путь.
Ругается, не вижу мол класс "Patient".
Здравствуйте, Mr WeL, Вы писали:
MW>Первое что я сделал, создал плагин который содержит нужные мне jar-ы (firebirdsql-full.jar, hibernate3.jar и т.п.) MW>Назову его "firehib".
MW>Теперь в своём плагине подключаю этот firehib, сразу становятся видны нужные классы.
MW>Написал "hibernate.cfg.xml" и "patient.hbm.xml" они рабочие, проверял ...
MW>При запуске говорит что не может найти файл "hibernate.cfg.xml". Ладно, указал ему прямой путь. MW>Тут же говорит что не видит файл "patient.hbm.xml". Указал ему прямой путь. MW> MW>Ругается, не вижу мол класс "Patient".
MW>Такая фигня ...
Для того, чтобы Hibernate смог загрузить модельный класс он должен быть доступен хотя бы через один из двух класслоадеров:
a) Класслоадер, которым загружен сам Hibernate. В твоем случае это не подходит (так как плагин с Hibernate-ом и прочими библиотеками не должен зависеть от плагина с модельными классами)
b) Контекстный загрузчик классов. Этот вариант подходит:
Пример рабочего кода:
Configuration cfg = new Configuration();
ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
try {
Thread.currentThread().setContextClassLoader(loader);
for (int i = 0; i < configFiles.length; ++i) {
cfg.configure(new URL(bundleUrl, configFiles[i]));
}
for (int i = 0; i < mappingFiles.length; ++i) {
cfg.addURL(new URL(bundleUrl, mappingFiles[i]));
}
return cfg;
} finally {
Thread.currentThread().setContextClassLoader(oldClassLoader);
}
Где loader — это требуемый загрузчик классов (можно взять от класса плагина, в котором лежат модельные классы). configFiles и mappingFiles — это относительные пути (от корня плагина) к конфигурационным файлам и файлам мэппинга. bundleUrl — URL плагина, в котором лежат конфигурационные/маппинг файлы.
Если не хочешь дополнительных проблем при генерации проксей (они генерируются в частности при ленивой загрузки), то плагин с модельными классами должен зависеть от плагина с библиотеками Hibernate (насколько я понимаю, у тебя так и есть). Иначе нужно патчить (хотя может в последних версия и поправили) Hibernate так, чтобы он использовал контекстный загрузчик классов для генерации проксей. Но это уже другая история
Здравствуйте, Mr WeL, Вы писали:
RK>>>Здравствуйте, Mr WeL, Вы писали:
RK>>>Сорри. RK>>>здесь RK>>Это не совсем та ссылка RK>>Вот более правильная. RK>>здесь RK>>Вообще там много было топиков про сторонние либы в RCP приложениях.
MW>У вас получилось? У меня нет.
Да, у меня все работает, если делать как написано в последнем топике.
Здравствуйте, RavshanKos, Вы писали:
RK>Здравствуйте, Mr WeL, Вы писали:
RK>>>>Здравствуйте, Mr WeL, Вы писали:
RK>>>>Сорри. RK>>>>здесь RK>>>Это не совсем та ссылка RK>>>Вот более правильная. RK>>>здесь RK>>>Вообще там много было топиков про сторонние либы в RCP приложениях.
MW>>У вас получилось? У меня нет. RK>Да, у меня все работает, если делать как написано в последнем топике.