[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