2012-09-25 2 views
1

나는 webservices의 초보자이며 WebServices를 사용하는 테스트 자동화에서 세이브 포인트 메커니즘을 사용하려고 생각하고있었습니다. 세이브가 롤백하면 자동화 중에 만들어 더티 데이터 닦아야한다되도록 아래 코드 저장 점을 설정하고, 다시하는 웹 서비스를 이용하여 여러 CRUD 조작되는 압연 사이테스트 자동화에서 세이브 포인트를 설정하고 롤백하기위한 모범 사례

Connection con = 
    DriverManager.getConnection("jdbc:derby://localhost:1527/testDb", 
           "name","pass"); 
con.setAutoCommit(false); 
Savepoint spt1 = con.setSavepoint("svpt1"); 
WebService.Post() method for various CRUD operations..... 
con.rollback(spt1); 
con.commit(); 

동작은 떨어져서. 저장 점 메커니즘을 사용하는 것이 좋은지 궁금하다. 사용법이 좋다면 저장 점을 롤백하는 평균 시간은 얼마인가?

+0

데이터베이스가 Oracle 11g R2 – Sammy

답변

0

질문을 오해하지 않는 한 다른 트랜잭션에서 수행 된 작업을 롤백 할 수 없습니다. 그래서 여기서하고있는 일은별로 의미가 없습니다.

세이브 포인트 이후 롤백 할 때 세이브 포인트 및 롤백을 사용하여 롤백을으로 수행 할 수 있습니다. 그 밖의 모든 것은 세이브 포인트에 관계되지 않으며 취소 할 수 없습니다.

+0

안녕하세요라고 언급하는 것을 잊었습니다. 답장을 보내 주셔서 감사합니다. SetSavepoint 메소드와 롤백의 세이브 포인트 이름이 다릅니다. 매우 유감스럽게도 오타였습니다. 그래서 세이브 포인트 "ABC"를 만들고 "ABC"로 롤백 할 수 있으며 어떤 일이 일어 났는지간에 취소 할 수 있습니까? 그래서 데이터베이스는 테스트 케이스 실행 이전의 환경과 일치하는 깨끗한 상태 환경으로 돌아갈 것입니다. – Sammy

+0

아니요. SavePoint는 전체 데이터베이스의 일부 스냅 샷이 아닙니다. 롤백 한 연결을 사용하여 수행 한 모든 작업을 롤백 (또는 원할 경우 실행 취소)하는 데에만 사용할 수 있습니다. 다른 연결 (즉, 웹 서비스에서 사용하는 연결)이 고유 한 다른 연결을 사용하여 삽입, 업데이트 또는 삭제 된 행을 완료 한 경우 이러한 작업을 롤백 할 수 없습니다. 일단 커밋되면 데이터베이스에 있습니다. 트랜잭션은 서로 격리되어 실행됩니다. –

0

소리는 DBUnit의 완벽한 활용 사례와 비슷합니다. 각 테스트 실행 전에 전체 데이터베이스를 다시 만들 수 있습니다.

+0

곧 공개 될 [DbSetup] (http://dbsetup.ninja-squad.com/) :-) –