2016-11-28 1 views
0

트랜잭션이 JPA (EclipseLink 2.0)로 커밋되는시기는 언제입니까?JEE JPA (EclipseLink 2.0)에서 트랜잭션을 커밋하는시기는 언제입니까?

public void methodA() 
{ 
    while(something) 
    { 
     methodB(); 
    } 
} 

public void methodB() 
{ 
    //Insert new client into Client table. 
} 

하는의 그것 methodA이 완료 될 10 분 정도 걸립니다 가정 해 봅시다 :

내 문제입니다. methodA이 실행되는 동안 데이터베이스의 Client 테이블을 들여다 보면 어떤 행도 볼 수 없습니다. 즉, methodB이 끝나면 트랜잭션이 커밋되지 않습니다. 그러나 methodA이 끝날 때까지 기다리면 클라이언트가 데이터베이스에 나타납니다.

methodB 종료 후 모든 트랜잭션을 커밋하고 싶습니다. 어떻게해야합니까?

EDIT : 응용 프로그램 컨테이너 (Glassfish)가 "커밋"을 처리하도록합니다. 엔티티 관리자를 호출하여이 작업을 수행하고 싶지 않습니다. 나는 methodB() 위의 주석과 같은 것을 찾고 있습니다. 두 메소드 모두 싱글 톤 빈 안에 있습니다.

+1

어디 당신이 당신의 거래 정의/경계를 넣어 가지고 (methodA()를 EJB없는 가정)? 분명히 누구나 em.getTransaction()을 호출하고 로컬 트랜잭션을 사용할 경우 커밋 할 수 있습니다. –

+0

커밋하고 싶지 않습니다. 응용 프로그램 컨테이너에서 처리하도록합니다 (Glassfish 3.1.2.2). –

답변

0

@Stateless EJB Bean의 경우 EJB를 종료 할 때 트랜잭션이 커밋됩니다 (기본적으로). 별도의 EJB에서

넣어 methodB는().

+0

Jimmm 나는 이것이 해결책 일 수 있다고 생각한다. 그러나 그것은 나의 디자인에 막대한 영향을 줄 것이다. 이 일을하는 더 우아한 방법이 없을까요? 아마 methodB 위의 주석을 가지고 있을까요? –

+0

@TransactionAttribute (TransactionAttributeType.REQUIRES_NEW) 메소드 표기법. 그러나 새로운 트랜잭션은 다른 클래스에서 호출 한 다음 "this"로만 생성됩니다. –