Vi åbner transaktioner i skrivebeskyttet tilstand og konverterer den derefter til skrivetilstand, da skrivebeskyttede forbindelser ikke vil være et problem, som det er med salve DB.
Vi tilsidesætter HibernateTemplate klasse og opret metoder til at lave session i skrivetilstand
public final void writeEnabled(){
getSession().doWork(jdbcWorkWriteEnabled);
}
public final void writeDisabled(boolean flush){
if(flush)
flush();
getSession().doWork(jdbcWorkWriteDisabled);
}
public static final void writeEnabled(Session session){
session.doWork(jdbcWorkWriteEnabled);
}
public static final void writeDisabled(boolean flush,Session session){
if(flush)
session.flush();
session.doWork(jdbcWorkWriteDisabled);
}
final static Work jdbcWorkWriteEnabled = new Work(){
public void execute(Connection connection) throws SQLException {
connection.setReadOnly(false);
}
};
final static Work jdbcWorkWriteDisabled = new Work(){
public void execute(Connection connection) throws SQLException {
connection.setReadOnly(true);
}
};
I applikationslogikken før skrivning tjekker vi
Forbindelsen er i skrivetilstand, og skriv derefter.
ellers hvis forbindelsen er skrivebeskyttet, så lav den først i skrivetilstand, lav skriveoperation og vend den tilbage til skrivebeskyttet igen