Здравствуйте,
Сразу только скажу, что с hibernate (и вообще ORM) только со вчерашнего дня общаюсь.
Реализовал по примерам примерно то, что мне нужно.
Суть проблемы — грубо говоря, из метода main() все работает)
А вот когда тот же код запускается из другого потока — поток просто завершается, без каких-либо исключений.
Может, конечно с потоком что-то не так, но я подозреваю, что проблема в открытии сессии (судя по отладке).
Очевидно что метод, описанный в руководстве:
public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
// Create the SessionFactory from hibernate.cfg.xmlreturn new Configuration().configure().buildSessionFactory();
}
catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
не годится, если с сессией работают из другого потока. О чем, там, кстати, и написано.
Но как правильно это надо реализовать в моем случае — не понимаю.
вот последние сообщения логгера
16:42:12 [DBAdapterToCKKI] root In HibernateUtil try-clause
16:42:12 [DBAdapterToCKKI] Connect In HibernateUtil try-clause via loggerConnect DEBUG*****
Здравствуйте, _Stash, Вы писали:
_S>Сразу только скажу, что с hibernate (и вообще ORM) только со вчерашнего дня общаюсь. _S>Реализовал по примерам примерно то, что мне нужно.
Откройте для себя Spring...
Не понял почему вы решнили что вам не подходит конфигурация current_session_context_class=thread. Вроде то что нужно.
Может вы просто не коммитите?
Re[2]: Hibernate - как работать с hibernate из отдельного по
Здравствуйте, Blazkowicz, Вы писали:
B>Откройте для себя Spring... я уже получил по голове за xmlbeans (вместо DOM-парсинга), должен получить за hibernate (вместо "ручной" работы запросами), а если я начну со Spring упражняться — мне будет полный п)
но за совет спасибо
B>Не понял почему вы решнили что вам не подходит конфигурация current_session_context_class=thread. Вроде то что нужно.
ну просто я в этом не разбираюсь, я решил что раз в руководстве написано, что-то вроде
Hibernate offers three methods of current session tracking. The "thread" based method is not intended for production use; it is merely useful for prototyping and tutorials such as this one. Current session tracking is discussed in more detail later on.
еще я искал почему падает поток и при поиске "hibernate miltithreading" наткнулся на статью, где session "впихивали"(put) в ThreadLocal кажется... но у меня и так не заработало, я просто не знаю в чем еще может быть дело, тогда, получается проблема в общей реализации взаимодействия с hibernate
B>Может вы просто не коммитите? это шутка? или я чего-то недопонимаю, во-первых я написал — в методе main все работает (к тому же все делалось по примерам, просто много кода надо писать),
во-вторых до commit-а дело вообще не доходит поток завершается без каких либо ошибок при вызове
и еще кучу всего)
В любом случае код остался на работе и к тому же я начал уже писать реализацию РandWorker-а который будет делать тоже самое что и hibernate — только запросами
Re: Hibernate - как работать с hibernate из отдельного поток
Здравствуйте, _Stash, Вы писали:
_S>не годится, если с сессией работают из другого потока. О чем, там, кстати, и написано. _S>Но как правильно это надо реализовать в моем случае — не понимаю.
Приведи весь код. SessionFactory это потоко-безопасный класс. Если ты используешь его в своем потоке для получения сессии и именно на получении сессии происходит фейл, дай полный стек вызовов. Тот лог совершенно бесполезен к сожалению.
Опять же неплохо посмотреть на конфиг которым ты конфигурируешь hibernate.
Могу точно сказать, что все отлично работает в многопоточной среде и со спрингом и без.
B>>Может вы просто не коммитите? _S> это шутка? или я чего-то недопонимаю, во-первых я написал — в методе main все работает (к тому же все делалось по примерам, просто много кода надо писать),
Мы переварим много кода — можешь просто проект приаттачить и мы посмоотрим. Хуже если хочешь помочь и не можешь из-за недостатка инфы.
_S>во-вторых до commit-а дело вообще не доходит поток завершается без каких либо ошибок при вызове
без каких либо ошибок потоки не завершаются. Если фейлится какой-либо код в твоем потоке ну оберни его в try{}catch(Exception e){ log.error(e);};
и посмотри что в логе.
_S>В любом случае код остался на работе и к тому же я начал уже писать реализацию РandWorker-а который будет делать тоже самое что и hibernate — только запросами
А что такое РandWorker ? Если вы так легко отказались от использования Hibernate-а столкнувшись со странным, возникает вопрос: "А нужен ли вам ORM вообще ? ". Он нужен далеко не всегда, поэтому если не нужен — зачем на тратить время на помощь тебе ?
Здравствуйте, Jakop, Вы писали:
J>А что такое РandWorker ? Если вы так легко отказались от использования Hibernate-а столкнувшись со странным, возникает вопрос: "А нужен ли вам ORM вообще ? ". Он нужен далеко не всегда, поэтому если не нужен — зачем на тратить время на помощь тебе ?
Спасибо за ваш ответ, у меня все как обычно Простите что потратили время.
PandWorker — это просто здесь сообщения нельзя править) Это HandWorker ) Который в итоге превратился в ORMEmulator, который брал классы таблиц (с аннотациями) для Hibernate и делал основные действия Select/Insert/Update с этими объектами (ну не пропадать же им), чем-то похоже на Hibernate... так вот) когда я его закончил, а вышло на мой взгляд неплохо, и стал использовать — произошла сильно похожая хрень (минуты 5 назад), и вот в тот момент када она произошла я понял, что в общем надо извинится в этой теме, если кто-нибудь еще ответит и покончить с собой . Кстати, я не легко отказался от Hibernate, просто время поджимало, почти 2 дня я потратил на собственную глупость . Только я просто боюсь писать из-за чего это было, Hibernate тут непричем, в общем там вдалеке... в другом месте, которое работало параллельно стоял System.exit... знаю, что это ужасно глупо
Re[5]: Hibernate - как работать с hibernate из отдельного по
Здравствуйте, _Stash, Вы писали:
_S>Здравствуйте, Jakop, Вы писали:
J>>А что такое РandWorker ? Если вы так легко отказались от использования Hibernate-а столкнувшись со странным, возникает вопрос: "А нужен ли вам ORM вообще ? ". Он нужен далеко не всегда, поэтому если не нужен — зачем на тратить время на помощь тебе ?
_S>Спасибо за ваш ответ, у меня все как обычно Простите что потратили время.
Да с временем я переборщил че-то. Помочь-то всегда и всем как говориться. Мне интересно было что ж там у тебя, а ты от хибера отказываться начал так быстро