트랜잭션 롤백을 자동으로 테스트하고 싶습니다. 따라서 자동으로 롤백되어야하는 시스템 예외를 발생시키는 간단한 bean [src]을 구현했습니다 [1]. 또한 인터페이스 SessionSynchronization을 구현하므로 aftercompletion 메서드로 롤백에 영향을 미칠 수 있습니다. 그러나이 방법의 논증은 사실입니다. 나는 이 허위이 될 것으로 예상하고 있습니다 [2].Java EE6 (JBoss7 사용) : 자동으로 트랜잭션 롤백
JBoss 7에서 뭔가가 누락되었거나 버그입니까? 이미 버그 추적기를 검색했지만 아무 것도 찾지 못했습니다 ... 잘못된 단어를 사용했을 수 있습니까?
이 버그가 아닌 경우 : 시스템 또는 응용 프로그램 예외가 occures 경우 false로 afterCompletion 매개 변수를 설정에 관한 설정이 있습니까?
[1] :.. "다시 컨테이너 관리 트랜잭션을 롤백하는 방법은 두 가지가 있습니다 첫째, 시스템 예외가 발생하는 경우, 컨테이너가 자동으로 트랜잭션을 롤백합니다 둘째,의 setRollbackOnly를 호출하여 메서드를 사용하면 bean 메소드가 컨테이너에 트랜잭션을 롤백하도록 지시하고, Bean이 응용 프로그램 예외를 throw하면 롤백은 자동이 아니며 setRollbackOnly를 호출하여 시작할 수 있습니다. "http://docs.oracle.com/javaee/6/tutorial/doc/bncij.html
[2] : 가 ". afterCompletion 메소드는 트랜잭션이 프로토콜이 완료 커밋하는 상태 유지 세션 빈 인스턴스를 통지하고 트랜잭션이 커밋 또는 롤백되었는지 여부 인스턴스를 알려줍니다"http://docs.oracle.com/javaee/6/api/javax/ejb/SessionSynchronization.html
[SRC] :
@Stateful
@LocalBean
public class RollbackTestBean implements RollbackTest, SessionSynchronization {
int counter = 0;
int counterBuffer = 0;
private final Logger logger = Logger.getLogger(this.getClass().getName());
@Override
public int getCounter() {
return counter;
}
@Override
public void throwSystemException() throws SystemException {
counter++;
throw new SystemException();
}
@Override
public void afterBegin() throws EJBException, RemoteException {
logger.info("[TX]: after begin");
counterBuffer = counter;
}
@Override
public void afterCompletion(boolean success) throws EJBException, RemoteException {
logger.info("[TX]: after completion: " + success);
if (!success)
counter = counterBuffer;
}
@Override
public void beforeCompletion() throws EJBException, RemoteException {
logger.info("[TX]: before completion");
}
}
감사를 사용! RuntimeException 처리를 테스트 했습니까? 아니면 remove() 문제를 기반으로 제안 했습니까? '@ApplicationException (rollback = true)'주석은 예상대로 작동합니다. –
나는 둘 다 시험했다. 결과는 내가 게시 한 것이다. – Maddy
다시 한번 감사드립니다! 그래서 RuntimeExceptions는 JBoss 7.1.1에서 올바르게 처리되지 않습니다 ... –