매핑 트랜잭션
많은 프레임워크는 어노테이션을 사용하여 jvmguard에서 트랜잭션으로 전환될 수 있는 중요한 클래스와 진입점을 지정합니다. “매핑된 호출” 트랜잭션 타입을 사용하면 jvmguard가 이 작업을 대신 수행하도록 할 수 있습니다.
메서드 및 클래스 어노테이션
섹션 제목: “메서드 및 클래스 어노테이션”매핑 트랜잭션 정의는 관심 있는 어노테이션의 정규화된 클래스 이름을 받습니다. 어노테이션은 클래스 또는 메서드에 사용될 수 있습니다. 구성을 진행하기 전에 선택한 어노테이션이 어떤 대상에 사용되는지 jvmguard에 알려야 합니다.
어노테이션이 지정된 메서드의 경우 각 메서드 호출이 jvmguard의 트랜잭션이 됩니다. 클래스의 어노테이션은 모든 public 인스턴스 메서드에 대한 호출로 트랜잭션을 생성합니다.
두 번째 선택은 파생 클래스도 고려해야 하는지 여부입니다. 메서드의 경우 재정의된 메서드에서 시간을 캡처하는 것이 중요할 수 있습니다. 예를 들어, 프레임워크가 구현 프록시 클래스를 생성하고 어노테이션이 지정된 메서드를 재정의하여 데이터베이스 트랜잭션을 추가하는 경우 어노테이션이 지정된 메서드뿐만 아니라 프록시 클래스의 메서드를 가로채야 합니다.
어노테이션이 지정된 클래스의 경우 “메서드 선택” 옵션이 트랜잭션을 생성하기 위해 선택되는 메서드를 결정합니다:
- 구현하거나 재정의하는 public 메서드: 어노테이션이 관심 있는 모든 작업을 해당 메서드로 이미 정의하는 인터페이스에 배치된 경우 이 옵션을 선택해야 합니다.
- 모든 public 메서드: 파생 클래스에 어노테이션이 지정된 클래스의 메서드를 구현하거나 재정의하지 않는 자체적인 관심 메서드가 있는 경우 이 옵션을 사용하여 모든 public 메서드에서 트랜잭션을 생성합니다.

파생 클래스의 public 메서드를 가로채는 설정으로 클래스에 어노테이션을 사용하는 경우 트랜잭션 명명에 어떤 클래스 이름을 사용해야 하는지의 문제가 남습니다.
기본적으로 “클래스 이름” 타입의 명명 요소는 가로챈 메서드가 정의된 클래스의 이름을 추가합니다. 대신 어노테이션이 지정된 상위 클래스의 이름을 추가하려면 마법사의 “어노테이션” 단계에서 “필터와 명명에 어노테이션이 지정된 클래스 이름 사용” 확인란을 선택하세요.
반대로 메서드가 호출된 실제 인스턴스의 클래스 이름을 추가하려면 “인스턴스 클래스 이름” 명명 요소를 대신 사용하세요.

더 구체적으로 “인스턴스 이름” 명명 요소는 트랜잭션 메서드가 호출된 객체에 대한 toString() 호출을
추가합니다.

이 명명 요소는 이 객체에 게터 체인을 적용하고 결과에 대한 toString() 호출을 트랜잭션 이름에 추가할 수도
있습니다. 예를 들어, 인스턴스 클래스에 원하는 텍스트를 반환하는 getVerbose() 메서드가 있는 경우 게터
체인을 getVerbose()로 설정합니다. 다음과 같이 public 필드 액세스와 매개변수 없는 public 메서드 호출을
혼합할 수 있습니다:
getParent().descriptor.getVerbose()getClass() 메서드를 사용하여 클래스 이름을 추가하는 경우 “클래스 이름” 및 “인스턴스 클래스 이름” 명명
요소에서 사용할 수 있는 축약 및 단순 클래스 이름 모드를 시뮬레이션하기 위해 jvmguard가 제공하는 두 가지
특별한 필드가 있습니다:
- getClass().simpleName을 사용하면 패키지 없이 클래스의 이름이 추가됩니다. 예를 들어, com.mycorp.MyClass는 MyClass가 됩니다.
- getClass().abbrevName을 사용하면 축약된 패키지 이름이 추가됩니다. 예를 들어, com.mycorp.MyClass는 c.m.MyClass가 됩니다.
“인스턴스 이름” 명명 요소는 항상 실제 메서드 호출이 수반되므로 “인스턴스 클래스 이름” 또는 “클래스 이름” 명명 요소보다 훨씬 높은 오버헤드를 생성한다는 점에 유의하세요.