Hibernate - как работать с hibernate из отдельного потока?
От: _Stash Россия  
Дата: 14.05.10 12:58
Оценка:
Здравствуйте,
Сразу только скажу, что с hibernate (и вообще ORM) только со вчерашнего дня общаюсь.
Реализовал по примерам примерно то, что мне нужно.
Суть проблемы — грубо говоря, из метода main() все работает)
А вот когда тот же код запускается из другого потока — поток просто завершается, без каких-либо исключений.
Может, конечно с потоком что-то не так, но я подозреваю, что проблема в открытии сессии (судя по отладке).
Очевидно что метод, описанный в руководстве:
public class HibernateUtil {
    private static final SessionFactory sessionFactory = buildSessionFactory();
    private static SessionFactory buildSessionFactory() {
       try {
            // Create the SessionFactory from hibernate.cfg.xml
            return 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;
    }
}
и/или опция конфигурации
<!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>

не годится, если с сессией работают из другого потока. О чем, там, кстати, и написано.
Но как правильно это надо реализовать в моем случае — не понимаю.
вот последние сообщения логгера
16:42:12 [DBAdapterToCKKI] root                           In HibernateUtil try-clause
16:42:12 [DBAdapterToCKKI] Connect                        In HibernateUtil try-clause via loggerConnect DEBUG*****
java hibernate multithreading
Re: Hibernate - как работать с hibernate из отдельного поток
От: Blazkowicz Россия  
Дата: 14.05.10 13:06
Оценка: 1 (1)
Здравствуйте, _Stash, Вы писали:

_S>Сразу только скажу, что с hibernate (и вообще ORM) только со вчерашнего дня общаюсь.

_S>Реализовал по примерам примерно то, что мне нужно.
Откройте для себя Spring...
Не понял почему вы решнили что вам не подходит конфигурация current_session_context_class=thread. Вроде то что нужно.
Может вы просто не коммитите?
Re[2]: Hibernate - как работать с hibernate из отдельного по
От: _Stash Россия  
Дата: 14.05.10 18:03
Оценка:
Здравствуйте, 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-а дело вообще не доходит поток завершается без каких либо ошибок при вызове
session = HibernateUtil.getSessionFactory().openSession();

пробовал и
session = HibernateUtil.getSessionFactory().getCurrentSession()

и еще кучу всего)
В любом случае код остался на работе и к тому же я начал уже писать реализацию РandWorker-а который будет делать тоже самое что и hibernate — только запросами
Re: Hibernate - как работать с hibernate из отдельного поток
От: Jakop Россия https://wmspanel.com
Дата: 15.05.10 23:57
Оценка: 3 (1) +1
Здравствуйте, _Stash, Вы писали:

_S>не годится, если с сессией работают из другого потока. О чем, там, кстати, и написано.

_S>Но как правильно это надо реализовать в моем случае — не понимаю.

Приведи весь код. SessionFactory это потоко-безопасный класс. Если ты используешь его в своем потоке для получения сессии и именно на получении сессии происходит фейл, дай полный стек вызовов. Тот лог совершенно бесполезен к сожалению.
Опять же неплохо посмотреть на конфиг которым ты конфигурируешь hibernate.

Могу точно сказать, что все отлично работает в многопоточной среде и со спрингом и без.
https://wmspanel.com/nimble — Nimble Streamer media server for live and VOD HLS, RTMP, HTTP streaming

https://wmspanel.com/ — Control and reporting panel for Wowza and Nimble Streamer
Re[3]: Hibernate - как работать с hibernate из отдельного по
От: Jakop Россия https://wmspanel.com
Дата: 16.05.10 00:08
Оценка:
Здравствуйте, _Stash, Вы писали:


B>>Может вы просто не коммитите?

_S> это шутка? или я чего-то недопонимаю, во-первых я написал — в методе main все работает (к тому же все делалось по примерам, просто много кода надо писать),
Мы переварим много кода — можешь просто проект приаттачить и мы посмоотрим. Хуже если хочешь помочь и не можешь из-за недостатка инфы.

_S>во-вторых до commit-а дело вообще не доходит поток завершается без каких либо ошибок при вызове
_S>session = HibernateUtil.getSessionFactory().openSession();

_S>пробовал и
session = HibernateUtil.getSessionFactory().getCurrentSession()

_S>и еще кучу всего)

без каких либо ошибок потоки не завершаются. Если фейлится какой-либо код в твоем потоке ну оберни его в try{}catch(Exception e){ log.error(e);};
и посмотри что в логе.

_S>В любом случае код остался на работе и к тому же я начал уже писать реализацию РandWorker-а который будет делать тоже самое что и hibernate — только запросами

А что такое РandWorker ? Если вы так легко отказались от использования Hibernate-а столкнувшись со странным, возникает вопрос: "А нужен ли вам ORM вообще ? ". Он нужен далеко не всегда, поэтому если не нужен — зачем на тратить время на помощь тебе ?
https://wmspanel.com/nimble — Nimble Streamer media server for live and VOD HLS, RTMP, HTTP streaming

https://wmspanel.com/ — Control and reporting panel for Wowza and Nimble Streamer
Re[4]: Hibernate - как работать с hibernate из отдельного по
От: _Stash Россия  
Дата: 17.05.10 12:31
Оценка:
Здравствуйте, Jakop, Вы писали:

J>А что такое РandWorker ? Если вы так легко отказались от использования Hibernate-а столкнувшись со странным, возникает вопрос: "А нужен ли вам ORM вообще ? ". Он нужен далеко не всегда, поэтому если не нужен — зачем на тратить время на помощь тебе ?


Спасибо за ваш ответ, у меня все как обычно Простите что потратили время.

PandWorker — это просто здесь сообщения нельзя править) Это HandWorker ) Который в итоге превратился в ORMEmulator, который брал классы таблиц (с аннотациями) для Hibernate и делал основные действия Select/Insert/Update с этими объектами (ну не пропадать же им), чем-то похоже на Hibernate... так вот) когда я его закончил, а вышло на мой взгляд неплохо, и стал использовать — произошла сильно похожая хрень (минуты 5 назад), и вот в тот момент када она произошла я понял, что в общем надо извинится в этой теме, если кто-нибудь еще ответит и покончить с собой . Кстати, я не легко отказался от Hibernate, просто время поджимало, почти 2 дня я потратил на собственную глупость . Только я просто боюсь писать из-за чего это было, Hibernate тут непричем, в общем там вдалеке... в другом месте, которое работало параллельно стоял System.exit... знаю, что это ужасно глупо
Re[5]: Hibernate - как работать с hibernate из отдельного по
От: Jakop Россия https://wmspanel.com
Дата: 17.05.10 13:09
Оценка:
Здравствуйте, _Stash, Вы писали:

_S>Здравствуйте, Jakop, Вы писали:


J>>А что такое РandWorker ? Если вы так легко отказались от использования Hibernate-а столкнувшись со странным, возникает вопрос: "А нужен ли вам ORM вообще ? ". Он нужен далеко не всегда, поэтому если не нужен — зачем на тратить время на помощь тебе ?


_S>Спасибо за ваш ответ, у меня все как обычно Простите что потратили время.

Да с временем я переборщил че-то. Помочь-то всегда и всем как говориться. Мне интересно было что ж там у тебя, а ты от хибера отказываться начал так быстро
https://wmspanel.com/nimble — Nimble Streamer media server for live and VOD HLS, RTMP, HTTP streaming

https://wmspanel.com/ — Control and reporting panel for Wowza and Nimble Streamer
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.