背景:公司的一个项目的数据访问层是封装 JDBC 自己实现类似 MyBatis 的组件,然后提供 API 给业务层调用,项目是分布式的,并没有实现事务(单库的事务也没有),当然跨服务的事务我们也没好的解决方案,所以业务层很多代码无法做到数据一致性。
问题:现在要求起码实现单库事务,改造了组件开放事务相关 API 给业务层,面临着所有业务层的方法都需要改代码,工程量有些大,现在基于单库事务,能不能在不改造业务层代码的情况下,实现事务呢?
我想到的是利用 AOP 思想在每个方法调用前 openTransaction(),退出方法调用 commit(),抛出异常调用 rollback(),我们项目没用到 Spring 等框架,所以希望各位能给出不借助 Spring 等框架利用 AOP 思想实现事务的方案,多谢。
1
uxstone 2016-11-23 22:48:31 +08:00
为何不用 spring?
打算用 cglib 自己写? |
2
miracleyao OP @uxstone 为什么不利用 Spring 这么方便的框架,这是个历史遗留问题,就不去深究了。我们项目支持插件化,所以我打算写一个插件,利用 cglib 动态代理实现这个需求。
|
3
slixurd 2016-11-23 23:38:28 +08:00
要么就 cglib/aspect 自己实现一个 aop
要么就简单的通过 callback handler 的方式去调用那些方法 |