다음 코드는 update() 메소드에서 널 포인터 예외를 throw하더라도 롤백에 도움이되지 않습니다. 매번 코드를 실행하면 데이터베이스에 값이 삽입됩니다. update() 메소드에서 null 포인터가 발생하면 어떻게 트랜잭션을 롤백 할 수 있습니까? 코드에서 뭔가 빠졌습니까?CMT 롤백 : 트랜잭션을 롤백하는 방법
@TransactionManagement(value = TransactionManagementType.CONTAINER)
public class Bean implements RemoteIF {
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void insertIntoDb() {
insert();
update();
}
private Integer update() {
val=0;
try {
Connection con = DbConn.getConnection();
Statement st = con.createStatement();
val1 = st.executeUpdate("INSERT INTO tab VALUES('ab')");
st.close();
throw new NullPointerException();
} catch (Exception e) {
System.out.println(e);
}
return val;
}
private Integer insert() {
int val = 0;
try {
Connection con = DbConn.getConnection();
Statement st = con.createStatement();
val = st.executeUpdate("INSERT INTO tab VALUES('bnm')");
st.close();
} catch (Exception e) {
System.out.println(e);
}
return val;
}
}
왜 JPA를 사용하지 않는? 또한 EJB의 트랜잭션 전파, 롤백 등에 대한 자세한 내용은 온라인 설명서 (http://docs.oracle.com/javaee/6/tutorial/doc/)를 참조하십시오. –