spring-managed-transaction可以存活多个请求响应吗?

时间:2011-06-09 11:36:49

标签: spring jpa-2.0 spring-transactions

我目前正在使用jsf 2,jpa 2和spring 3开发。

我认为我完全理解@Transactional的使用及其传播,但stil,只适用于一个线程,在我的情况下是我的webapp的一个请求响应

基本上我需要的是:

  1. 远程业务服务的客户端是发起和结束事务的客户端
  2. 如果发生任何异常,
  3. spring将执行异常翻译
  4. 这是一个有希望描述意图的例子:

    1. 客户端(假设它是移动设备,不一定是webapp)请求服务器创建新事务
    2. 服务器返回交易ID
    3. 客户端调用serviceA,传递transactionId以使用
    4. serviceA使用事务运行(基于传递的transactionId)完成,但事务未提交
    5. 客户端继续调用serviceB,传递相同的transactionId以使用
    6. serviceB使用serviceA
    7. 发起的上一个事务运行
    8. 如果serviceB正确运行,则客户端可以根据transactionId
    9. 要求服务器提交
    10. 如果serviceB运行异常,则spring可以执行sql异常转换
    11. 这可能吗?

      谢谢!

1 个答案:

答案 0 :(得分:2)

我希望你实际上不会需要这么长的交易...这通常是一个非常糟糕的主意,因为交易应该尽可能短(仅google this mantra解释如果你怀疑它。)

相反,您可能只需要“长对话”:基本上,您可以跨多个调用/请求使用分离的实体(对数据库进行只读访问),然后重新连接它们(使用您的更改)当你准备提交你的tx。

无论哪种方式,@ Transactal在这里确实毫无用处,我不知道任何开箱即用的机制能够实现你所描述的内容。

也许考虑使用spring webflow:它提供易于使用的会话相关功能,并且应该在您的上下文中很好地工作(JPA / JSF)......

参见相关讨论here

HTH