comparison artifact-database/src/main/java/org/dive4elements/artifactdatabase/db/SQLExecutor.java @ 544:0e3ecf7cd461 3.2.0

issue1847 Remove locking parallel access is not the problem here.
author Andre Heinecke <andre.heinecke@intevation.de>
date Thu, 03 Sep 2015 17:49:05 +0200
parents 3b1e48d22ce0
children 584591f8203c
comparison
equal deleted inserted replaced
543:e9abf747f6ce 544:0e3ecf7cd461
2 2
3 import java.sql.Connection; 3 import java.sql.Connection;
4 import java.sql.PreparedStatement; 4 import java.sql.PreparedStatement;
5 import java.sql.ResultSet; 5 import java.sql.ResultSet;
6 import java.sql.SQLException; 6 import java.sql.SQLException;
7
8 import java.util.concurrent.locks.ReentrantReadWriteLock;
9 7
10 import javax.sql.DataSource; 8 import javax.sql.DataSource;
11 9
12 import org.apache.log4j.Logger; 10 import org.apache.log4j.Logger;
13 11
54 catch (SQLException sqle) {} 52 catch (SQLException sqle) {}
55 } 53 }
56 } 54 }
57 55
58 public boolean runWriteNoRollback() { 56 public boolean runWriteNoRollback() {
59 rwLock.writeLock().lock(); 57 DataSource dataSource = dbConnection.getDataSource();
60 try { 58 try {
61 DataSource dataSource = dbConnection.getDataSource(); 59 conn = dataSource.getConnection();
62 try { 60 try {
63 conn = dataSource.getConnection(); 61 conn.setAutoCommit(false);
64 try { 62 return doIt();
65 conn.setAutoCommit(false);
66 return doIt();
67 }
68 catch (SQLException sqle) {
69 throw sqle;
70 }
71 } 63 }
72 catch (SQLException sqle) { 64 catch (SQLException sqle) {
73 logger.error(sqle.getLocalizedMessage(), sqle); 65 throw sqle;
74 } 66 }
75 finally { 67 }
76 close(); 68 catch (SQLException sqle) {
77 } 69 logger.error(sqle.getLocalizedMessage(), sqle);
78 return false;
79 } 70 }
80 finally { 71 finally {
81 rwLock.writeLock().unlock(); 72 close();
82 } 73 }
74 return false;
83 } 75 }
84 76
85 public boolean runWrite() { 77 public boolean runWrite() {
86 rwLock.writeLock().lock(); 78 DataSource dataSource = dbConnection.getDataSource();
87 try { 79 try {
88 DataSource dataSource = dbConnection.getDataSource(); 80 conn = dataSource.getConnection();
89 try { 81 try {
90 conn = dataSource.getConnection(); 82 conn.setAutoCommit(false);
91 try { 83 return doIt();
92 conn.setAutoCommit(false);
93 return doIt();
94 }
95 catch (SQLException sqle) {
96 conn.rollback();
97 throw sqle;
98 }
99 } 84 }
100 catch (SQLException sqle) { 85 catch (SQLException sqle) {
101 logger.error(sqle.getLocalizedMessage(), sqle); 86 conn.rollback();
87 throw sqle;
102 } 88 }
103 finally { 89 }
104 close(); 90 catch (SQLException sqle) {
105 } 91 logger.error(sqle.getLocalizedMessage(), sqle);
106 return false;
107 } 92 }
108 finally { 93 finally {
109 rwLock.writeLock().unlock(); 94 close();
110 } 95 }
96 return false;
111 } 97 }
112 98
113 public boolean runRead() { 99 public boolean runRead() {
114 rwLock.readLock().lock(); 100 DataSource dataSource = dbConnection.getDataSource();
115 try { 101 try {
116 DataSource dataSource = dbConnection.getDataSource(); 102 conn = dataSource.getConnection();
117 try { 103 return doIt();
118 conn = dataSource.getConnection(); 104 }
119 return doIt(); 105 catch (SQLException sqle) {
120 } 106 logger.error(sqle.getLocalizedMessage(), sqle);
121 catch (SQLException sqle) {
122 logger.error(sqle.getLocalizedMessage(), sqle);
123 }
124 finally {
125 close();
126 }
127 return false;
128 } 107 }
129 finally { 108 finally {
130 rwLock.readLock().unlock(); 109 close();
131 } 110 }
111 return false;
132 } 112 }
133 113
134 public boolean doIt() throws SQLException { 114 public boolean doIt() throws SQLException {
135 return true; 115 return true;
136 } 116 }
137 } // class Instance 117 } // class Instance
138 118
139 protected DBConnection dbConnection; 119 protected DBConnection dbConnection;
140 protected ReentrantReadWriteLock rwLock;
141 120
142 public SQLExecutor() { 121 public SQLExecutor() {
143 rwLock = new ReentrantReadWriteLock();
144 } 122 }
145 123
146 public SQLExecutor(DBConnection dbConnection) { 124 public SQLExecutor(DBConnection dbConnection) {
147 this(); 125 this();
148 this.dbConnection = dbConnection; 126 this.dbConnection = dbConnection;

http://dive4elements.wald.intevation.org