Main Page | Packages | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread Class Reference

List of all members.

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 ()

Detailed Description

Logger thread for the JDBCRecoveryLog.

Author:
Emmanuel Cecchet
Version:
1.0

Definition at line 40 of file JDBCLoggerThread.java.


Constructor & Destructor Documentation

org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.JDBCLoggerThread PreparedStatement  pstmt,
Trace  logger
 

Create a new JDBCLoggerThread

Parameters:
pstmt the PreparedStatement to use to log the requests
logger where to log error messages

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   }


Member Function Documentation

synchronized boolean org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.getLogQueueIsEmpty  ) 
 

Tells whether there are pending logs

Returns:
true if no more jobs in the log queue

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   }

synchronized void org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.log long  id,
String  login,
String  query,
long  tid,
boolean  escapeProcessing
 

Log a query.

Parameters:
id unique request id
login login used for this request
query query to log
tid transaction id of this request
escapeProcessing true if escape processing must be done

Definition at line 138 of file JDBCLoggerThread.java.

00140   {
00141     logQueue.add(new LogObject(id, login, query, tid, escapeProcessing));
00142     notify();
00143   }

synchronized void org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.removeQueriesOfTransactionFromQueue long  tid  ) 
 

Remove all queries that have not been logged yet and belonging to the specified transaction.

Parameters:
tid transaction id to rollback

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   }

synchronized void org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.rollbackTransactions  ) 
 

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   }

void org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.run  ) 
 

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   }


The documentation for this class was generated from the following file:
Generated on Mon Apr 11 22:04:21 2005 for C-JDBC by  doxygen 1.3.9.1