Жазғы AOP мәмілелерін басқару және ұйқы күйі: деректер базасына қажетсіз

DAO (деректерге қол жеткізу нысаны) әдістеріне қоңырау шалуға болатын әдістер бойынша транзакцияларды ғана жасауға болады ма?

class BusinessLayerFacade implements Facade {

//no transaction handling allowed here
public X foo() {
    //do something
}
public Y changed(DomainObject myObject) {
    //do something
    //<-- start transaction
   //calling DAO 
    //do something
   //calling DAO
    //<-- end transaction
}

}

BusinessLayerFacade ішіндегі барлық әдістер үшін транзакцияларға рұқсат беру Дерекқорға кейбір қалаусыз әрекеттерді тудырады. Мысалы: change (DomainObject myObject) орындау кезінде Exception деп аталатын foo() функциясы myObject мәмілені қайтарудағы өзгерістер.

Кез келген идеялар?

Бұл әдістерді атаумен әдістермен сүзу мүмкіндігі бар, бірақ біз мұнда сәл астам сиқырды енгізе аламыз ба ;-) DAO әдісінің алғашқы қоңырауында өзгертілген() және changed() дегеннен бас тарту туралы міндеттемені бастаңыз. Егер бұл мүмкін болса, мен сыныпта жаңа әдістерді атау кезінде абай болудың қажеті жоқ.

Рахмет, Стефан

2
Мен мұны менің сұрағымда түзетіп алдым. Кеңеске рахмет!
қосылды автор Dangermouse, көзі
Жою және транзакция жасау бірдей емес. Күту күйі транзакция кезінде жыпылықтауды шеше алады - тек сеансты және дерекқор күйін синхрондау үшін. Күту режимінде тұрып қалу, одан кейін кері қайтару туралы шешім қабылдай алады.
қосылды автор svaor, көзі

2 жауаптар

Егер орындау уақыты талабы тасталса, транзак қайтарылады. Қолданбадан ерекшелігі тасталса. Оны @Transactional аңғартпасын қолдану арқылы реттеуге болады:

@Transactional(rollbackFor=SomeException.class, noRollbackFor=SomeOtherException.class)

Бұл XML-де tx: method элементінің rollback-for және no-rollback-for атрибуттарын пайдалану арқылы жаһандық түрде теңшеуге болады.

Жазғы анықтамалық құжаттама .

1
қосылды
Жоқ, ол жоқ. Бұл аспект нақты әдіс үшін не істеу керек екенін бейімдеуді жеңілдетеді. Егер сіз жаһандық мінез-құлықты анықтағыңыз келсе, онда менің жауапымда түсіндірілгендей, xml төлсипаттарын пайдаланыңыз.
қосылды автор JB Nizet, көзі
Бұл маңызды емес, себебі мен түсіндірді, ол оны XML-де жаһандық түрде жасай алады. Және сіз оны осында баптай алатыныңызды біле аласыз, аннотацияларды пайдаланып, оны білмей-ақ жақсы, IMO.
қосылды автор JB Nizet, көзі
әдіс түсіндірмей, AOP маңызды емес
қосылды автор hisdrewness, көзі
Аннотациялар оңай реттелетін заттарды жасау болып табылады. Егер ол аннотацияларды қолданатын болса, онда ол AOP қажет емес еді, демек, немқұрайлылық. ТС түсіндірмесіне негізделген ішкі AOP-ды қолданса да, мен ОС-ның нүктесі немесе қалаған нәтижесі деп ойламаймын.
қосылды автор hisdrewness, көзі

Сізге қажет әдістердің барлығы ТБ бойынша кеңестер:


   
      
   



    
    

1
қосылды
Аты-жөні бойынша әдістерді сүзгілеу мүмкіндігі, рахмет! Бірақ, мұнда біраз қосымша сиқырлар жасай аламыз ба ;-) DAO әдісінің бірінші қоңырауында in changed() әдісін бастауға болады ма? қайтару changed() параметрін орындаңыз. Егер бұл мүмкін болса, мен сыныпта жаңа әдістерді атау кезінде абай болудың қажеті жоқ.
қосылды автор Dangermouse, көзі