안녕하세요 여러분, 다음 문제에 대한 도움을 찾고 있습니다. 완벽하게 작동하는 jpa/stateless ejb의 proyect가 있습니다. 간단한 쿼리를 수행하고 작업을 지속하지만 지금은 필요합니다. 그 중 하나가 실패 할 경우 작업을 지속 집합을 실행하기 위해, 내가 롤백을 수행해야합니다, 그래서 내가 JTA는 일을하지만, 소스 코드의 조각을 사용 할 수 있습니다 발견 :EJB와 JPA에서 JTA 트랜잭션을 사용하십시오.
@Stateless
public class ProjectBean implements IProject {
@Resource
javax.transaction.UserTransaction utx;
@PersistenceContext(unitName = "JPADB")
private EntityManager entityManager;
...
//more code
//this is part of a method
try{
utx.begin();
entityManager.joinTransaction();
for(Project p:projectResultList){
entityManager.persist(p);
}
utx.commit();
}catch(Exception e){
e.printStackTrace();
if(utx != null)
try {
utx.rollback();
} catch (IllegalStateException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (SecurityException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (SystemException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//tx.rollback();
}
단순히 작동하지 않습니다, 그리고 이것은 persistence.xml의 모습입니다 :
<persistence-unit name="JPADB">
<jta-data-source>java:jboss/datasources/OracleBic</jta-data-source>
<properties>
<property name="hibernate.show_sql" value ="true" />
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
</properties>
</persistence-unit>
정말 홉 누구나 나에게 팁이나 조언을 줄 수있다. jpa/jta 개념을 가진 초보자이고 웹에서 발견 된 많은 코드를 시도했지만 항상 다른 오류를 얻는다. (스레드에서 잘못된 tx : 예상 TransactionImple usertransaction이 시작될 수 없다. JTA를 사용하는 동안 EntityTransaction). 미리 감사드립니다.
왜 bean 코드로 트랜잭션을 관리하고 있습니까? 응용 프로그램 서버를 신경 써서 그냥 두어도됩니다. 이'@Resource private SessionContext context '처럼 ejb에 컨텍스트를 삽입하고 예외 catch 블록 내에서'context.setRollbackOnly();를 호출해야합니다. – remigio