스프링, jdbc 및 aop을 사용하여 트랜잭션이있는 다중 스레드 된 Java 응용 프로그램을 m 패키지의 n 클래스로 모두 데이터베이스 변환에 사용한다고 가정하십시오. 이제 한 트랜잭션 내에서 임의의 클래스 집합 범위를 지정할 필요가 있다고 가정 해 봅시다. 또한 호출 될 때 트랜잭션을 커밋하는 범위 내에 항상 하나의 클래스 T가 있습니다.AOP, Spring 및 트랜잭션 범위 지정
명확성을 위해 예를 들어 보겠습니다. 패키지 A, B, Z 및 클래스 A.Foo, B.Bar 및 Z.T가 제공됩니다. 각 클래스의 다음 인스턴스가 호출됩니다 (다른 클래스가있는 다른 호출자가 호출 할 수 있음). A.Foo, B.Bar, A.Foo, Z.T 트랜잭션은 Z.T가 호출 된 후에 만 커밋됩니다. Z.T가 관련되지 않으면 어떤 이유로 든 트랜잭션이 커밋되지 않습니다.
인스턴스는 서로 호출 할 수 있으며 이미 언급했듯이 단일 인스턴스 (예 : 서비스 계층)에서 모든 인스턴스를 호출하는 공통 진입 점이 없으므로 Spring의 트랜잭션 태그를 쉽게 지정할 수 있습니다.
이제 질문 : 측면을 사용하여이 문제를 해결할 수 있습니까? 그렇다면 기본 접근 방식은 무엇입니까? 감사합니다. .
웹 컨테이너 안에 있는지, 그리고 웹 요청의 일부로 거래가 항상 발생하고 요청 당 여러 건의 거래가 있는지 여부를 명확히 할 수 있습니까? – skaffman
거래는 웹 프런트 엔드를 사용하는지 여부를 알지 못하거나주의해서는 안됩니다. 작업 단 위를 알고있는 서비스 계층이며 트랜잭션이 선언 된 곳입니다. – duffymo
웹 컨테이너 안에 있지 않습니다. 응용 프로그램은 독립 실행 형으로 실행됩니다. duffymo가 맞다. 웹 프론트 엔드는이 경우 중요하지 않아야한다. (만약 내가 존재하는 문제를 바꾸지 않는다면) –