Pomoc w zrozumieniu jednej linijki kodu

0

Witam,

Byłbym wdzieczy w wytłumaczeniu, dlaczego autor książki umieszcza obiekt Session w ThreadLocal??
Nie lepiej było by sprawdzać w metodzie getSession czy fabryka jest otwarta??
klasa DAO :

package utils;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class DAO {
	
	private static final ThreadLocal session = new ThreadLocal();
	private static final SessionFactory sessionFactory = new Configuration().configure("configuration/hibernate.cfg.xml").buildSessionFactory();
  
	
	public static Session getSession() {
		Session session = (Session) DAO.session.get();
		if( session == null) {
			session = sessionFactory.openSession();
			DAO.session.set(session);
		}
		return session;
	}
	
	public void begin() {
		getSession().beginTransaction();
	}
	
	public void commit() {
		getSession().getTransaction().commit();
	}
	

	public void rollback() {
		try {
			
			getSession().getTransaction().rollback();
			getSession().close();
			DAO.session.set(null);
		} catch(Exception ex) {
			ex.printStackTrace();
		}
	}


}
0

Nie bardzo rozumiem pytanie. Przecież to są dwie zupełnie różne sytuacje. W tym kodzie sesja z bazą danych jest trzymana per wątek po prostu. Tzn tyle ile będzie wątków korzystających z tego DAO tyle sesji zostanie otwartych. A ty chyba pytasz o sytuacje kiedy jest singletonowa jedna sesja dla całej aplikacji.
Jaki ma sens trzymanie sesji per wątek? Jeśli masz tam długie transakcje to wątki by się wzajemnie blokowały.

1 użytkowników online, w tym zalogowanych: 0, gości: 1