src/samples/3rdparty/springhibernate.xu
# Sprint and hibernate transaction
# source: http://www.uml-diagrams.org/examples/spring-hibernate-transaction-sequence-diagram-example.html
#
msc {
hscale="0.8";
c [label="consumer", linecolor="transparent", textcolor="transparent"],
dbjob [label="Database job"],
interceptor [label="Spring Transaction Interceptor"],
session [label="Hibernate session"],
transaction [label="Hibernate JDBCTransaction"],
bo [label="Business Object"],
dao [label="Data Access Object"];
c => dbjob [label="runJob()"];
dbjob => interceptor [label="invoke()"];
interceptor >> session [label="<<create>>"];
interceptor => session [label="beginTransaction()"];
session => transaction [label="begin()"];
transaction note transaction [label="JDBC begin"];
session >> interceptor [label="Transaction"];
interceptor => bo [label="business_method()"];
bo opt dao {
bo => dao [label="saveOrUpdate()"];
};
bo >> interceptor [label="void, RuntimeException or business exception"];
interceptor alt dao [label="no exception, exception handled inside, business exception"] {
interceptor => transaction [label="commit()"];
transaction => session [label="flush()"];
session alt transaction [label="constraint violation"] {
session => transaction [label="rollback()"];
transaction note transaction [label="JDBC rollback"];
--- [label="no exceptions"];
transaction note transaction [label="JDBC commit"];
};
transaction >> interceptor;
--- [label="RuntimeException"];
interceptor => transaction [label="rollback()"];
transaction note transaction [label="JDBC rollback"];
transaction >> interceptor;
};
interceptor => session [label="close()"];
interceptor >> dbjob [label="rethrow exception, if any"];
dbjob >> c;
}