
com.venky.swf.db.Transaction Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of swf-db Show documentation
Show all versions of swf-db Show documentation
Succinct Web Framework - Db
The newest version!
package com.venky.swf.db;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.HashSet;
import java.util.Set;
import com.venky.core.checkpoint.Checkpoint;
import com.venky.core.checkpoint.MergeableMap;
import com.venky.core.log.ExtendedLevel;
import com.venky.core.log.SWFLogger;
import com.venky.core.log.TimerStatistics.Timer;
import com.venky.swf.db.jdbc.SWFSavepoint;
import com.venky.swf.db.model.Model;
import com.venky.swf.db.model.reflection.ModelReflector;
import com.venky.swf.db.table.QueryCache;
import com.venky.swf.routing.Config;
public class Transaction implements _IDatabase._ITransaction {
public SWFSavepoint getSavepoint() {
return savepoint;
}
private SWFSavepoint savepoint = null;
private int transactionNo = -1 ;
private Checkpoint> checkpoint = null;
public Transaction(int transactionNo, Checkpoint> cp) {
this.transactionNo = transactionNo;
checkpoint = cp;
savepoint = new SWFSavepoint(String.valueOf(transactionNo));
setSavepoint();
Config.instance().getLogger(Database.class.getName()).fine("Transaction:"+transactionNo+" Started : " + Database.getCaller());
}
public int getTransactionNo(){
return transactionNo;
}
public Checkpoint> getCheckpoint(){
return checkpoint;
}
SWFLogger cat = Config.instance().getLogger(getClass().getName());
public void setSavepoint(){
try {
for (String pool : getActivePools()){ //Set in all pools
cat.fine("Set Save point on pool " + pool );
savepoint.addSavepoint(pool);
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public void releaseSavepoint(){
try {
for (String pool :getActivePools()) {
savepoint.removeSavepoint(pool);
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public void rollbackToSavePoint(){
try {
for (String pool : getActivePools()) {
savepoint.rollback(pool);
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public void registerCommit() {
Config.instance().getLogger(Database.class.getName()).fine("Transaction:"+transactionNo+" .registerCommit : " + Database.getCaller());
Database.getInstance().getTransactionManager().registerCommit(this);
}
public void commit() {
String ctx = cat.isLoggable(ExtendedLevel.TIMER) ? "Transaction:"+transactionNo+ " commit " + Database.getCaller() : null;
Timer t = cat.startTimer(ctx,Config.instance().isTimerAdditive());
try {
Database.getInstance().getTransactionManager().commit(this);
}finally{
t.stop();
}
}
public void rollback(Throwable th) {
String ctx = cat.isLoggable(ExtendedLevel.TIMER) ? "Transaction:"+transactionNo+ " rollback " + Database.getCaller() : null;
Timer t = cat.startTimer(ctx,Config.instance().isTimerAdditive());
try {
Database.getInstance().getTransactionManager().rollback(this,th);
}finally{
t.stop();
}
}
public QueryCache getCache(ModelReflector ref) {
String tableName = ref.getTableName();
QueryCache queryCache = (QueryCache)getAttribute(QueryCache.class.getName()+".for."+tableName);
if (queryCache == null){
queryCache = new QueryCache(tableName);
}
setAttribute(QueryCache.class.getName() + ".for." + tableName, queryCache);
return queryCache;
}
public void setAttribute(String name,Object value){
checkpoint.getValue().put(name, value);
if (value != null && !(value instanceof Serializable) && !(value instanceof Cloneable)){
Config.instance().getLogger(Database.class.getName()).warning(value.getClass().getName() + " not Serializable or Cloneable. Checkpointing in nested transactions may exhibit unexpected behaviour!");
}
}
@SuppressWarnings("unchecked")
public A getAttribute(String name){
return (A)checkpoint.getValue().get(name);
}
public Set getActivePools(){
Set activePools = getAttribute("active.connection.pools");
if (activePools == null){
activePools = new HashSet(10);
setAttribute("active.connection.pools", activePools);
}
return activePools;
}
public void registerActivePool(String pool){
if (getActivePools().add(pool)){
try {
savepoint.addSavepoint(pool);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
public void registerTableDataChanged(String tableName){
getTablesChanged().add(tableName);
}
public Set getTablesChanged(){
Set models = getAttribute("tables.modified");
if (models == null){
models = new HashSet();
setAttribute("tables.modified", models);
}
return models;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy