Powiedzcie mi czy ten kod obrazuje wiele sesji? I jeśli tak to czy JDBC w podobnym zastosowaniu wysypał by mi wyjątek?
Chodzi mi o pokazanie różnicy między hibernate który może tworzyć wiele sesji dla jednego klienta(w tym przypadku wiele sesji w obrębie jednej aplikacji) a JDBC który nie obsługuje wielu sesji naraz. Oto kod:
Fabryka sesji:
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.EntityMode;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
public class HibernateConfig {
private static final SessionFactory sessionFactory;
static {
try{
sessionFactory = new AnnotationConfiguration().configure("hibernate.cfg.xml").buildSessionFactory();
}
catch(Throwable ex){
System.err.println("problem z tworzeniem fabryki: "+ ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
}
Główne okno aplikacji:
public class HibernateMain {
//konstruktor a w nim tworzenie okienka nadanie mu właściwości itd
HibernateMain(){
//ciało konstruktora
//Przycisk ModButton który tworzy nowy obiekt klasy ModData(); (o to się rozchodzi czy to jest ten moment tworzenia wielu sesji)
ModButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
ModData md = new ModData();
}
});
}
//main
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
HibernateMain okno = new HibernateMain();
}
}
Zawartość ModData:
public class ModData {
//dodaje komponenty
ModData(){
//konstruktor moddata() nadaje właściwości dla okienka i wywołuje je
//+przycisk który wywołuje funkcje poniżej
find.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
findbutton(Jakies_parametry);
}
});
}
public void findbutton(Funkcja_przyjmuje_jakies_parametry_do_Criteria) {
Session session = HibernateConfig.getSessionFactory().getCurrentSession();
session.beginTransaction();
//tu dodawanie danych z bazy za pomocą kryteriów do JTable co nie jest tu takie istotne
session.getTransaction().commit();
}
I tu pytanie. Gdy z głównego okna wywołam np 5 razy ModData to utworzy mi 5 okienek a w jednym z nich podam jakieś dane ładuje się FabrykaSesji to oczywiście chwile trwa wynajduje mi te dane o które proszę i wyświetla w tabeli, super!
Gdy teraz otworzę 6'te okno albo skorzystam z 4 pozostałych które już utworzyłem i podam jakieś dane ono również mi je wyszuka i zapisze w tabeli już tym razem bez tworzenia fabryki sesji. Czy gdybym zrobił analogicznie ten przyklad ale zamiast :
Session session = HibernateConfig.getSessionFactory().getCurrentSession();
session.beginTransaction();
session.getTransaction().commit();
Stworzył funkcje która łączy się bezpośrednio z baza przez JDBC i otworzył kilka okienek wysypał by mi wyjątek?
TAK/NIE dlaczego i czy mój tok rozumowania jest poprawny?
Z góry dzięki za odpowiedz!