Mercurial > dive4elements > framework
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; |