Tagged

트랜잭션

A collection of 20 posts

트랜잭션

Transaction 관련 API

J2EE without EJB p242 의 그림입니다.TransactionDefinition, TransactionStatus, PlatformTransactionManagerPlatformTransactionManager 인터페이스를 구현한 클래스들 AbstractPlatformTransactionManager, CciLocalTransactionManager, DataSourceTransactionManager, HibernateTransactionManager, HibernateTransactionManager, JdoTransactionManager, JmsTransactionManager, JmsTransactionManager102, JpaTransactionManager, JtaTransactionManager, OC4JJtaTransactionManager, TopLinkTransactionManager, WebLogicJtaTransactionManager TransactionDefinition 인터페이스르 구현한 클래스들 DefaultTransactionAttribute, DefaultTransactionDefinition, DelegatingTransactionAttribute, RuleBasedTransactionAttribute, TransactionTemplate TransactionException 은 모두 RuntimeException으로 un-checked Exception입니다.

트랜잭션

9.7. Choosing between programmatic and declarative transaction management

programmatic transaction management 트랜잭션 처리를 할 부분이 매우 일부라면 트랜잭션 프록시 같은 것을 사용하지 않고 그냥 TransactionTemplate 을 사용하여 처리하는 것을 권장합니다. 트랜잭션 이름을 명시적으로 사용할 수 있다는 것도 이런 방법의 장점 중 하나입니다.[footnote]선언적인 방법에서는 트랜잭션 이름을 (아직까진) 명시적으로 줄 수 없었습니다.[/footnote] declarative transaction management 트랜잭션 처리

트랜잭션

9.6. Programmatic transaction management

선언적인 방법이 아니고 프로그래밍을 통해 트랜잭션 관리를 할 때 두 가지 경우가 있습니다.1. TransactionTemplate 사용 할 경우2. PlatformTransactionManager 를 구현한 클래스를 직접 사용 할 경우 9.6.1. Using the TransactionTemplate private final TransactionTemplate transactionTemplate; 이렇게 멤버로 지정해 놓고 사용하면 됩니다. 먼저 트랜잭션의 속성을 설정하는 방법은 다음과 같습니다.  

@Transactional

@Transactional 속성들

아직 name 속성은 없습니다. name 속성을 사용해서 로깅이나 트랜잭션 모니터링을 할 때 트랜잭션 이름을 원하는 이름으로 출력할 수 있을 겁니다. 하지만 지금은 “패키지 경로가 붙은 클래스 이름.해당 메소드”가 기본 이름이 됩니다. Property Type Description propagation enum: Propagation optional propagation setting isolation enum: Isolation optional isolation level

@Tracsactional

9.5.6. Using @Transactional

이전에 봤던 XML 설정을 사용하여 트랜잭션을 선언하는 방법 말고 어노테이션을 사용하여 설정하는 방법을 설명합니다. @Transactionalpublic class DefaultFooService implements FooService {     Foo getFoo(String fooName);     Foo getFoo(String fooName, String barName);     void insertFoo(Foo foo);     void updateFoo(Foo foo);} @Tracsactional 어노테이션은 인터페이스 선언, 클래스

Isolation levels

Isolation levels

여러 트랜잭션들이 동시 다발적으로 데이타에 접근하여 작업을 할 때 다음의 문제들이 발생할 수 있습니다. Dirty read: 어떤 트랜잭션 T1이 다른 트랜잭션 T2가 아직 커밋하지 않은 데이타를 읽었는데 T2가 롤백 되는 경우. T1이 읽은 데이타는 dirty. Nonrepeatable read: 어떤 트랜잭션 T1이 계속 해서 같은 쿼리를 날리는데 그 사이에 다른 트랜잭션 T2가

트랜잭션

Spring 트랜잭션의 기반은 Spring AOP

라는 건 이미 레퍼런스에도 명시되어 있습니다. 그렇기 때문에 아래와 같이 사용법에 있어서 공통점이 존재하는 것 같습니다. Spring에서 AOP를 사용법을 구분하는 여러 구분자가 있을 수 있겠지만 간단한 declarative 하느냐 programmatically 하느냐로 나눌 수도 있겠습니다. Spring에서 트랜잭션 관리도 마찬가지로 선언적인 방법과 프로그래밍을 통한 방법으로 나뉩니다. Spring AOP 사용 방법 중 declarative 한

트랜잭션

9.5.1. Understanding the Spring Framework's declarative transaction implementation

트랜잭션 관리 대상이 되는 클래스에 @Transactional 어노테이션을 붙이고 설정 파일에는 <tx:annotation-driven/>요렇게 추가하면 됩니다. 그렇게 하면 내부에서는 AOP를 사용하여 타겟에 대한 호출은 (1)AOP 프록시를 호출하게 되고 그 다음 (2)트랜잭션을 만들고 (3)트랜잭션 내에서 원하는 작업을 하고 (4)실제 작업을 한 뒤에 다시 (3)또 해당

트랜잭션

9.5. Declarative transaction management

Spring도 EJB의 CMT 처럼 선언적인 트랜잭션을 제공하지만 몇 가지 차이가 있습니다. Spring은 EJB의 CMT 처럼 JTA에 종속되어 있지 않습니다. 설정 내용을 살짝 바꾸기만 하면 JDBC, Hibernate, JDO 등을 자유롭게 사용할 수 있습니다. EJB(bean) 만 트랜잭션을 처리할 수 있었는데 반해 Spring은 일반 클래스에도 적용할 수 있습니다. 선언적으로 롤백 룰을 설정할

트랜잭션

9.4. Resource synchronization with transactions

이번에 볼 것은 이전 글에서 살펴보았던 (1)각 종 TransactionManager를 사용하여 어떻게 Hibernate나 JDBC에 있는 트랙잭션 관련 API를 사용하느냐 (2)해당 자원[footnote]Hibernate나 JDBC, JTA등의 실제 트랜잭션을 처리하는 녀석들을 Resource라고 표현하고 있습니다.[/footnote]을 잘 가져왔고 creation/reuse/cleanup/trigger/transaction synchronization이 필요할 때 잘 동작하는지 확인 하는 것

트랜잭션

9.3. Key abstractions

Spring의 트랜잭션 추상화 계층에서 트랜잭션 전략(transaction strategy)이 중요한 개념 중 하나입니다. 트랜잭션 전략을 위해서 PlatformTransactionManager 인터페이스를 사용합니다. public interface PlatformTransactionManager {     TransactionStatus getTransaction(TransactionDefinition definition)        throws TransactionException;     void commit(TransactionStatus status) throws TransactionException;     void rollback(TransactionStatus status) throws TransactionException;

트랜잭션

Transaction management

9.1. Introduction 트랜잭션 관리를 위한 추상화를 통해 다음의 장점들을 제공합니다. JTA, JDBC, Hibernate, JPA, and JDO와 같은 다른 트랜잭션 관리 API 간에도 일관된 프로그래밍을 할 수 있습니다. 선언적인 트랜잭션 관리를 할 수 있습니다. JTA 같은 복잡한 방법이 아닌 단순한 API를 제공합니다. Spring의 다양한 데이타 접근 추상화(data access abstractions)