[Javalist] TransactionAttributeType.REQUIRES_NEW

Böszörményi Péter zmblevlist at gmail.com
2013. Feb. 3., V, 15:25:58 CET


Megoldaskent ezt a megoldast lattam mashol. En ebben az esetben kezzel  
inditanam es commitolnam a tranzakciot a ciklusban. Azt viszont nem tudom  
megmondani, hogy melyik az "elegans" es "kovetendo" megoldas.

On Sun, 03 Feb 2013 15:23:38 +0100, Zoltán Bernát <bernatzoltan at gmail.com>  
wrote:

> Mar csak egy kerdes: akkor ez az "elegans"/"kovetendo" megoldas, amit
> javasoltal?
>
> Böszörményi Péter <zmblevlist at gmail.com> írta (2013. február 3. 15:20):
>> Ott rontod el, hogy lokalisan hivod a deletePic metodust. Ilyenkor nem
>> jatszik a tranzakcios proxy. Az egyik megoldas, hogy beinjektalod a  
>> beanbe
>> onmagat, es azon a beanen hivod a deletePic metodust.
>>
>>
>> On Sun, 03 Feb 2013 15:17:45 +0100, Zoltán Bernát  
>> <bernatzoltan at gmail.com>
>> wrote:
>>
>>> Sziasztok!
>>>
>>> JPA kerdes. Tranzakcio kezeles. A megoldando feladat az lenne, hogy
>>> tobb entitast toroljek a DB-bol, de olyan modon, hogy ha valamelyik
>>> torles meghiusul (pl foreign key miatt), attol meg a tobbi torles
>>> rendben megtortenjen.
>>> (azaz egy sikertelen torles ne rollback-elje az egesz procedurat)
>>>
>>> Ugy gondoltam volna megoldani a dolgot, hogy egy tranzakcioban futo
>>> metodusbol ciklusban torlom a kepeket egy masik,
>>> TransactionAttributeType.REQUIRES_NEW tranzakcioban.
>>>
>>> A hibajelenseg az, hogy  ha egy torles nem sikerult a deletePic (Pix
>>> picEntity) metodusban(pl ConstraintViolationException miatt. (ami
>>> rendben is van)), akkor a metodus kovetkezo hivasanal mar
>>> TransactionRequiredException kivetel dobodik szinten a  deletePic (Pix
>>> picEntity) metodusban, es igy az amugy torolheto entitast sem sikerul
>>> torolni. Azaz ha csak egy entitas is van, amelyik nem torolheto, az
>>> osszes torlese meghiusul.
>>>
>>> Azt gondolom, elvi hibas a megoldasom, meg azt, hogy a
>>> TransactionAttributeType.REQUIRES_NEW pont ilyen esetekre lett
>>> kitalalva. Hol benazom el? (Hol ertem felre a
>>> TransactionAttributeType.REQUIRES_NEW szerepet)?
>>> Koszi!
>>>
>>> @TransactionAttribute(TransactionAttributeType.REQUIRED)
>>> public List<Integer> deletePix(List<Integer> ids){
>>>     for(Integer id : ids){
>>>         ...
>>>                     if(deletePic(pixBeanEntity)){
>>>                         ... //sikeres torles
>>>                     }
>>>     }
>>> }
>>>
>>>
>>> @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
>>>     private boolean deletePic (Pix picEntity){
>>>         try {
>>>             em.remove(picEntity); //em az EntitiManager
>>>             //org.hibernate.exception.ConstraintViolationException, ha
>>> nem megy a torles a foreign key miatt. Ez az elvart viselkedes.
>>>             //De: TransactionRequiredException jon akkor is, ha
>>>             em.flush(); //entitiManager flush
>>>             // itt tovabbi utasitasok vannak, amikre nem kerul a
>>> vezerles, ha a fenti flush() kivetelt dobott
>>>         } catch (Exception e) {
>>>             context.setRollbackOnly();
>>>             return false;
>>>         }
>>>         return true;
>>>     }
>>> _______________________________________________
>>> Javalist mailing list
>>> Javalist at lists.javaforum.hu
>>> http://lists.javaforum.hu/mailman/listinfo/javalist
>>
>>
>>
>> --
>> Üdvözlettel,
>> Böszörményi Péter
>> _______________________________________________
>> Javalist mailing list
>> Javalist at lists.javaforum.hu
>> http://lists.javaforum.hu/mailman/listinfo/javalist
> _______________________________________________
> Javalist mailing list
> Javalist at lists.javaforum.hu
> http://lists.javaforum.hu/mailman/listinfo/javalist


-- 
Üdvözlettel,
Böszörményi Péter


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