对于J2EE应用
程序而言,事务的处理一般有两种模式:
1.依赖特定事务资源的事务处理
这是应用开发中最常见的模式,即通过特定资源提供的事务机制进行事务管理。
如通过JDBC、JTA的rollback、commit方法;HibernateTransaction的rollback、commit方法等。这种方法大家已经相当熟悉。
2.依赖容器的参数化事务管理
通过容器提供的集约式参数化事务机制,实现事务的外部管理,如EJB中的事务管理模式。
如,下面的EJB事务定义中,将SessionBeanMySession的doService方
法定义为Required。也就是说,当MySession.doServer方法被某个线程调用时,容器将此线程纳入事务管理容器,方法调用过程中如果发生异常,当前事务将被容器自动回滚,如果方法正常结束,则容器将自动提交当前事务。
MySession
Remote
doService
java.lang.String
Required
容器管理的参数化事务为程序开发提供了相当的灵活性,同时因为将事务委托给容器进行管理,应用逻辑中无需再编写事务代码,大大节省了代码量(特别是针对需要同时操作多个事务资源的应用),从而提高了生产率。然而,使用EJB事务管理的代价相当高昂,撇开EJB容器不菲的价格,EJB的
学习成本,部署、迁移、维护难度,以及容器本身带来的性能开销(这往往意味着需要更高的硬件配置)都给我们带来了相当的困惑。此时事务管理所带来的优势往往还不能抵消上面这些负面影响。
Spring事务管理能给我们带来什么?
下面这段
xml配置片断展示了Spring中的事务设定方式:
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
org.gjt.mm.mysql.Driver
jdbc:mysql://localhost/sample
user
mypass
class="org.springframework.jdbc.datasource.DataSourceTr
ansactionManager">