[Javalist] TransactionAttributeType.REQUIRES_NEW

Zoltán Bernát bernatzoltan at gmail.com
2013. Feb. 3., V, 19:52:45 CET


Nem mukodott az ajanlott onmagaba injektalt bean modszer. Tehat
torlest vegzo EJB-be beannotaltam egy azonos tipusu EJB-t, es annak
hivtam meg a deletePic() metodusat

egy PixJPAControllerEJB tipusu EJB-ben:

@PersistenceContext(unitName = "ValamiPU")
private EntityManager em;

@EJB
PixJPAControllerEJB pixsStlEJB;
...
pixsStlEJB.deletePic(...)


Sajnos a bean-be annotalt bean EntityManager valtozoja null maradt.
Ugy oldottam meg vegul a dolgot, hogy a webretegben futott a ciklus,
es annak magjaban hivtam az EJB deletePic(...) merodusat. (mely
metodus tranzakcioban futott)


Koszonom, utanannezek ennek a SessionContext.getBusinessObject() dolognak.

2013/2/3 István Viczián <viczian.istvan at gmail.com>:
> Hi,
>
> Ennek EJB megfelelője:
> SessionContext.getBusinessObject()
> --
> Viczián István
>
>
> 2013/2/3 Zoltán Bernát <bernatzoltan at gmail.com>:
>> Hat, semmit. Swinges vastag kliensek vannak. Meg egy glassfish a
>> serveren. Web service-es kommunikacio kozottunk.
>>
>> Gábor Garami <gabor.garami at hron.me> írta (2013. február 3. 18:39):
>>> Mit hasznalsz helyette?
>>>
>>> Garami Gábor
>>> E-mail: gabor.garami at hron.me
>>> Tel: +36 20 235 9621
>>> MSN: hrgy at vipmail.hu
>>> Skype: hron84
>>>
>>>
>>> 2013/2/3 Zoltán Bernát <bernatzoltan at gmail.com>:
>>>> Ez ugy tunik valami spring-es huncutsag. Spring nalam nem jatszik.
>>>>
>>>> Tamás Magyar <magyusz at gmail.com> írta (2013. február 3. 16:44):
>>>>> AopContext.currentProxy()
>>>>>
>>>>>
>>>>> 2013/2/3 Böszörményi Péter <zmblevlist at gmail.com>
>>>>>>
>>>>>> 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
>>>>>
>>>> _______________________________________________
>>>> 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
>> _______________________________________________
>> 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


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