00001
00025 package org.objectweb.cjdbc.controller.recoverylog;
00026
00027
import java.sql.SQLException;
00028
import java.util.ArrayList;
00029
00030
import org.objectweb.cjdbc.common.i18n.Translate;
00031
import org.objectweb.cjdbc.common.log.Trace;
00032
import org.objectweb.cjdbc.common.sql.AbstractWriteRequest;
00033
import org.objectweb.cjdbc.common.sql.StoredProcedure;
00034
import org.objectweb.cjdbc.common.xml.DatabasesXmlTags;
00035
import org.objectweb.cjdbc.common.xml.XmlComponent;
00036
import org.objectweb.cjdbc.controller.requestmanager.TransactionMarkerMetaData;
00037
00046 public abstract class AbstractRecoveryLog implements XmlComponent
00047 {
00048
00049 static Trace
logger = Trace
00050 .getLogger(
"org.objectweb.cjdbc.controller.recoverylog");
00051
00052 private long recoveringNb = 0;
00053
00060
public abstract void logRequest(
AbstractWriteRequest request)
00061
throws SQLException;
00062
00070
public abstract void logRequest(
StoredProcedure proc,
boolean isRead)
00071
throws SQLException;
00072
00073
00074
00075
00076
00083
public abstract long getLastTransactionId() throws SQLException;
00084
00091 public abstract
void begin(
TransactionMarkerMetaData tm) throws SQLException;
00092
00099 public abstract
void commit(
TransactionMarkerMetaData tm) throws SQLException;
00100
00107 public abstract
void rollback(
TransactionMarkerMetaData tm)
00108 throws SQLException;
00109
00110
00111
00112
00113
00120 public abstract
void storeCheckpoint(String checkpointName)
00121 throws SQLException;
00122
00130 public abstract
void storeCheckpoint(String checkpointName,
long requestId)
00131 throws SQLException;
00132
00140 public abstract
void removeCheckpoint(String checkpointName)
00141 throws SQLException;
00142
00153 public abstract
long getCheckpointRequestId(String checkpointName)
00154 throws SQLException;
00155
00168 public abstract
RecoveryTask recoverNextRequest(
long previousRequestId)
00169 throws SQLException;
00170
00174 public synchronized
void beginRecovery()
00175
00176 {
00177
recoveringNb++;
00178 }
00179
00186 public synchronized void endRecovery()
00187 {
00188
recoveringNb--;
00189
if (
recoveringNb == 0)
00190 {
00191
try
00192 {
00193
cleanRecoveryLog();
00194 }
00195
catch (SQLException e)
00196 {
00197
logger.error(
Translate.get(
"recovery.cleaning.failed", e));
00198 }
00199 }
00200 }
00201
00208 public synchronized boolean isRecovering()
00209 {
00210
return recoveringNb > 0;
00211 }
00212
00218
public abstract void cleanRecoveryLog() throws SQLException;
00219
00225 public String getXml()
00226
00227 {
00228 StringBuffer info =
new StringBuffer();
00229 info.append(
"<" +
DatabasesXmlTags.ELT_RecoveryLog +
">");
00230 info.append(
getXmlImpl());
00231 info.append(
"</" +
DatabasesXmlTags.ELT_RecoveryLog +
">");
00232
return info.toString();
00233 }
00234
00238
public abstract String
getXmlImpl();
00239
00247
public abstract ArrayList
getCheckpointNames() throws SQLException;
00248
00258 public abstract
void storeBackendInfo(String databaseName,
00259 String backendName, String checkpoint,
int backendState) throws SQLException;
00260
00270 public abstract
BackendRecoveryInfo getBackendInfo(String databaseName,
00271 String backendName) throws SQLException;
00272
00279 public abstract String[][] getData();
00280
00281 }