トランザクションを読み取り専用モードで開き、それを書き込みモードに変換します。これは、salveDBの場合のように読み取り専用接続が問題になることはないためです。
HibernateTemplateをオーバーライドします 書き込みモードでセッションを作成するためのクラスおよび作成メソッド
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);
}
};
書き込み前のアプリケーションロジックで、
接続が書き込みモードになっていることを確認してから、単純に書き込みます。
接続が読み取り専用の場合は、最初に書き込みモードにし、書き込み操作を実行してから、再度読み取り専用に戻します