Hibernate-Sitzung pro Anfrage erstellen

8

Ich habe gerade ein einfaches Java-Testprojekt gestartet, das einige Entitäten unter Verwendung von Hibernate verwaltet und eine REST-Schnittstelle bereitstellt, um diese Objekte zu manipulieren und zusätzliche Geschäftslogik bereitzustellen. Die REST-Schnittstelle wird mit Hilfe von RESTEasy und Jetty erstellt.

Bisher läuft alles gut, aber ich habe das Gefühl, dass ich zu viel Code schreibe. Da ich nicht viel Erfahrung in diesen Java-Frameworks habe, frage ich mich nur, ob irgendjemand mir einen Hinweis geben könnte, wie man die Situation verbessern kann.

  1. Erstellen von Hibernate-Sitzungen pro Anfrage

Nun, soweit ich verstanden habe, muss ich eine Hibernate-Sitzung pro Anfrage erstellen und am Ende muss ich sie schließen. So sehen derzeit alle meine Service-Methoden so aus:

%Vor%

Gibt es eine Möglichkeit, diese beiden Zeilen zu entfernen, um das irgendwie automatisch zu machen? Derzeit ist mein Dienst als RestEASY Singleton registriert. Wird das Problem gelöst, wenn man in eine RESETasy-Ressource wechselt und die Sitzung im Konstruktor erstellt? Ich denke, es wird das Problem der Erstellung der Sitzung lösen. Aber wo, um es zu schließen?

In C ++ kann das leicht gemacht werden, indem man ein Zielobjekt erstellt, das die Sitzung am Ende schließt. Aber in Java?

  1. Immer wenn eine solche REST-Anfrage gemacht wird, muss ich nach einer gültigen Sitzung suchen (der Benutzer muss sich vorher anmelden). Ist ein ServletFilter der richtige Weg?

Allgemein: Gibt es andere Muster oder Frameworks, die ich in Betracht ziehen sollte? Ich meine, ich möchte es so einfach wie möglich halten und vor allem, weil ich nicht so viel Erfahrung habe, dass ich nicht am Ende mit Spring oder irgendeinem Schwergewichtsrahmen enden möchte. Scheint, dass ich an die Einfachheit von Python und Django gewöhnt bin, aber für dieses kleine Projekt muss ich Java benutzen.

Vielen Dank!

    
duselbaer 24.04.2012, 08:51
quelle

3 Antworten

3

Der aktuelle empfohlene Ansatz von Hibernate zum Verwalten von Sitzungen wird auf dieser Wiki-Seite ausführlich beschrieben. Insbesondere denke ich, dass Sie den letzten Absatz lesen müssen: Das ist alles sehr schwierig, kann das nicht einfacher gemacht werden?

Am Ende müssen Sie der Persistenzschicht mitteilen, dass "ich etwas tun werde" (was normalerweise auch die Sitzung dazu bringt) und "Ich bin fertig damit". Sie können dies mit Anmerkungen oder JTA-Transaktionen , aber diese Informationen müssen noch kommuniziert werden!

    
sharakan 24.04.2012, 13:15
quelle
1

Geben Sie SessionFactory in Ihr Data Access-Objekt ein und verwenden Sie sessionFactory.getCurrentSession (), um auf das Hibernate Session-Objekt zuzugreifen. Sie können alle verfügbaren Factory-Klassen verwenden, um dies zu implementieren.

Dann sollte dein Code so aussehen ..

%Vor%     
vinodn 24.04.2012 09:56
quelle
0

Sie sollten versuchen, einen Filter zu schreiben, der dies tut. Spring's OpenSessionInViewFilter ist ein guter Startpunkt, wenn Sie ein Beispiel benötigen.

    
verhage 24.04.2012 08:56
quelle