하는 Arquillian 테스트에서트랜잭션 (Arquillian 테스트에서)이 아닌 Stateful Session Bean의 @PostConstruct 메소드를 실행합니까? 내가 무 상태 세션 빈을
@Stateless
public class MyService {
@PersistenceContext
private EntityManager entityManager;
@PostConstruct
public void init() {
Language language=new Language();
language.setName("Foo");
entityManager.persist(language);
}
...
은 내가 CDI
콩 (@RequestScoped
콩), @Injects
이 서비스가있다. 이 테스트는 정상적으로 실행됩니다. 나는 @Stateful
콩이 콩을 변경할 때
는, 나는 오류 메시지를 얻을 : 나는 @PostConstruct
방법에 @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
주석을 넣어
Caused by: javax.persistence.TransactionRequiredException: WFLYJPA0060: Transaction is required to perform this operation (either use a transaction or extended persistence context)
at service.MyServiceTest.testStateful(MyServiceTest.java:71)
는, 테스트 확인을 실행합니다. 그러나 이것은 내가하고 싶은 것이 아닙니다.
또한 init 메서드에서 @Postconstruct
을 제거하고 Arquillian 테스트에서 init
메서드를 명시 적으로 호출 할 수 있습니다. 그런 다음 init
메소드가 트랜잭션에 있습니다.
그래서 트랜잭션이 아닌 상태 저장 빈의 @PostConstruct
메소드를 실행합니다.
"정상적인"방법 ('@ PostConstruct' 등의 주석이없는 메소드? – ericj
'@ Stateful' beans의 경우,'@ PostConstruct' 메소드는 CMT 트랜잭션에서 실행되지 않습니다. 그들은'@ Stateless' 빈보다 훨씬 정교한 생명주기를 가지고 있습니다. –