package Ġorg . tty . di oc . transaction Ċ Ċ /** Ċ Ġ* Ġthe Ġability Ġto Ġtrace Ġthe Ġtransaction . Ċ Ġ*/ Ċ interface ĠTransaction al < T : ĠTransaction > Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġto Ġbegin Ġa Ġtransaction . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġbegin Transaction (): ĠT ĊĊĠĠĠ Ġfun Ġ< R : ĠAny > Ġwith Transaction ( action : ĠT . () Ġ-> ĠR ): ĠR ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġbegin Transaction () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtransaction . action () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . commit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . rollback () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Transaction ( action : ĠT . () Ġ-> ĠUnit ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġbegin Transaction () ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . action () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . commit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . rollback () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }