クラス org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread

すべてのメンバ一覧

説明

Logger thread for the JDBCRecoveryLog.

作者:
Emmanuel Cecchet
バージョン:
1.0

JDBCLoggerThread.java40 行で定義されています。

Public メソッド

 JDBCLoggerThread (PreparedStatement pstmt, PreparedStatement removeBeginStatement, Trace logger)
synchronized void log (long id, String login, String query, long tid, boolean escapeProcessing)
synchronized void rollbackTransactions ()
synchronized void rollbackTransaction (long tid)
synchronized boolean getLogQueueIsEmpty ()
void run ()

Private 変数

boolean killed = false
ArrayList logQueue
PreparedStatement pstmt
PreparedStatement removeBeginStatement
Trace logger


コンストラクタとデストラクタ

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

Create a new JDBCLoggerThread

引数:
pstmt the PreparedStatement to use to log the requests
removeBeginStatement PreparedStatement to remove the begin statement of a transaction from the log
logger where to log error messages

JDBCLoggerThread.java124 行で定義されています。

参照先 org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.logQueue.

00126   {
00127     super("JDBCLoggerThread");
00128     this.pstmt = pstmt;
00129     this.removeBeginStatement = removeBeginStatement;
00130     this.logger = logger;
00131     logQueue = new ArrayList();
00132   }


メソッド

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

Tells whether there are pending logs

戻り値:
true if no more jobs in the log queue

JDBCLoggerThread.java197 行で定義されています。

参照先 org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.logQueue.

参照元 org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.run().

00198   {
00199     if (logQueue.isEmpty())
00200     {
00201       // Notifies the Recovery log that the queue is empty.
00202       notify();
00203       return true;
00204     }
00205     else
00206     {
00207       return false;
00208     }
00209   }

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

Log a query.

引数:
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

JDBCLoggerThread.java143 行で定義されています。

参照先 org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.logQueue.

00145   {
00146     logQueue.add(new LogObject(id, login, query, tid, escapeProcessing));
00147     notify();
00148   }

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

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

引数:
tid transaction id to rollback

JDBCLoggerThread.java180 行で定義されています。

参照先 org.objectweb.cjdbc.common.log.Trace.debug(), org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.LogObject.getTid(), と org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.logQueue.

参照元 org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.rollbackTransactions().

00181   {
00182     logger.debug(Translate.get("recovery.jdbc.loggerthread.rollback", tid));
00183     LogObject logEntry;
00184     for (int i = 0; i < logQueue.size(); i++)
00185     {
00186       logEntry = (LogObject) logQueue.get(i);
00187       if (logEntry.getTid() == tid)
00188         logQueue.remove(i);
00189     }
00190   }

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

Roll back all unfinished transactions.

JDBCLoggerThread.java153 行で定義されています。

参照先 org.objectweb.cjdbc.common.log.Trace.debug(), org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.LogObject.getQuery(), org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.LogObject.getTid(), org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.logQueue, と org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.rollbackTransaction().

00154   {
00155     if (logQueue.isEmpty())
00156     {
00157       logger.debug(Translate
00158           .get("recovery.jdbc.loggerthread.rollback.no.transaction"));
00159       return;
00160     }
00161     // Find all begun transactions
00162     LogObject log;
00163     for (int i = 0; i < logQueue.size(); i++)
00164     {
00165       log = (LogObject) logQueue.get(i);
00166       if (log.getQuery().equalsIgnoreCase("begin"))
00167       {
00168         // Found beginning of transaction, let's roll it back
00169         rollbackTransaction(log.getTid());
00170       }
00171     }
00172   }

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.

JDBCLoggerThread.java215 行で定義されています。

参照先 org.objectweb.cjdbc.common.log.Trace.debug(), org.objectweb.cjdbc.common.log.Trace.error(), org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.LogObject.getEscapeProcessing(), org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.LogObject.getId(), org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.LogObject.getLogin(), org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.getLogQueueIsEmpty(), org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.LogObject.getQuery(), org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.LogObject.getTid(), org.objectweb.cjdbc.common.log.Trace.info(), org.objectweb.cjdbc.common.log.Trace.isDebugEnabled(), org.objectweb.cjdbc.common.log.Trace.isInfoEnabled(), org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.killed, org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.logQueue, org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.pstmt, org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.removeBeginStatement, と org.objectweb.cjdbc.common.log.Trace.warn().

00216   {
00217     LogObject params;
00218 
00219     while (!killed)
00220     {
00221       synchronized (this)
00222       {
00223         while (getLogQueueIsEmpty())
00224         {
00225           try
00226           {
00227             wait();
00228           }
00229           catch (InterruptedException e)
00230           {
00231             logger.warn(Translate.get("recovery.jdbc.loggerthread.awaken"), e);
00232           }
00233         }
00234         params = (LogObject) logQueue.remove(0);
00235         if (params.getQuery().equals("c"))
00236         { // The transaction succeeded
00237           // Remove the begin with this tranactionId from the database
00238           try
00239           {
00240             removeBeginStatement.setLong(1, params.getTid());
00241             removeBeginStatement.executeUpdate();
00242           }
00243           catch (SQLException ignore)
00244           {
00245           }
00246         }
00247         else
00248         {
00249           try
00250           {
00251             pstmt.setLong(1, params.getId());
00252             pstmt.setString(2, params.getLogin());
00253             pstmt.setString(3, params.getQuery());
00254             pstmt.setLong(4, params.getTid());
00255             pstmt.setEscapeProcessing(params.getEscapeProcessing());
00256             pstmt.executeUpdate();
00257             if (logger.isDebugEnabled())
00258               logger.debug(Translate.get(
00259                   "recovery.jdbc.loggerthread.log.debug", new String[]{
00260                       String.valueOf(params.getId()), params.getLogin(),
00261                       params.getQuery(), String.valueOf(params.getTid()),
00262                       String.valueOf(params.getEscapeProcessing())}));
00263             else if (logger.isInfoEnabled())
00264               logger.info(Translate.get("recovery.jdbc.loggerthread.log.info",
00265                   params.getId()));
00266           }
00267           catch (SQLException e)
00268           {
00269             logger.error(Translate
00270                 .get("recovery.jdbc.loggerthread.log.failed", new String[]{
00271                     params.getQuery(), String.valueOf(params.getTid())}), e);
00272           }
00273         }
00274       }
00275     }
00276   }


変数

boolean org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.killed = false [private]
 

JDBCLoggerThread.java42 行で定義されています。

参照元 org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.run().

Trace org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.logger [private]
 

JDBCLoggerThread.java46 行で定義されています。

ArrayList org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.logQueue [private]
 

JDBCLoggerThread.java43 行で定義されています。

参照元 org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.getLogQueueIsEmpty(), org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.JDBCLoggerThread(), org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.log(), org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.rollbackTransaction(), org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.rollbackTransactions(), と org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.run().

PreparedStatement org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.pstmt [private]
 

JDBCLoggerThread.java44 行で定義されています。

参照元 org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.run().

PreparedStatement org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.removeBeginStatement [private]
 

JDBCLoggerThread.java45 行で定義されています。

参照元 org.objectweb.cjdbc.controller.recoverylog.JDBCLoggerThread.run().


このクラスの説明は次のファイルから生成されました:
CJDBCversion1.0rc6に対してWed May 5 18:02:50 2004に生成されました。 doxygen 1.3.6