Zwykle używam wzorzec zarządzania sesji Hibernate ThreadLocal w projektach internetowych Java:Hibernate ThreadLocal Session Management zgodny z ForkJoinPool?
wątku lokalny wzorzec Session wykorzystuje java.lang.ThreadLocal klasy do utworzenia sesji, który jest dostępny z jednej aplikacji wątek. Jest to szczególnie wygodne w aplikacjach wielowątkowych, takich jak aplikacje internetowe.
W projektach zaimplementować to z
<property name="current_session_context_class">thread</property>
w hibernate.xml
i korzystania SessionFactory.getCurrentSession()
dostać sesję ilekroć potrzebujesz.
Teraz mam program, który jest nie serwlet, ale nie ciężkie przetwarzania równoległego i interakcji bazy danych.
Chcę to zaimplementować z ForkJoinPool. Teraz zastanawiam się, czy błędem jest używanie zarządzania sesją Hibernate ThreadLocal w tym scenariuszu. O ile rozumiem, ForkJoinPool używa mniejszej liczby wątków i dzieli je między działające zadania, podczas gdy inne zadania śpią. (Zmotywowane przez przeciągnięcie/denerwujące połączenia "zadania w transakcji") Chcę zamknąć() każdą sesję hibernacji po jednostce pracy
Tak więc, kiedy wywołuję HibernateSessionFactory.getThreadLocalSession(). Close() na koniec moim zadaniem - a zadanie jest uruchamiane w ForkJoinPool - pojawią się kłopoty mam upuść ThreadLocal wzorzec dla ciężkich równoległych obliczeń i zarządzania sesjami sobie
Dzięki z góry za wszelkie odpowiedzi
Czy używasz SessionFactory.getCurrentSession() lub .openSession() do uzyskiwania obiektów Session? Jeśli getCurrentSession, jakiego używasz CurrentSessionContext? Zgaduję ThreadLocalSessionContext, ale określasz to jako "wzór" w przeciwieństwie do klasy. – sharakan
Dzięki za zaglądanie do tego .. Uaktualniłem pytanie bardziej szczegółowo. – alfonx