我正在学习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。