11.7.2. 제어 트랜잭션

소개

이 절차 목록은 Jakarta Transactions API를 사용하는 애플리케이션에서 트랜잭션을 제어하는 다양한 방법을 간략하게 설명합니다.

11.7.2.1. 트랜잭션 시작

다음 절차에서는 새 트랜잭션을 시작하는 방법을 설명합니다. Jakarta Transactions 또는 JTS로 구성된 Transaction Manager ™를 실행할 때 API가 동일합니다.

  1. UserTransaction 인스턴스 가져오기.

    Jakarta Enterprise Beans가 @TransactionManagement(TransactionManagementType.BEAN) 주석을 통해 빈 관리 트랜잭션을 사용하는 경우 Java Naming 및 Directory Interface, injection 또는 Jakarta Enterprise Beans 컨텍스트를 사용하여 인스턴스를 가져올 수 있습니다.

    • Java 네이밍 및 디렉터리 인터페이스를 사용하여 인스턴스를 가져옵니다.

      new InitialContext().lookup("java:comp/UserTransaction")
    • 삽입을 사용하여 인스턴스를 가져옵니다.

      @Resource UserTransaction userTransaction;
    • Jakarta Enterprise Beans 컨텍스트를 사용하여 인스턴스를 가져옵니다.

      • 상태 비저장/상태 저장 빈에서 다음을 수행합니다.

        @Resource SessionContext ctx;
        ctx.getUserTransaction();
      • 메시지 기반 빈에서:

        @Resource MessageDrivenContext ctx;
        ctx.getUserTransaction()
  2. 데이터 소스에 연결한 후 UserTransaction.begin() 을 호출합니다.

    try {
        System.out.println("\nCreating connection to database: "+url);
        stmt = conn.createStatement();  // non-tx statement
        try {
            System.out.println("Starting top-level transaction.");
            userTransaction.begin();
            stmtx = conn.createStatement(); // will be a tx-statement
            ...
        }
    }

결과

트랜잭션이 시작됩니다. 데이터 소스의 모든 용도는 트랜잭션을 커밋하거나 롤백할 때까지 트랜잭션입니다.

전체 예는 Jakarta Transactions 트랜잭션 예제 를 참조하십시오.

참고

Jakarta Enterprise Beans(CMT 또는 BMT와 함께 사용됨)의 이점 중 하나는 컨테이너가 트랜잭션 처리의 모든 내부를 관리한다는 것입니다. 즉, JBoss EAP 컨테이너 간에 XA 트랜잭션 또는 트랜잭션 배포의 일부인 트랜잭션을 관리할 수 있다는 것입니다.

11.7.2.1.1. 중첩 트랜잭션

중첩 트랜잭션을 사용하면 애플리케이션에서 기존 트랜잭션에 포함된 트랜잭션을 생성할 수 있습니다. 이 모델에서는 여러 하위 트랜잭션을 트랜잭션에 반복적으로 포함할 수 있습니다. 하위 트랜잭션은 상위 트랜잭션을 커밋하거나 롤백하지 않고 커밋하거나 롤백할 수 있습니다. 그러나 커밋 작업의 결과는 모든 트랜잭션의 상위에 대한 약속에 따릅니다.

구현 관련 정보는 Narayana 프로젝트 설명서 를 참조하십시오.

중첩 트랜잭션은 JTS 사양과 함께 사용하는 경우에만 사용할 수 있습니다. 중첩 트랜잭션은 JBoss EAP 애플리케이션 서버의 지원 기능이 아닙니다. 또한 많은 데이터베이스 벤더가 중첩 트랜잭션을 지원하지 않으므로 중첩 트랜잭션을 추가하기 전에 데이터베이스 벤더에게 문의하십시오.