有几种客户端和服务器提交后,有没有办法显式提交和回滚事务

时间:2011-06-17 00:43:44

标签: java spring-mvc ibatis data-integrity

环境:该应用程序使用的是Spring Framework 2.5.6.SEC01和iBatis 2.3.4.726。这是MVC设计。

以下是该方案:

  1. 从客户端输入/更新数据
  2. 按“更新”按钮提交
  3. 处理数据并执行DML(插入,更新,删除)
  4. 将结果返回给客户端并显示数据
  5. 但是,在加载页面时,我需要通过Javascript调用API (我无法控制API,只需要传递必需的参数并检查结果,如果成功或错误)
  6. 如果API返回SUCCESS,则无需执行任何操作。但它返回ERROR,我发出警告信息通知用户。

    我有View(客户端),服务和数据访问层。当客户端进行提交时(场景#2),它进入服务以处理数据并自动启动事务(场景#3)。退出服务后自动执行提交并返回客户端以显示数据(方案#4)。

  7. 问题:如何暂停交易不执行提交,然后返回客户端通过Javascript调用API 当API返回SUCCESS时,通过Ajax(或其他方式)执行提交,或者另一方面,回滚它。

    对正确方向的任何指导表示赞赏。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你想要启动数据库事务,插入数据(不进行调用),保持连接和事务处于打开状态,返回客户端,并根据一些javascript结果,进行提交。

这感觉就像一个奇怪的设计,客户端实际上可以保持连接打开,使您的应用程序极易受到(D)DOS攻击或一般客户端问题的影响。

我会尽力改造它,如下所示:

  1. 提交后,请调用您需要的javascript以确认提交/保存操作
  2. 当javascript成功时,请将提交提交到您自己的服务器
  3. 在DAO中执行正常的连接/事务处理,而不是将事务暴露给客户端。
  4. 这更快,更强大,也可能更少代码。