、Arquillianテストにおいて(Arquillianテストで)トランザクションではなくステートフルセッションBeanの@PostConstructメソッドを実行しますか?私はステートレスセッションBeanを有する
@Stateless
public class MyService {
@PersistenceContext
private EntityManager entityManager;
@PostConstruct
public void init() {
Language language=new Language();
language.setName("Foo");
entityManager.persist(language);
}
...
IはCDI
豆(@RequestScoped
豆)、@Injects
このサービスを持っています。このテストは正常に実行されます。私は@Stateful
BeanにこのBeanを変更すると
はしかし、私はエラーメッセージを取得する:私は@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)
は、テストがOKに実行されます。しかし、これは私がしたいことではありません。
また、initメソッドから@Postconstruct
を削除し、Arquillianテストでinit
メソッドを明示的に呼び出すことができます。その後、init
メソッドはトランザクション中です。
ステートフルセッションBeanのトランザクションは実行されず、ステートレスBeanのメソッドは実行されません(@PostConstruct
)。
"通常の"メソッド( '@ PostConstruct'などのアノテーションなしのメソッド? – ericj
の' @ Stateful' Beanの場合は、yes)として、 '@ PostConstruct'メソッドはCMTトランザクションでは実行されません。彼らは '@ Stateless' beanよりはるかに精巧なライフサイクルを持っています。 –