기본 spring jar외 commons-pool, commons-dbcp jar가 필요 합니다.
당연히 oracle jdbc driver는 필요하구요.
오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)
package transaction;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
public class TransactionTest {
DataSource dataSource;
PlatformTransactionManager transactionManager;
public static void main(String[] args) {
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
ds.setUrl("jdbc:oracle:thin:@localhost:1521:wink");
ds.setUsername("scott");
ds.setPassword("tiger");
DataSourceTransactionManager tm = new DataSourceTransactionManager();
tm.setDataSource(ds);
TransactionTest update = new TransactionTest();
update.setDataSource(ds);
update.setTransactionManager(tm);
//execute
update.doUpdate();
System.out.println("<<<<<<<<<<<<< TR OK >>>>>>>>>>>>");
}
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public void setTransactionManager(PlatformTransactionManager transactionManager){
this.transactionManager = transactionManager;
}
public void doUpdate() {
DefaultTransactionDefinition td = new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRED);
td.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
td.setTimeout(10);
TransactionStatus status = transactionManager.getTransaction(td);
try {
updateSal();
} catch( DataAccessException e) {
transactionManager.rollback(status);
throw e;
}
transactionManager.commit(status);
}
private void updateSal() throws DataAccessException{
String strQuery = "update emp set sal = 0 where sal = 2000000 ";
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.update(strQuery);
}
}
DataSource dataSource;
PlatformTransactionManager transactionManager;
public static void main(String[] args) {
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
ds.setUrl("jdbc:oracle:thin:@localhost:1521:wink");
ds.setUsername("scott");
ds.setPassword("tiger");
DataSourceTransactionManager tm = new DataSourceTransactionManager();
tm.setDataSource(ds);
TransactionTest update = new TransactionTest();
update.setDataSource(ds);
update.setTransactionManager(tm);
//execute
update.doUpdate();
System.out.println("<<<<<<<<<<<<< TR OK >>>>>>>>>>>>");
}
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public void setTransactionManager(PlatformTransactionManager transactionManager){
this.transactionManager = transactionManager;
}
public void doUpdate() {
DefaultTransactionDefinition td = new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRED);
td.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
td.setTimeout(10);
TransactionStatus status = transactionManager.getTransaction(td);
try {
updateSal();
} catch( DataAccessException e) {
transactionManager.rollback(status);
throw e;
}
transactionManager.commit(status);
}
private void updateSal() throws DataAccessException{
String strQuery = "update emp set sal = 0 where sal = 2000000 ";
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.update(strQuery);
}
}
댓글 없음:
댓글 쓰기