EJB 시리즈 (3) - EJB 트랜잭션 관리

3545 단어

먼저 EJB 세션 빈은 기능이 크면 두 가지 유형으로 나눌 수 있습니다.
1. Dao: 기본 솔리드와 JPA를 캡슐화하는 데 사용되며, 솔리드에 액세스하여 EAO 객체(Entity Access Object)라고 할 수 있으며, 본질적으로 3층의 Dao 레이어입니다.
2. 서비스: 주로 업무 층에 사용되고 Dao 층 방법을 호출하여 주요한 업무 논리 작성을 실현한다.
세션 빈은 Dao층 eao 대상에 사용할 때 업무 제어가 필요하지 않지만 업무 논리로 사용자의 요청을 처리하고 완전한 업무 논리를 대표하며 업무 제어를 추가해야 한다.
1. EJB 사무관리 방식 - CMT & BMT
EJB는 두 가지 트랜잭션 관리 방식을 제공합니다.
1, 컨테이너 트랜잭션 관리(CMT)
용기 관리 업무는 주로 용기 자동 제어 업무의 시작, 제출과 스크롤을 통해 개발자가 수동으로 코드를 작성할 필요가 없고 용기가 업무의 경계를 제어한다. 일반적으로 업무 방법의 시작은 업무의 시작이고 업무 방법의 끝은 업무의 제출 부분이다. 프로그램이 실행될 때 이상이 생기면 업무는 자동으로 스크롤된다.
스프링 컨테이너에 내장된 AOP 메커니즘인 사운드 사무 관리는 스프링 컨테이너에 간단하게 설정하면 업무 Bean에 사무 지원을 추가할 수 있다.이것은 모두가 낯설지 않을 것이다. 프로젝트에서도 스프링 사무 관리를 여러 번 사용하는데 이것이 바로 CMT의 응용이다.개발자는 코드에서 사무 제어를 할 필요가 없다.EJB 역시 이 속성을 갖추고 있다.
2. Bean 트랜잭션 관리(BMT)
BMT는 주로 수동 프로그래밍을 통해 업무의 시작, 제출과 스크롤을 실현한다. CMT에 비해 작업량이 증가했지만 제어력이 더욱 세밀하고 유연하다. 우리는 이상이 발생할 때 스크롤 업무도 JMS를 통해 되돌아오거나 원격 호출 값을 통해 업무의 스크롤이나 제출을 제어할 수 있다.
2. 세션 빈 트랜잭션 제어
세션 빈은 업무 제어를 실현하는 것과 메시지 빈은 완전히 같습니다. 빈에 @Transaction Management와 @Transaction Attribute를 사용하여 제어합니다.Spring과 유사하게 EJB는 주석을 사용하는 것 외에 프로필 설정을 통해 업무 Bean을 사무 관리할 수 있습니다.
1. 사무 관리 유형 결정
Session Bean의 방법에 대한 트랜잭션 유형을 지정하려면 @Transaction Management () 를 통해 설명하거나 확인할 수 있습니다.
1) CMT 트랜잭션 관리를 사용하도록 지정합니다.
    @TransactionManagement(TransactionManagementType.CONTAINER) 
2) BMT 트랜잭션 관리를 사용하도록 지정합니다.
    @TransactionManagement(TransactionManagementType.BEAN)
2. 트랜잭션 전파 속성
방법이 호출된 원인, 예를 들어 방법 A가 방법 B를 호출할 때.만약에 방법 A가 사무 환경에서 운행한다면 방법 B도 사무에서 운행해야 합니까? 방법 B는 방법 A와 같은 사무에서 운행해야 합니까? 아니면 새로운 사물을 개척해야 합니까?잠깐만요.이러한 문제점을 파악하려면 트랜잭션 전파 속성의 구성이 관련되어야 합니다. EJB에서 서로 다른 상황에 대해 다음과 같은 6가지 서로 다른 사물 전파 속성을 제공합니다.
@TtransactionAattribute()를 통해 트랜잭션 전파 속성을 설정합니다.
    @TransactionAttribute(TransactionAttributeType.REQUIRED)
TransactionAttributeType은 열거 유형입니다.
public enum TransactionAttributeType {
 	 REQUIRED,
 	 REQUIRES_NEW,
 	 SUPPORTS,
 	 NOTSUPPORTED,
         MANDATORY,
 	 NEVER }

Required: 이 속성으로 표시하는 방법이나 구성 요소는 항상 업무에서 실행됩니다.클라이언트가 이미 업무 중이라면 원래의 업무에서 실행합니다.만약 업무가 없다면, 새로운 업무를 열어 실행합니다.
Requires_New: 메서드나 어셈블리는 항상 새로 열린 트랜잭션에서 실행됩니다.클라이언트가 이미 사무에 있다면 먼저 원래의 사무를 끊은 다음에 새로운 사무를 열고 그 중에서 실행한다. 새로운 사무가 끝난 후에 원래의 사무는 끊는 기점에서 계속 실행된다.만약 업무가 없다면, 새로운 업무를 열어 실행합니다.
Supports: Required 속성과 다른 점은 업무가 없는 환경에서 새로운 업무가 열리지 않는다는 것입니다.업무가 존재하면 실행에 추가합니다. 이것은 Reuqired와 같습니다.
Not_Supported: 업무가 이미 존재하는 경우 원래의 업무를 끊고 이 속성을 표시하는 방법이나 구성 요소를 호출합니다. 호출이 끝난 후에 원래의 업무를 계속합니다.사무가 없는 환경에서 호출할 때 새로운 사무를 열지 않습니다. 이것은 Supports와 같습니다.
Mandatory: 이 속성을 표시하는 방법이나 구성 요소를 호출하는 클라이언트는 이미 업무에 있어야 하며, 업무에 없으면 이상을 던집니다.만약 이미 업무 중이라면, 원래의 업무 운행에 가입하십시오.Required와 달리 이 속성은 자동으로 새로운 업무를 시작하지 않습니다.
Never: Never 속성으로 표시된 방법이나 구성 요소는 업무에서 실행할 수 없습니다.이 방법이나 구성 요소를 호출한 클라이언트가 이미 업무 중이라면 이상을 던집니다.
3. ITOO 프로젝트 응용
ITOO에서 EJB 사무 제어도 중요한 역할을 발휘한다. EJB는 업무층에서 사무 제어를 사용하는 원칙이 일치하고 ITOO에서 EJB 사무 제어를 사용하는 것은 주로 업무 실현층에 있다. 주석을 통해 사무 관리 방식과 사무 전파 속성을 설정하고 대부분은 용기 사무와 Required 속성을 사용하여 설정한다.예를 들면 다음과 같습니다.
@Stateless(name = "studentBeanImpl")   //   Bean    Bean
@Remote(StudentBean.class)		//        Bean     Bean,   StudentBean
@TransactionManagement(TransactionManagementType.CONTAINER)   //               
@TransactionAttribute(TransactionAttributeType.REQUIRED)	//       required 
public class StudentBeanImpl extends BaseBeanImpl implements
		StudentBean {
             .......................
}

좋은 웹페이지 즐겨찾기