sverweij/mscgen_js

View on GitHub
src/samples/3rdparty/springhibernate.xu

Summary

Maintainability
Test Coverage
# 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;
}