Abrimos transações no modo somente leitura e depois as convertemos para o modo de gravação, pois as conexões somente leitura não serão um problema, pois é com o banco de dados salve.
Substituímos o HibernateTemplate class e crie métodos para fazer a sessão no modo de gravação
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);
}
};
Na lógica da aplicação, antes de escrever, verificamos
A conexão está no modo de gravação e, em seguida, simplesmente escreve.
se a conexão for somente leitura, primeiro faça-a no modo de gravação, faça a operação de gravação e, novamente, volte para somente leitura