Ex4: Zugriff auf Session

ax17
Erstie
Erstie
Beiträge: 15
Registriert: 11. Mär 2009 22:46

Ex4: Zugriff auf Session

Beitrag von ax17 »

@Transactional
@Repository
public class ProjectDaoJpaImpl implements IProjectDao {

private EntityManager em;

@PersistenceContext
public void setEntityManager(EntityManager em) {
this.em = em;
}

public void save(Project project) {
....
}


Wenn wir mit diesen DAOs arbeiten, werden die Befehle innerhalb einer Methode in Transaktionen eingebettet. Wir haben allerdings das Problem, dass ausserhalb der DAOs nicht mehr auf die Session zur Datenbank zugegriffen werden. Verwenden wir FetchType.Lazy können auf die verknüpften Daten im Business-Code nicht mehr zugegriffen werden. Mit FetchType.Eager funktioniert alles einwandfrei.
Wie kann man also ausserhalb der DAOs noch auf die gleiche Session zugreifen?

Sebastian Hartte
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 236
Registriert: 15. Apr 2004 17:57

Re: Ex4: Zugriff auf Session

Beitrag von Sebastian Hartte »

Hallo,

ihr könnt doch auch die Methoden eurer Business Logik @Transactional machen, oder?
Eigentlich braucht ihr die DAO Methoden auch nicht @Transactional zu machen da ja die Transaktion als solches nicht aus den einzelnen Abruf+Speicher Operationen der DAOs besteht sondern aus aus den Operationen eures Business-Layers.

Gruß,
Sebastian

ax17
Erstie
Erstie
Beiträge: 15
Registriert: 11. Mär 2009 22:46

Re: Ex4: Zugriff auf Session

Beitrag von ax17 »

Auch wenn wir die Methoden/Klassen der Business-Logik mit @Transactional annotieren, bekommen wir den Fehler noch (hier am Beispiel des User-Objektes):
SCHWERWIEGEND: failed to lazily initialize a collection of role: de.tud.cs.st.rnr.model.User.projects, no session or session was closed

Die einzelnen DAO-Methoden wurden in einem anderen Thread[1] auch als einzelne Transaktionen implementiert.
Soll dies also nicht so sein? Das hängt ja im Prinzip auch von der Business-Logik ab...

[1] http://www.fachschaft.informatik.tu-dar ... 33&t=15744

Sebastian Hartte
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 236
Registriert: 15. Apr 2004 17:57

Re: Ex4: Zugriff auf Session

Beitrag von Sebastian Hartte »

ax17 hat geschrieben:Auch wenn wir die Methoden/Klassen der Business-Logik mit @Transactional annotieren, bekommen wir den Fehler noch (hier am Beispiel des User-Objektes):
SCHWERWIEGEND: failed to lazily initialize a collection of role: de.tud.cs.st.rnr.model.User.projects, no session or session was closed

Die einzelnen DAO-Methoden wurden in einem anderen Thread[1] auch als einzelne Transaktionen implementiert.
Soll dies also nicht so sein? Das hängt ja im Prinzip auch von der Business-Logik ab...

[1] http://www.fachschaft.informatik.tu-dar ... 33&t=15744
Seid ihr sicher, dass Spring eure @Transactional annotation überhaupt beachtet?
Habt ihr das folgende in eurer Spring Config stehen?

Code: Alles auswählen

<tx:annotation-driven mode="proxy" proxy-target-class="true"/>
Ansonsten müsst ihr nochmal in die Spring Doku schauen. Im Standardmodus machte es glaube ich einen Unterschied ob man die Annotation nun an das Interface oder an die Klasse schreibt. Wenn ihr obige Konfigurationszeile benutzt braucht ihr kein Interface mehr.

Ich möchte auch nochmal (für andere Leser des Threads) anmerken, dass @Transactional nicht benutzt werden muss um die Aufgabe zu lösen. Explizite Transaktionskontrolle per EntityManager ist völlig i.O..

Gruß,
Sebastian

Antworten

Zurück zu „Archiv“