1. Declarative control
/** * Declarative transaction example * @param atom * @return */ public static boolean tx2(IAtom atom) { return Db.tx(atom); } /** * Declarative transaction example * @param configName * @param atom * @return */ public static boolean tx2(String configName, IAtom atom) { return Db.use(configName).tx(atom); }
2. Manual control
/** * start transaction * @throws SQLException */ public static void beginTran() throws SQLException { DbKit.getConfig().setThreadLocalConnection(DbKit.getConfig().getConnection()); DbKit.getConfig().getThreadLocalConnection().setAutoCommit(false); } /** * start transaction * @param configName * @throws SQLException */ public static void beginTran(String configName) throws SQLException { DbKit.getConfig(configName).setThreadLocalConnection(DbKit.getConfig(configName).getConnection()); DbKit.getConfig(configName).getThreadLocalConnection().setAutoCommit(false); } /** * Transaction rollback * @throws SQLException */ public static void rollback() throws SQLException { DbKit.getConfig().getThreadLocalConnection().rollback(); DbKit.getConfig().getThreadLocalConnection().setAutoCommit(true); DbKit.getConfig().removeThreadLocalConnection(); } /** * Transaction rollback * @param configName * @throws SQLException */ public static void rollback(String configName) throws SQLException { DbKit.getConfig(configName).getThreadLocalConnection().rollback(); DbKit.getConfig(configName).getThreadLocalConnection().setAutoCommit(true); DbKit.getConfig(configName).removeThreadLocalConnection(); } /** * Transaction commit * @throws SQLException */ public static void commit() throws SQLException { DbKit.getConfig().getThreadLocalConnection().commit(); DbKit.getConfig().getThreadLocalConnection().setAutoCommit(true); DbKit.getConfig().removeThreadLocalConnection(); } /** * Transaction commit * @param configName * @throws SQLException */ public static void commit(String configName) throws SQLException { DbKit.getConfig(configName).getThreadLocalConnection().commit(); DbKit.getConfig(configName).getThreadLocalConnection().setAutoCommit(true); DbKit.getConfig(configName).removeThreadLocalConnection(); }
Instructions:
try { // start transaction ExtDb.beginTran(); // save the main table String infoId = applyInfoService.saveEasInfo(doc); // save material applyInfoService.saveEasAttr(doc, infoId, infoNo); // transaction commit ExtDb.commit(); } catch (Exception e) { // transaction rollback ExtDb.rollback(); // Throw an exception throw e; }