是否存在应用程序级(而不是DB)事务的框架(例如回滚)

时间:2012-07-10 21:21:27

标签: java servlets frameworks transactions

我将Java 1.6,Tomcat和servlet与JDBC和持久性框架结合使用。我知道(并使用)数据库级别的事务,但我想知道是否存在应用程序级别回滚和提交的框架?

我确定这个有一个特定的名称,但是让我编写代码并以比我目前实现它更标准的方式测试以下内容:

- get user info
- charge credit card
- create mailing labels
- write db
if any fail, then rollback and:
   - cancel credit card charge
   - invalidate mailing label
   - rollback DB
else
  - commit. (i.e. do it all with threads)

这是否有意义?

到目前为止,我正在处理所有的逻辑和错误检查......想知道是否有一个很好的框架可以帮助,因为它变得越来越复杂。

3 个答案:

答案 0 :(得分:2)

听起来你基本上在考虑software transactional memory。我不会比维基百科摘要做得更好:

  

在计算机科学中,软件事务存储器(STM)是一种类似于数据库事务的并发控制机制,用于控制并发计算中对共享存储器的访问。它是基于锁的同步的替代方案。此上下文中的事务是一段代码,它执行对共享内存的一系列读写操作。这些读写逻辑上是在一个时刻发生的;中间状态对其他(成功)交易不可见。

这是一个非常有趣的想法,但我还没有意识到它真正以“大方式”发展。我认为它主要限于研究。也就是说,做一些搜索我发现Multiverse, a seemingly halfway interesting implementation之前我没有听说过,但有一个教程和网站......

答案 1 :(得分:0)

对我来说,我们需要一个System.Transactions.TransactionScope端口,其中包含一些可自定义的IEnlistmentNotification实现。也许JDO Transactions已经做了这件事,乍看之下我并不清楚。从表面上看,它似乎不够灵活,无法支持CC auth服务等其他东西。

答案 2 :(得分:0)

Spring框架怎么样?

http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#transaction-programming-model

假设“收费信用卡”和“创建邮件标签”涉及在不同数据库和消息队列中插入,您可以通过Spring事务回滚所有这些操作。