Taj deo koda je zadužen da vrati Hibernate sesiju.
Prvo proverava da li Thread koji se izvržava već ima kreiranu sesiju -
Session s = threadSession.get();
Ako sesija ne postoji radi se kreiranje sesije -
s = sessionFactory.openSession();
i kreirana sesija se stavlja u memoriju kojoj može pristupiti jedino taj Thread -
threadSession.set(s);
ThreadLocal možeš posmatrati kao mapu čiji je ključ Thread koji se trenutnu izvršava. Na primer:
Code:
public class MyThreadLocal {
private static Map threadLocalValues = new HashMap();
public static Object get() {
return threadLocalValues.get(Thread.currentThread());
}
public static void set(Object threadLocalValue) {
threadLocalValues.put(Thread.currentThread(), threadLocalValue);
}
}
Implementacija ThreadLocal klase nije ovako prosta kao što sam je napisao ali mislim da ti ovaj primer može poslužiti da shvatiš kako ThreadLocal radi.
Pozdrav!