[Java lista] Spring/Eclipselink - izolációs szintek

Mariák Kálmán sirkalmi at kalmiesemese.hu
2011. Feb. 8., K, 19:44:04 CET


A három különböző osztály ugyanabban a tranzakcióban fut az biztos. A
Spring úgy oldja meg, hogy egy transactional proxy-t hoz létre és arra
teszi rá ezeket a service osztályokat. Ha még nem létezik a tranzakció
akkor indít egyet, ha már létezik akkor meg csatlakozik hozzá. 
http://1.bp.blogspot.com/_czKgycLvmNo/TAQnABtmQnI/AAAAAAAAFSo/meFkUyrGyQI/s320/tranzakcio-kezeles2.png

Egyszerűsítettem a példát és azt tapasztalom, hogy ugyanabban a
metódusban sem tudom visszaolvasni az extension-t ahol a persist
megtörtént:
@Override
public Long createNewUser(User user, UserExtension userExtension) {
	userExtension.setUser(user);
	em.persist(user);
	em.persist(userExtension);
	logger.debug("created userId: " + user.getId());
	logger.debug("userExtension: " + user.getExtension());
	
	return user.getId();
}

Mit csinálok rosszul? Az adatbázis bejegyzés egyébként hibátlanul
megtörténik.

Mariák Kálmán


On Tue, 2011-02-08 at 18:14 +0100, Auth Gábor wrote:
>   Nem ismerem a Spring-et ilyen szinten, de három különböző osztály és
> három különböző metódus gond nélkül futhat három különböző
> tranzakcióban... :)
> 
>   Ami probléma lehet, az például az, hogy az user létrehozása és
> lekérdezése az két külön EntityManager példányon át történhet, de
> akkor
> az User példány nem lenne lekérdezhető... :)
> 
>   Mivel a harmadik metódusban jelölöd perzisztálásra, ráadásul együtt,
> így
> annak ott egy tranzakcióban kell történnie, így pedig vagy az user se
> kérdezhető le userId alapján, vagy az extension is meg kell
> érkezzen...
> 
>   Valami el van rontva valahol máshol... :) 



További információk a(z) Javalist levelezőlistáról