3

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

我想我很理解@Transactional 的使用和它的传播,但仍然只适用于一个线程,在我的情况下是我的webapp 的一个请求响应

基本上我需要的是:

  1. 远程业务服务的客户端是发起和结束事务的客户端
  2. 如果发生任何异常,spring 将进行异常翻译

这是一个希望可以描述意图的示例:

  1. 客户端(假设它是移动设备,不一定是 web 应用程序)要求服务器创建新事务
  2. 服务器返回一个事务 id
  3. 客户端调用 serviceA,传递 transactionId 以使用
  4. serviceA 使用事务运行(基于传递的 transactionId)完成,但事务未提交
  5. 客户端继续调用 serviceB,传递相同的 transactionId 以使用
  6. serviceB 使用 serviceA 发起的上一个事务运行
  7. 如果 serviceB 运行正常,则客户端可以根据 transactionId 请求服务器提交
  8. 如果 serviceB 运行异常,spring 可以进行 sql 异常翻译

这可能吗 ?

谢谢 !

4

1 回答 1

2

我希望你实际上不需要这么长的交易......这通常是一个很糟糕的主意,因为交易应该尽可能短(如果你怀疑它,只需谷歌这个咒语以获得解释)。

相反,您可能只需要“长时间的对话”:基本上,您在多个调用/请求中使用分离的实体(对您的数据库进行只读访问),然后在您重新附加它们(使用您的更改)时'重新准备好提交您的交易。

无论哪种方式,@Transactional 在这里确实没有用,而且我不知道有任何开箱即用的机制可以实现您所描述的。

也许考虑使用 spring webflow:它提供了易于使用的与对话相关的功能,并且应该在您的上下文(JPA/JSF)中运行良好......

请参阅此处的相关讨论。

高温高压

于 2011-06-10T12:09:35.703 回答