2011-02-23 85 views
0

任何人都可以告诉我如何在JPA中获得事务,如果我已经定义了jta-data-source?JPA中的连接

问候,

萨蒂亚

回答

3

随着JTA数据源,其连接完成的工作是一个JTA事务的一部分。这意味着您必须启动并提交或回滚JTA事务。

要做到这一点,最简单的方法是做一个会话bean中的JPA工作:

@Stateless 
public class SomeBean { 

    @PersistenceContext 
    private EntityManager entityManager; 

    public void doStuff() { 
     // … do some stuff 
     entityManager.persist(someObj); 
    } 
} 

在这种情况下进入doStuff()方法时离开时,交易将开始和结束。

但是如果你因为某些原因,需要手动启动一些其他类型的bean的交易(如JSF管理的bean,一个Servlet,Servlet过滤器等),您可以直接使用该API:

public class SomeBean { 

    @Resource 
    private UserTransaction tx; 

    public void doStuff() { 
     try { 
      tx.begin(); 
      // … do some stuff 
      entityManager.persist(someObj); 
      tx.commit(); 
     } 
     catch (Throwable t) { 
      tx.rollback(); 
      throw t; 
     } 
    } 
} 

使用会话bean及其所谓的声明式事务几乎总是推荐的方法。