我是Java EE的初学者,我正在开发一个具有大量数据库操作的Web应用程序。我对Java EE中的事务感到困惑。
我的问题是我正在使用Tomcat而我不了解Java EE中的事务类型,但我必须在我的项目中使用它们。所以,我已经多次搜索过它并获得了很多“kides”:
使用connection.setAutoCommit(false)
,但它是连接管理的?
使用Javax.Transaction.UserTransaction
这两者之间有什么区别,还有其他方法吗?
我正在使用NetBeans 7.0并且Tomcat与它集成在一起。当我尝试使用javax.transaction.UserTransaction
时,它无法自动填充此界面,但确实提出了java.transaction.xa
的建议;
那我该怎么办?
注意:我不能使用EJB,因为Tomcat是托管服务器提供给我的Web服务器。
答案 0 :(得分:2)
正如你所指出的那样。 “" transaction"”这个词有很多含义。一个流行的含义是数据库事务。
可以在连接级别管理这些交易,通常使用connection.setAutoCommit(false)
,connection.commit()
和connection.rollback()
。
您找到的另一种交易是JTA交易。 JTA交易是一个非常抽象的概念,只是围绕着一组操作"。 JTA本身对交易没有任何作用。但通常情况下,人们会插入JTA资源管理器,这些资源管理器在事务开始或结束时执行某些操作。
例如,有人可以设置消息传递资源管理器以确保仅在提交事务时发送JMS消息。当JTA事务启动和停止时,有人也可以使用数据库资源管理器来启动和停止数据库事务(上面描述)。
JTA具有显着的配置开销,并且可以进行相当多的工作。它通常仅在您需要管理资源集群(例如数据库集群)并在它们之间进行协调时使用。
如果您只有一个数据库,那么您可以直接在JDBC上使用事务。如果您在JDBC之上使用某些东西(例如JPA),那么这些工具通常会为您管理您的交易。
一种流行的方法是使用Spring managed transactions。 Spring类似于JTA,因为它具有非常通用的事务定义,但配置起来要容易得多。与Spring合作有两个明显的优势。第一个是他们的事务划分(使用@Transactional注释)有时比处理提交和回滚要容易得多(不需要有那么多try / catch / finally语句)。另一个原因是,如果你最终移动到群集,你可以随后在Spring下面插入JTA。
答案 1 :(得分:0)
默认情况下,Tomcat中没有容器管理事务 - 在这种情况下,您必须以与在Java SE中相同的方式处理事务。这与EE无关,因此您无法使用javax.transaction.UserTransaction。