首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中的事务或分布式事务

Java中的事务或分布式事务
EN

Stack Overflow用户
提问于 2012-12-06 16:09:16
回答 2查看 1.8K关注 0票数 2

我是Java的初学者,我正在开发一个具有大量数据库操作的web应用程序。我对Java中的事务感到困惑。

我的问题是,我正在使用Tomcat,我不知道Java中的事务类型,但我必须在我的项目中使用它们。所以,我找了很多次了,找到了这么多“孩子”:

  1. 使用connection.setAutoCommit(false),但是它是连接管理的吗?
  2. 使用Javax.Transaction.UserTransaction

这两者有什么区别,还有别的办法吗?

我使用的是NetBeans 7.0,而Tomcat与它集成在一起。当我尝试使用javax.transaction.UserTransaction时,它无法自动完成这个接口,但它确实为java.transaction.xa提供了一个建议;

那我该怎么办?

注意:我不能使用EJB,因为Tomcat是由宿主服务器提供给我的web服务器。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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。

票数 2
EN

Stack Overflow用户

发布于 2012-12-07 12:16:15

默认情况下,Tomcat中没有容器托管事务-在这种情况下,您必须以与Java相同的方式处理事务。这与EE无关,因此不能使用javax.transaction.UserTransaction。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13747708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档