我正在开发将在J2EE
上部署的Weblogic
应用程序,它包含两层:
我将两层分开,以便能够在Java SE项目中重用业务层(作为jar库)。
我正在使用transaction-type = JTA
来让服务器管理事务,但是在SE项目中我正在使用transaction-type = RESOURCE_LOCAL
,所以我需要显式开始并提交事务。
所以问题是:如果我在使用JTA
时显式启动并提交事务,是否有任何问题?
换句话说,以下两个代码之间存在巨大差异:
public void create(T entity) {
entityManager.persist(entity);
}
和
public void create(T entity) {
entityManager.getTransaction().begin();
entityManager.persist(entity);
entityManager.getTransaction().commit();
}
答案 0 :(得分:1)
在手动处理交易时,您应该更加谨慎。发生异常时,请务必拥有安全网以回滚您的操作:
try {
EntityTransaction transaction = entityManager.getTransaction();
transaction.begin();
try {
entityManager.persist(entity);
transaction.commit();
} catch (Exception e) {
transaction.rollback();
throw e; // optional if you want to manage the exception higher up
} finally {
entityManager.close(); // optional if you also manage you EM creation manually.
}