Guten Tag.
Ich habe mir nach dem Buch "Java Persitence mit Hibernate" von Bauer und Kind eine hibernateUtil erstellt.
Sinn und Zweck ist es ja, für eine Anwendung immer die selbe SessionFactory zu benutzen.
Ich möchte allerdings für meine Anwendung anbieten, mit verschiedenen Datanbanken zu arbeiten (zumindest mysql und hsqldb).
Wie kann ich also eine Sessionfactory implementieren, die aber zur Laufzeit ihre Einstellungen ändern, sprich neu laden kann?
Oder wenigstens verhindern, dass das ganze Programm abstürzt, wenn beim Start nach der vorhandenen Datenbank aus der letzten Sitzung gesucht wird.
Dies ist die hibernateUtil
Code:
package persistence;
import org.hibernate.*;
import org.hibernate.cfg.*;
/**
*
* @author markus
*/
public class HibernateUtil {
private static SessionFactory sessionFactory;
static{
data.Einstellungen e = new data.Einstellungen();
String fileEinstellungen = e.getFileEinstellungen();
Configuration configuration = new Configuration();
try{
java.io.InputStreamReader reader = new java.io.FileReader(fileEinstellungen);
java.util.Properties einstellungen = new java.util.Properties();
einstellungen.load(reader);
// Einstellungen aus dem Heimverzeichnis
configuration.addProperties(einstellungen);
// Mappings hinzufügen
String[] mappings = e.getMappings();
for (int i=0; i<mappings.length;i++){
configuration.addResource(mappings[i]);
}
}catch (java.io.IOException ioEx){
System.err.println("------------------------HibernateUtil{----------------------------------");
System.out.println("Einstellungen noch nicht gesetzt!!! jetzt müsste was passieren.");
/* javax.swing.JOptionPane.showMessageDialog(this.getFrame(),
"Es wurden keine bestehenden Einstellungen gefunden. Bitte legen Sie eine neue Datenbank an oder wählen Sie eine bestehende aus.",
"Warnung", javax.swing.JOptionPane.WARNING_MESSAGE);
*/// createNewDB();
ioEx.printStackTrace();
System.err.println("------------------------}HibernateUtil----------------------------------");
}
try{
sessionFactory = configuration.buildSessionFactory();
sessionFactory.getStatistics().setStatisticsEnabled(true);
}catch (Throwable ex){
throw new ExceptionInInitializerError(ex);
}
}
/**
* Erzeugt aus den Einstellungen eine SessionFactory
* @return
*/
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
/**
* gibt die Statistik für die SessionFactory zurück im Format
* org.hibernate.stat.Statistics
* @return
*/
public static org.hibernate.stat.Statistics getStatistics(){
return getSessionFactory().getStatistics();
}
/**
* Schließt die SessionFactory. Danach sind keine sessions mehr zu bekommen!
*/
public static void shutdown(){
// Caches und Verbindungspools schließen
getSessionFactory().close();
}
}