package Ġio . hol unda . history Ċ Ċ import Ġorg . camunda . bpm . engine . impl . history . event . History Event Ċ import Ġorg . camunda . bpm . engine . impl . history . handler . History EventHandler Ċ import Ġorg . springframework . context . Application Event Publisher Ċ import Ġorg . springframework . transaction . support . Transaction Synchronization Ċ import Ġorg . springframework . transaction . support . Transaction Synchronization Manager Ċ Ċ class ĠAsync History EventHandler ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpublisher : ĠApplication Event Publisher Ċ ) Ġ: ĠHistory EventHandler Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġregistered : ĠThread Local < Boolean > Ġ= ĠThread Local . with Initial Ġ{ Ġfalse Ġ} ĊĠĠĠ Ġprivate Ġval Ġhistory Events : ĠThread Local < Mutable List < History Event >> Ġ= ĠThread Local . with Initial Ġ{ Ġmutable ListOf () Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle Event ( history Event : ĠHistory Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhistory Events . get (). add ( history Event ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġregister Ġsynchronization Ġonly Ġonce ĊĠĠĠĠĠĠĠ Ġif Ġ(! registered . get ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsend Ġthe Ġresult ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransaction Synchronization Manager . register Synchronization ( object Ġ: ĠTransaction Synchronization Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter Commit () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublisher . publish Event ( Async History Event ( history Events . get ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter Completion ( status : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhistory Events . remove () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregistered . remove () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmark Ġas Ġregistered ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregistered . set ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle Events ( history Events : ĠMutable List < History Event >) Ġ{ ĊĠĠĠĠĠĠĠ Ġhistory Events . forEach Ġ{ Ġhandle Event ( it ) Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ data Ġclass ĠAsync History Event ( ĊĠĠĠĠĠĠĠ Ġval Ġhistory Events : ĠList < History Event > Ċ ) Ċ