在JTA中查找无交易的工作

时间:2017-03-06 13:45:36

标签: java jpa jta

我正在学习JTA,我试着找一个例子来测试我的概念:

首先创建了一个CDI会阻碍我DAO的课程:

@Named
@RequestScoped
public class SegurancaServiceJTA {

    @Inject
    private DAOSeguranca daoSeguranca;

    @Transactional(value = Transactional.TxType.NEVER)
    public void findTest(){
        List result = daoSeguranca.findList("SELECT u FROM Usuario u",null);
    }

}

在我的DAO中,我用@PersistenceContext注释来攻击我的EntityManager。

public class DAOSeguranca implements IDAO, Serializable {
    @PersistenceContext(unitName = "seguranca")
    private EntityManager em;

     @SuppressWarnings({"unchecked", "rawtypes"})
    public List findList(String hql, Map<String, Object> namedParams, Integer first,
                                                   Integer maxResult, Class qualifier, boolean buscarTodos) {
        try {
            logger.debug("Executando findList. HQL = " + hql);
            Query query = em.createQuery(hql);
            configureParams(namedParams, query);

            if (first != null) {
                query.setFirstResult(first);
            }

            if (maxResult != null) {
                query.setMaxResults(maxResult);
            } else if (!buscarTodos) {
                query.setMaxResults(100);
            }

            return query.getResultList();
        } catch (Exception e) {
            logger.error(e);
            throw new DAOException(e.getMessage());
        }
    }
}

我怀疑是:

1)我知道这个方法不起作用,因为entityManager可以在没有事务的情况下找到任何东西,并且我正在使用TxType.NEVER强制错误。但是这种方法正常工作并返回bean。

2)在我的persistence.xml中我正在使用JTA,但如果我把RESOURCE_LOCAL一切都继续工作。那么,这是对的吗?我知道JTA应该只在persistence.xml中使用JTA而不是RESOURCE_LOCAL。

0 个答案:

没有答案