EJB 애플리케이션을 구현 중입니다. 이 시점에서 나는 거래가 필요합니다. 나는 3 개의 메소드를 연속적으로 실행해야하며 하나가 실패하면 모든 것이 롤백되어야한다. 여기 : http://www.conceptgo.com/gsejb/eb04.html, 튜토리얼을 발견했습니다. 내 코드 :javax.transaction.UserTransaction을 사용하여 EJB에서 트랜잭션 구현하기
try {
javax.transaction.UserTransaction ut = (UserTransaction) ctx.lookup("java:comp/UserTransaction");
ut.begin();
Feeds feed = loadFeed(url);
try{
em.persist(feed);
uf.setFeedId(feed.getFeedId());
uf.setUserId(user_id);
em.persist(uf);
}catch (EntityExistsException e){
ut.rollback();
return false;
}catch (IllegalArgumentException ea){
ut.rollback();
return false;
}
if (feed.getFeedId()!= null && feed!=null) {
ut.commit();
}else{
ut.rollback();
return false;
}
내가 다음 오류 메시지가 얻을 내 응용 프로그램을 실행합니다
Caused by: java.lang.IllegalStateException: BaseTransaction.checkTransactionState
- ARJUNA016051: thread is already associated with a transaction
누구든지 어떤 원인이고 그 해결 방법을 알고 있습니까?
안녕하세요. 답장을 보내 주셔서 감사합니다. 그것은 위대하게 들린다. 그러나, 내가하는 명령이 서로 관련이없는 것처럼 느껴집니다. 그리고 왜 ejb가 관련이없는 거래를 수행하는지 알 수 없습니까? 첫째로 피드 클래스 객체를 유지 한 다음 UserFeed 유형 객체를 유지합니다. em.persist (피드); uf.setFeedId (feed.getFeedId()); uf.setUserId (user_id); em.persist (uf); – Sermilion
자, 직접 트랜잭션을 관리해야하는 경우, Bean이 트랜잭션 자체를 관리하고 UserTransactions를 사용할 것임을 선언해야합니다. 위의 내 대답을 업데이트했습니다. – Raylite3