package jef.database;
import java.sql.Connection;
import java.sql.SQLException;
import javax.persistence.PersistenceException;
import org.easyframe.enterprise.spring.TransactionMode;
import jef.database.cache.CacheDummy;
import jef.database.innerpool.AbstractJDBCConnection;
import jef.database.innerpool.IConnection;
public class ManagedTransactionImpl extends Transaction{
public ManagedTransactionImpl(DbClient parent,Connection connection) {
super();
this.parent = parent;
this.preProcessor=parent.preProcessor;
this.selectp = parent.selectp;
this.insertp = parent.insertp;
this.updatep=parent.updatep;
this.deletep=parent.deletep;
cache = CacheDummy.getInstance();
this.conn=new Conn(connection);
}
static final class Conn extends AbstractJDBCConnection implements IConnection{
Conn(Connection conn) {
this.conn=conn;
}
@Override
public void closePhysical() {
try {
conn.close();
} catch (SQLException e) {
throw new PersistenceException(e);
}
}
@Override
public void setKey(String key) {
}
@Override
public void ensureOpen() throws SQLException {
}
@Override
public void close(){
throw new UnsupportedOperationException();
}
@Override
public String toString() {
return conn.toString();
}
public boolean isClosed() throws SQLException{
return conn==null || conn.isClosed();
}
}
@Override
IConnection getConnection() throws SQLException {
return conn;
}
@Override
public void close() {
}
@Override
public void commit(boolean flag) {
}
@Override
public void rollback(boolean flag) {
}
@Override
public void setRollbackOnly(boolean b) {
}
public boolean isOpen() {
try {
return !conn.isClosed();
} catch (SQLException e) {
throw DbUtils.toRuntimeException(e);
}
}
@Override
public boolean isRollbackOnly() {
return false;
}
@Override
public TransactionFlag getTransactionFlag() {
return TransactionFlag.Managed;
}
@Override
public void setReadonly(boolean flag) {
}
@Override
public boolean isReadonly() {
try {
return conn.isReadOnly();
} catch (SQLException e) {
throw new PersistenceException(e);
}
}
@Override
public int getIsolationLevel() {
return ISOLATION_DEFAULT;
}
@Override
public void setIsolationLevel(int isolationLevel) {
}
@Override
public Transaction setAutoCommit(boolean autoCommit) {
return this;
}
@Override
public boolean isAutoCommit() {
try {
return conn.getAutoCommit();
} catch (SQLException e) {
throw new PersistenceException(e);
}
}
@Override
protected TransactionMode getTxType() {
return parent.getTxType();
}
@Override
protected boolean isJpaTx() {
return false;
}
}