anunnaki
01-04-2008, 07:20
Hallo,
heute habe ich mal kein Problem, sondern ich möchte meine Lösung vorstellen und ggf. zur Diskussion stellen. Vielleicht kann man es ja besser lösen.
Bevor ich nun zum eigentliche Thema komme, noch den Hinweis, ich verwende Hibernate.
Ich habe eine Loginseite. Wenn der Benutzer die Loginseite aufruft, soll angezeigt werden, ob die Verbindung mit der der notwendigen Datenbank möglich ist. Dazu habe ich folgende Klasse erstellt:
public class HibernateUtil {
private static org.apache.log4j.Logger log=Logger.getLogger("HibernateUtil.class");
private static final SessionFactory sessionFactory;
static{
try{
//cfg.addAnnotatedClass(model.Noten.class);
sessionFactory=new AnnotationConfiguration().configure().buildSession Factory();
//sessionFactory=new Configuration().configure().buildSessionFactory();
log.info("noten;SessionFactory erstellt");
}catch(Throwable ex){
log.error("noten;Initial SessionFactory creation failed."+ ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
In der Datei hibernate.cfg.xml habe ich den Datenbankuser und das Passwort eingetragen.
Im Loginscript rufe ich folgende Funktion auf:
public String checkDatabaseConnection(){
SessionFactory sf=HibernateUtil.getSessionFactory();
String connected="";
try{
Session s=sf.openSession();
s.beginTransaction();
connected="database_connected";
s.close();
}catch(Exception e){
connected="database_not_connected";
}
return connected;
}
Zuerst wird über HibernateUtil eine SessionFactory erstellt. Anschließen wird eine Session geöffnet und es wird versucht ein Transactinobject zu erstellen, da ich es nicht weiter brauche, verwerfe ich den Rückgabewert.
Wenn das ganze funktioniert, erhält die Variable connected den Wert "database_connected", wenn ein Fehler auftritt wird ihr "database_not_connected" übergeben. Soweit so gut oder vielleicht auch nicht gut, jedenfalls funktioniert das ganze.
Was mich wundert, ist folgendes: Egal welche Werte ich für den Datenbankuser und Passwort eingebe, eine SessionFactory wird immer erstellt.
Scheinbar werden die Datenbankbenutzerdaten, aus der hibernate.cfg.xml, immer erst beim Versuch ein Transaction-Object zu erstellen geprüft.
mfg
Anunnaki
heute habe ich mal kein Problem, sondern ich möchte meine Lösung vorstellen und ggf. zur Diskussion stellen. Vielleicht kann man es ja besser lösen.
Bevor ich nun zum eigentliche Thema komme, noch den Hinweis, ich verwende Hibernate.
Ich habe eine Loginseite. Wenn der Benutzer die Loginseite aufruft, soll angezeigt werden, ob die Verbindung mit der der notwendigen Datenbank möglich ist. Dazu habe ich folgende Klasse erstellt:
public class HibernateUtil {
private static org.apache.log4j.Logger log=Logger.getLogger("HibernateUtil.class");
private static final SessionFactory sessionFactory;
static{
try{
//cfg.addAnnotatedClass(model.Noten.class);
sessionFactory=new AnnotationConfiguration().configure().buildSession Factory();
//sessionFactory=new Configuration().configure().buildSessionFactory();
log.info("noten;SessionFactory erstellt");
}catch(Throwable ex){
log.error("noten;Initial SessionFactory creation failed."+ ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
In der Datei hibernate.cfg.xml habe ich den Datenbankuser und das Passwort eingetragen.
Im Loginscript rufe ich folgende Funktion auf:
public String checkDatabaseConnection(){
SessionFactory sf=HibernateUtil.getSessionFactory();
String connected="";
try{
Session s=sf.openSession();
s.beginTransaction();
connected="database_connected";
s.close();
}catch(Exception e){
connected="database_not_connected";
}
return connected;
}
Zuerst wird über HibernateUtil eine SessionFactory erstellt. Anschließen wird eine Session geöffnet und es wird versucht ein Transactinobject zu erstellen, da ich es nicht weiter brauche, verwerfe ich den Rückgabewert.
Wenn das ganze funktioniert, erhält die Variable connected den Wert "database_connected", wenn ein Fehler auftritt wird ihr "database_not_connected" übergeben. Soweit so gut oder vielleicht auch nicht gut, jedenfalls funktioniert das ganze.
Was mich wundert, ist folgendes: Egal welche Werte ich für den Datenbankuser und Passwort eingebe, eine SessionFactory wird immer erstellt.
Scheinbar werden die Datenbankbenutzerdaten, aus der hibernate.cfg.xml, immer erst beim Versuch ein Transaction-Object zu erstellen geprüft.
mfg
Anunnaki