[Hibernate]No CurrentSessionContext configured!

hyperion

Bekanntes Mitglied
Hallo,

beim Aufruf von
Code:
Session session = SessionFactoryUtil.getSessionFactory().getCurrentSession();
bekomme ich leider einen Fehler: org.hibernate.HibernateException: No CurrentSessionContext configured!

Im Internet habe ich bereits gelesen, dass das wohl mit der Kofiguration der hibernate.cfg.xml zusammenhängt. Allerdings steht mín meiner Konfiguration bereits:
Code:
<property name="current_session_context_class">org.hibernate.context.JTASessionContext</property>
. Ich habe es auch bereits mit den Werten thread und jta versucht.

Welche Gründe kann die fehlermeldugn denn noch haben?

SessionFactoryUtil
Java:
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.SessionFactory;

public class SessionFactoryUtil {
    private static final SessionFactory sessionFactory;

    static {
        try {
            // Create the SessionFactory from standard (hibernate.cfg.xml) 
            // config file.
            sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            // Log the exception. 
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

Aufruf:
Java:
 public String register(){

       Transaction tx = null;
       Session session = SessionFactoryUtil.getSessionFactory().getCurrentSession();
       try {
          tx = session.beginTransaction();
          session.save(person);
          session.save(user);
          tx.commit();
          return "success";
        } catch (RuntimeException e) {
          if (tx != null && tx.isActive()) {
            try {
    // Second try catch as the rollback could fail as well
              tx.rollback();
            } catch (HibernateException e1) {

            }
    // throw again the first exception
            throw e;
          }
        }
       return "failed";
    }

Gruß hyperion
 
<property name="current_session_context_class">thread</property> müsste eigentlich schon eine Session zurück liefern mit SessionFactoryUtil.getSessionFactory().getCurrentSession().
Versuche es mal nur testweise mit SessionFactoryUtil.getSessionFactory().openSession(). Wenn das auch nicht geht ist irgendwas anderes falsch.
 
Hallo,

vielen Dank für Deine Antwort.
Ich habe den Code nun um Deine Zeile ergänzt:
Java:
 public String register(){

       Transaction tx = null;
       SessionFactoryUtil.getSessionFactory().openSession();
       Session session = SessionFactoryUtil.getSessionFactory().getCurrentSession();
       try {
          tx = session.beginTransaction();
          session.save(person);
          session.save(user);
          tx.commit();
          return "success";
        } catch (RuntimeException e) {
          if (tx != null && tx.isActive()) {
            try {
    // Second try catch as the rollback could fail as well
              tx.rollback();
            } catch (HibernateException e1) {

            }
    // throw again the first exception
            throw e;
          }
        }
       return "failed";
    }

Als Meldung von GlassFish bekomme ich immernoch:
Java:
Caused by: org.hibernate.HibernateException: No CurrentSessionContext configured!
        at org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:542)
        at code.RegisterBean.register(RegisterBean.java:46)

Allerdings springt er immernoch bei .getCurrentSession raus und nicht bei Deiner Zeile.

Gruß hyperion
 
Versuchs mal so ob dann ein Fehler kommt...

Java:
 public String register(){
 
       Transaction tx = null;    
       Session session = SessionFactoryUtil.getSessionFactory().openSession();
       try {
          tx = session.beginTransaction();
          session.save(person);
          session.save(user);
          tx.commit();
          return "success";
        } catch (RuntimeException e) {
          if (tx != null && tx.isActive()) {
            try {
    // Second try catch as the rollback could fail as well
              tx.rollback();
            } catch (HibernateException e1) {
 
            }
    // throw again the first exception
            throw e;
          }
        }
       return "failed";
    }
 
Bist du sicher, dass deine hibernate.cfg.xml auch gefunden/verwendet wird? Ansonsten versuch sie dochmal mit Pfadangabe zu verwenden:

Java:
static {
        try {
            // Create the SessionFactory from standard (hibernate.cfg.xml) 
            // config file.
            sessionFactory = new AnnotationConfiguration().configure("/hibernate.cfg.xml").buildSessionFactory();
        } catch (Throwable ex) {
            // Log the exception. 
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
}

Ich habe so meine hibernate.cfg.xml ans Laufen bekommen. Sie liegt bei mir in einem Source-Package. Ungefähr so:

Projekt
|
--> src
|
--> de.xyz.packages
|
--> de.abc.resources
|
--> hibernate.cfg.xml

Gruß


EDIT
hab' gerade nachgelesen, dass eine Exception geworfen wird, wenn configure() die hibernate.cfg.xml nicht finden kann... Ansonsten weiss ich im Moment auch net weiter ...
 
Zuletzt bearbeitet:
Hallo,

so das Problem ist gelöst.
Zum einen hatte ich zwei hibernate.cfg.xml Dateien. Eine im Web-Pages Ordner und eine im default package. habe jetzt natürlic hdie im Web-Pages Ordner entfernt.
Zum anderen war im <!doctype>-Tag ein Pfad zu einer DTD-Datei die ich nicht erreichen konnte("C:/..."), da diese für ein anderes System verwendet wurde. Nun funktioniert mein Programm zwar noch nicht, das liegt jetzt aber am falsch definierten Mapping. Das möchte ich aber erstmal selbst probieren zu lösen.

Gruß hyperion
 

Neue Themen


Zurück
Oben