—java进阶
leesire
这个作者很懒,什么都没留下…
展开
-
Java事务(8)——分布式事务(Spring+JTA+Atomikos+Hibernate+JMS)
在本系列先前的文章中,我们主要讲解了JDBC对本地事务的处理,本篇文章将讲到一个分布式事务的例子。 本地事务和分布式事务的区别在于:本地事务只用于处理单一数据源事务(比如单个数据库),分布式事务可以处理多种异构的数据源,比如某个业务操作中同时包含了JDBC和JMS或者某个操作需要访问多个不同的数据库。 Java通过JTA完成分布式事务,JTA本身只是一种规范转载 2017-06-07 17:16:37 · 703 阅读 · 0 评论 -
Java事务(7)——使用Transactional注解
在本系列的上一篇文章中,我们讲到了使用动态代理的方式完成事务处理,这种方式将service层的所有public方法都加入到事务中,这显然不是我们需要的,需要代理的只是那些需要操作数据库的方法。在本篇中,我们将讲到如何使用Java注解(Annotation)来标记需要事务处理的方法。 首先定义Transactional注解:package davenkin.ste转载 2017-06-07 17:15:31 · 1420 阅读 · 0 评论 -
Java事务(5)——Template模式
在本系列的上一篇文章中,我们讲到了使用TransactionManger和ConnectionHolder完成线程安全的事务管理,在本篇中,我们将在此基础上引入Template模式进行事务管理。 Template模式大家应该都很熟悉,比如Spring就提供了许多Template,像JdbcTemplate和JmsTemplate等。Template模式的基本思想是:在超类里将完转载 2017-06-07 17:13:52 · 597 阅读 · 0 评论 -
java事务异常——Spring事务异常回滚,捕获异常不抛出就不会回滚
最近遇到了事务不回滚的情况,我还考虑说JPA的事务有bug? 我想多了....... 为了打印清楚日志,很多方法我都加tyr catch,在catch中打印日志。但是这边情况来了,当这个方法异常时候 日志是打印了,但是加的事务却没有回滚。 例: 类似这样的方法不会回滚 (一个方法出错,另一个方法不会回滚) : [html] view p转载 2017-06-07 22:52:01 · 33980 阅读 · 4 评论 -
Java事务(4)——成功的案例
在本系列的上一篇文章中我们讲到,要实现在同一个事务中使用相同的Connection对象,我们可以通过传递Connection对象的方式达到共享的目的,但是这种做法是丑陋的。在本篇文章中,我们将引入另外一种机制(ConnectionHolder)来完成事务管理。 ConnectionHolder的工作机制是:我们将Connection对象放在一个全局公用的地方,然后在不同的操作中转载 2017-06-07 17:12:29 · 888 阅读 · 0 评论 -
java事务(1)——Java事务处理的基本问题
Java中的事务处理有多简单?在使用EJB时,事务在我们几乎察觉不到的情况下发挥着作用;而在使用Spring时,也只需要配置一个TransactionManager,然后在需要事务的方法上加上Transactional注解就行了。Java的事务处理之所以这么简单是因为框架在背后为我们做了太多的工作。这样,我们虽然可以快速地完成开发工作,但是一旦程序出现问题,在一阵google和stackoverf原创 2017-06-07 14:59:11 · 860 阅读 · 0 评论 -
Java事务(3)——丑陋的案例
在本系列的上一篇文章中,我们看到了一个典型的事务处理失败的案例,其主要原因在于,service层和各个DAO所使用的Connection是不一样的,而JDBC中事务处理的作用对象正是Connection对象,所以不同DAO中的操作不在同一个事务里面,从而导致事务失败。从中我们得出了教训:要避免这种失败,我们可以使所有操作共享一个Connection对象,这样应该就没有问题了。转载 2017-06-07 17:11:27 · 494 阅读 · 0 评论 -
Java事务(2)——失败的案例
在本系列的上一篇文章中,我们讲到了Java事务处理的基本问题,并且讲到了Service层和DAO层,在本篇文章中,我们将以BankService为例学习一个事务处理失败的案例。 BankService的功能为:某个用户有两个账户,分别为银行账户和保险账户,并且有各自的账户号,BankService的transfer方法从该用户的银行账户向保险账户转帐,两个DAO分别用于对两个账户表的存取转载 2017-06-07 15:08:53 · 486 阅读 · 0 评论 -
Java事务(6)——使用动态代理(Dynamic Proxy)
在本系列的上一篇文章中,我们讲到了使用Template模式进行事务管理,这固然是一种很好的方法,但是不那么完美的地方在于我们依然需要在service层中编写和事务处理相关的代码,即我们需要在service层中声明一个TransactionTemplate。在本篇文章中,我们将使用Java提供的动态代理(Dynamic Proxy)功能来完成事务处理,你将看到无论是在service层还是DAO层转载 2017-06-07 17:14:44 · 728 阅读 · 0 评论 -
java进阶——异常
我提到最近一直为一个项目进行Code Review的工作,从中发现了一些问题,同时也有了一些想法。这次我们来关注一个我们每天都会面对的问题:异常处理。—异常处理不简单—个人觉得,异常处理对于程序员来说,尤其是对于那些初级程序员来说,是最为熟悉的同时也是最难掌握的。说它熟悉,因为仅仅就是Try/Catch而已。说它难以掌握,很多开发人员却说不清楚Try/Catch应该置于何处?什原创 2017-09-20 17:22:51 · 529 阅读 · 0 评论