我是Java的初学者,我正在开发一个具有大量数据库操作的web应用程序。我对Java中的事务感到困惑。
我的问题是,我正在使用Tomcat,我不知道Java中的事务类型,但我必须在我的项目中使用它们。所以,我找了很多次了,找到了这么多“孩子”:
connection.setAutoCommit(false),但是它是连接管理的吗?Javax.Transaction.UserTransaction这两者有什么区别,还有别的办法吗?
我使用的是NetBeans 7.0,而Tomcat与它集成在一起。当我尝试使用javax.transaction.UserTransaction时,它无法自动完成这个接口,但它确实为java.transaction.xa提供了一个建议;
那我该怎么办?
注意:我不能使用EJB,因为Tomcat是由宿主服务器提供给我的web服务器。
发布于 2012-12-07 21:28:58
正如你所指出的。“交易”一词有许多含义。一个流行的意思是数据库事务。
这些事务可以在连接级别进行管理,通常使用connection.setAutoCommit(false)、connection.commit()和connection.rollback()。
您发现的另一种事务是JTA事务。JTA事务是一个非常抽象的概念,它只是围绕着“一组操作”。JTA本身对事务不做任何操作。然而,人们通常会插入JTA资源管理器,当事务开始或完成时,JTA资源管理器会做一些事情。
例如,有人可以设置消息传递资源管理器,以确保只在事务提交时发送JMS消息。在JTA事务启动和停止时,还可以使用数据库资源管理器来启动和停止数据库事务(如上文所述)。
JTA有很大的配置开销,可以进行大量的设置工作。它通常只在需要管理资源集群(例如,数据库集群)并在它们之间进行协调时才使用。
如果您只有一个数据库,那么您可以直接在JDBC上使用事务。如果您正在使用JDBC (例如,JPA)之上的一些东西,那么这些工具通常会为您管理事务。
一种流行的方法是使用Spring管理事务。Spring与JTA相似,因为它对事务有一个非常通用的定义,但它更易于配置。使用Spring有两个明显的优点。首先,它们是事务划分(使用@ transaction注释),有时比处理commit和rollback容易得多(不需要太多的try/catch/finally语句)。另一个原因是,如果最终迁移到集群,那么以后总是可以在Spring下面插入JTA。
发布于 2012-12-07 12:16:15
默认情况下,Tomcat中没有容器托管事务-在这种情况下,您必须以与Java相同的方式处理事务。这与EE无关,因此不能使用javax.transaction.UserTransaction。
https://stackoverflow.com/questions/13747708
复制相似问题