- Expediere
- 5 septembrie 2026 la 05:20 UTC
- Autor
- Kamo
- Comite
- 3bb492b
Două soluţii care au sens doar împreună. @RetryOnDbConflict retries a methods outside sale de tranzacție, astfel încât fiecare încercare începe una nouă. Retriere în interiorul tranzacției oricare dintre acestea este subtil gresit tranzacție care a văzut SQLState 40001 nu reușește fiecare declarație ulterioară, așa că fiecare încercare suplimentară re-run-uri de lucru care nu pot comite. De asemenea, se pare ca este Lucrând, care este partea periculoasă. Jurnalul umple cu retries, metoda într-adevăr este numit de trei ori, și eroarea de la sfârșitul este cel pe care l-ar avea a avut oricum. Aşa că testul contează TRANZACŢII ÎNCEPUTE, nu încercări. Aceste două numere sunt identice în cazul de lucru și diferă în cel rupt, și nimic altceva Îi separă. A prins trei defecte reale în timp ce era scris: 1. Un consilier simplu @Component este invizibil pentru creatorul auto-proxy care @EnableTransactionManagement instals, which considers only advisorsmarked Role infrastructură. Fiecare rejudecare nu a făcut nimic. lanț interceptor, astfel încât un al doilea proces () reluat după tranzacție interceptor și re-invocat ținta direct, în interiorul eșuat tranzacţie. Fiecare încercare devine acum un invocableClone (). (3) Sfaturile nu trebuie să modifice contractul unei metode, astfel încât o excepţie verificată declarată este transportat peste limita de rejudecare și retras neschimbat. Construit pe AOP simplu de primăvară, nu @Aspect, pentru a evita punerea aspectjweaver în 60 de imagini pentru un interceptor. În al doilea rând: Serviciul aplicat pentru drepturile membrilor nu mai continuă atunci când modelul de securitate șabloane nu pot fi citite. Logging un avertisment și desfășurarea de sunete ca o alegere atentă și este opusul său șablon nu sunt doar o sursă de extra drepturile, și o valoare NUKE este modul în care un model spune "off implicit," așa că sărind peste ele lasă un drept în picioare că organizația intenționează să rețină. Rezultatul a fost apoi persistat. Prin urmare, un sughiţ tranzitoriu al bazei de date l-ar putea ajuta pe un membru acces nimeni acordat, cu o linie Warn ca singura urmă. Acum aruncă cu cauza atașată, și cele două puncte de intrare transporta @RetryOnDbConflict cauza realistă este un cucui catalog-versiune, și o rejudecare se poate întâmpla numai în cazul în care Eşecul este permis să ajungă la el. 2757 de teste verzi.