http://mudchobo.tomeii.com/tt/257 에 이어서-_-;
오라클에서 해보겠습니다.
아 우선 오라클용 jdbc가 필요해요!
ojdbc6.jar 등의 jbdc ^^
걍 오라클용 dataSource로 바꿔주면 돼요-_-;
applicationContext.xml
[code]
<!-- oracle용 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
p:driverClassName="oracle.jdbc.driver.OracleDriver"
p:url="jdbc:oracle:thin:@localhost:1521:XE"
p:username="dbid" p:password="dbpw" />
<bean id="insertDataOracle" class="com.mudchobo.TestInsertOracle"
p:sqlMapClient-ref="sqlMapClient"/>
[/code]
아까 그 TestInsert 인터페이스입니다.
TestInsert.java
[code]
package com.mudchobo;
import org.springframework.transaction.annotation.Transactional;
public interface TestInsert {
@Transactional(readOnly=true, rollbackFor={Throwable.class})
public void insertData() throws Throwable;
}
[/code]
저기 선언된 bean인 TestInsertOracle을 구현해봅시다.
TestInsertOracle.java
[code]
package com.mudchobo;
import java.io.IOException;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
public class TestInsertOracle extends SqlMapClientDaoSupport implements
TestInsert {
@Override
public void insertData() throws Throwable {
getSqlMapClientTemplate().insert("insertData");
System.out.println("oracle에 insert성공");
throw new IOException();
}
}
[/code]
MySQL처럼 IOException을 임의로 발생시킵니다.
main부분을 봅시다.
TestTransaction.java
[code]
package com.mudchobo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestTransaction {
public static void main(String[] args) {
String[] configLocation = {"applicationContext.xml"};
ApplicationContext context =
new ClassPathXmlApplicationContext(configLocation);
TestInsert testInsertOracle =
(TestInsert) context.getBean("insertDataOracle");
try {
testInsertOracle.insertData();
} catch (Throwable e) {
System.out.println("예외발생");
}
}
}
[/code]
오라클에서는 readOnly로 걸어 놨는데도 불구하고 insert가 됩니다.
그리고 예외를 발생시켰기 때문에 rollbackfor 값을 Throwable로 줬기때문에 IOException이 발생했을 때 롤백하게 됩니다. 잘보면 롤백이 되어있습니다.
오라클에서 set transaction read only 라고 쿼리를 날리면 transaction을 read only로 해버릴 수 있더라구요.
뭐 그냥 그렇다구요-_-;