# HG changeset patch # User Sascha L. Teichmann # Date 1441273584 -7200 # Node ID 91b1435fb9eaaa9b342886df1e7b275ddc92621c # Parent c14bf6b35fc5dd83b88ba0dd8b7064d6052eb207 Added R/W lock to SQLExecutor. diff -r c14bf6b35fc5 -r 91b1435fb9ea artifact-database/src/main/java/org/dive4elements/artifactdatabase/db/SQLExecutor.java --- a/artifact-database/src/main/java/org/dive4elements/artifactdatabase/db/SQLExecutor.java Thu May 07 09:53:37 2015 +0200 +++ b/artifact-database/src/main/java/org/dive4elements/artifactdatabase/db/SQLExecutor.java Thu Sep 03 11:46:24 2015 +0200 @@ -5,6 +5,8 @@ import java.sql.ResultSet; import java.sql.SQLException; +import java.util.concurrent.locks.ReentrantReadWriteLock; + import javax.sql.DataSource; import org.apache.log4j.Logger; @@ -54,40 +56,52 @@ } public boolean runWrite() { - DataSource dataSource = dbConnection.getDataSource(); + rwLock.writeLock().lock(); try { - conn = dataSource.getConnection(); + DataSource dataSource = dbConnection.getDataSource(); try { - conn.setAutoCommit(false); + conn = dataSource.getConnection(); + try { + conn.setAutoCommit(false); + return doIt(); + } + catch (SQLException sqle) { + conn.rollback(); + throw sqle; + } + } + catch (SQLException sqle) { + logger.error(sqle.getLocalizedMessage(), sqle); + } + finally { + close(); + } + return false; + } + finally { + rwLock.writeLock().unlock(); + } + } + + public boolean runRead() { + rwLock.readLock().lock(); + try { + DataSource dataSource = dbConnection.getDataSource(); + try { + conn = dataSource.getConnection(); return doIt(); } catch (SQLException sqle) { - conn.rollback(); - throw sqle; + logger.error(sqle.getLocalizedMessage(), sqle); } - } - catch (SQLException sqle) { - logger.error(sqle.getLocalizedMessage(), sqle); + finally { + close(); + } + return false; } finally { - close(); + rwLock.readLock().unlock(); } - return false; - } - - public boolean runRead() { - DataSource dataSource = dbConnection.getDataSource(); - try { - conn = dataSource.getConnection(); - return doIt(); - } - catch (SQLException sqle) { - logger.error(sqle.getLocalizedMessage(), sqle); - } - finally { - close(); - } - return false; } public boolean doIt() throws SQLException { @@ -95,12 +109,15 @@ } } // class Instance - protected DBConnection dbConnection; + protected DBConnection dbConnection; + protected ReentrantReadWriteLock rwLock; public SQLExecutor() { + rwLock = new ReentrantReadWriteLock(); } public SQLExecutor(DBConnection dbConnection) { + this(); this.dbConnection = dbConnection; }