Public Member Functions | |
JDBCLoggerThread (PreparedStatement pstmt, Trace logger) | |
synchronized void | log (long id, String login, String query, long tid, boolean escapeProcessing) |
synchronized void | rollbackTransactions () |
synchronized void | removeQueriesOfTransactionFromQueue (long tid) |
synchronized boolean | getLogQueueIsEmpty () |
void | run () |
Definition at line 40 of file JDBCLoggerThread.java.
|
Create a new JDBCLoggerThread
Definition at line 121 of file JDBCLoggerThread.java. 00122 { 00123 super("JDBCLoggerThread"); 00124 this.pstmt = pstmt; 00125 this.logger = logger; 00126 logQueue = new ArrayList(); 00127 }
|
|
Tells whether there are pending logs
Definition at line 194 of file JDBCLoggerThread.java. Referenced by org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.run(). 00195 { 00196 if (logQueue.isEmpty()) 00197 { 00198 // Notifies the Recovery log that the queue is empty. 00199 notify(); 00200 return true; 00201 } 00202 else 00203 { 00204 return false; 00205 } 00206 }
|
|
Log a query.
Definition at line 138 of file JDBCLoggerThread.java. 00140 { 00141 logQueue.add(new LogObject(id, login, query, tid, escapeProcessing)); 00142 notify(); 00143 }
|
|
Remove all queries that have not been logged yet and belonging to the specified transaction.
Definition at line 176 of file JDBCLoggerThread.java. Referenced by org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.rollbackTransactions(). 00177 { 00178 if (logger.isDebugEnabled()) 00179 logger.debug(Translate.get("recovery.jdbc.loggerthread.removing", tid)); 00180 LogObject logEntry; 00181 for (int i = 0; i < logQueue.size(); i++) 00182 { 00183 logEntry = (LogObject) logQueue.get(i); 00184 if (logEntry.getTid() == tid) 00185 logQueue.remove(i); 00186 } 00187 }
|
|
Rollback all unfinished transactions. Definition at line 148 of file JDBCLoggerThread.java. References org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.removeQueriesOfTransactionFromQueue(). 00149 { 00150 if (logQueue.isEmpty()) 00151 { 00152 if (logger.isDebugEnabled()) 00153 logger 00154 .debug(Translate.get("recovery.jdbc.loggerthread.no.transaction")); 00155 return; 00156 } 00157 // Find all begun transactions 00158 LogObject log; 00159 for (int i = 0; i < logQueue.size(); i++) 00160 { 00161 log = (LogObject) logQueue.get(i); 00162 if (log.getQuery().equalsIgnoreCase("begin")) 00163 { 00164 // Found beginning of transaction, let's roll it back 00165 removeQueriesOfTransactionFromQueue(log.getTid()); 00166 } 00167 } 00168 }
|
|
Log the requests from queue until the thread is explicetly killed. The logger used is the one of the JDBCRecoveryLog. Definition at line 212 of file JDBCLoggerThread.java. References org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.getLogQueueIsEmpty(). 00213 { 00214 LogObject params; 00215 00216 while (!killed) 00217 { 00218 synchronized (this) 00219 { 00220 while (getLogQueueIsEmpty()) 00221 { 00222 try 00223 { 00224 wait(); 00225 } 00226 catch (InterruptedException e) 00227 { 00228 logger.warn(Translate.get("recovery.jdbc.loggerthread.awaken"), e); 00229 } 00230 } 00231 // Pump first log entry from the queue 00232 params = (LogObject) logQueue.remove(0); 00233 try 00234 { 00235 pstmt.setLong(1, params.getId()); 00236 pstmt.setString(2, params.getLogin()); 00237 pstmt.setString(3, params.getQuery()); 00238 pstmt.setLong(4, params.getTid()); 00239 try 00240 { 00241 pstmt.setEscapeProcessing(params.getEscapeProcessing()); 00242 } 00243 catch (Exception ignore) 00244 { 00245 } 00246 pstmt.executeUpdate(); 00247 if (logger.isDebugEnabled()) 00248 logger.debug(Translate.get("recovery.jdbc.loggerthread.log.debug", 00249 new String[]{String.valueOf(params.getId()), params.getLogin(), 00250 params.getQuery(), String.valueOf(params.getTid()), 00251 String.valueOf(params.getEscapeProcessing())})); 00252 else if (logger.isInfoEnabled()) 00253 logger.info(Translate.get("recovery.jdbc.loggerthread.log.info", 00254 params.getId())); 00255 } 00256 catch (SQLException e) 00257 { 00258 logger.error( 00259 Translate.get("recovery.jdbc.loggerthread.log.failed", 00260 new String[]{params.getQuery(), 00261 String.valueOf(params.getTid())}), e); 00262 // Push object back in the queue, it needs to be logged again 00263 logQueue.add(0, params); 00264 } 00265 } 00266 } 00267 }
|