| | 97 | |
| | 98 | Методот checkout е транзакциски метод за атомско креирање/поврзување на плаќањето, нарачката, и корекциите на залихи, кој врши промена на состојва на 4 различни ентитета. \\ |
| | 99 | Кодот пресметува цена според опционален попуст (со клуб-картичка), отвора плаѓање „во тек“, ја гради нарачката за секој брендиран лек од кошничката, ги намалува залихите \\ |
| | 100 | по објектите и на крај го финализира плаќањето и ја празни кошничката. |
| | 101 | |
| | 102 | Транзакција обезбедува да нема ситуација во која залихата е намалена без валидна нарачка или плаќање, бидејќи секој неуспех фрла исклучок што иницира ROLLBACK. |
| | 103 | |
| | 104 | * rollbackFor = Exception.class осигурува Rollback на проверени исклучоци, не само на runtime, за да нема полузавршени нарачки или плаќања. |
| | 105 | * isolation = READ_COMMITED - забранува dirty reads за време на паралелни операции, ова е важно при намалување на залихата од брендирани лекови. |
| | 106 | * timeout = 30 - прекинува долги транзакции за да спречи предолко или бесконечно извршеување на методот кој можеби има грешка. |
| | 107 | |
| | 108 | По успех на транзакцијата, се прави COMMIT по што промените остануваат трајни. |