| 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 по што промените остануваат трајни. |