有没有办法在多个客户端和服务器提交后显式提交和回滚事务

发布于 2024-11-16 00:09:44 字数 699 浏览 4 评论 0原文

环境:该应用程序使用 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,我给出警报消息以通知用户。

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

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

任何有关正确方向的指导都值得赞赏。

Environment: The application is using Spring Framework 2.5.6.SEC01 and iBatis 2.3.4.726. It is MVC design.

Here's the scenario:

  1. Input/update data from the client

  2. Press Update button to submit

  3. Process the data and execute DML (insert, update, delete)

  4. Back the result to client and display the data

  5. However, upon the page loaded, I need to call the API via Javascript (i have no control with the API, just need to pass the required parameter and check the result if SUCCESS or ERROR)

  6. If API returns SUCCESS, nothing to do. But it returns ERROR, I give alert message to inform the user.

    I have View(client), Service and Data Access Layers. When the client do the submit (scenario #2), it enters the Service to process the data and automatically start Transaction (scenario #3). Automatically execute the commit upon exit to Service and back to client to show the data (scenario #4).

Problem: How can I suspend the transaction not to execute the commit, then back to client to call API via Javascript. When API returns SUCCESS, execute commit via Ajax (or other way) or in the other hand, rollback it.

Any guidance on the right direction is appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

缱绻入梦 2024-11-23 00:09:44

如果我理解正确的话,您想要启动一个数据库事务,插入数据(不提交),保持连接和事务打开,返回到客户端,并根据一些 javascript 结果,进行提交。

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

我会非常努力地对其进行如下改造:

  1. 提交后,调用您需要确认提交/保存操作的 javascript
  2. 当 javascript 成功时,将提交提交到您自己的服务器
  3. 在 DAO 中进行正常的连接/事务处理,而不是公开交易给客户。

这更快、更健壮,而且代码也可能更少。

If I understand correctly, you want to start a database transaction, insert data (without comitting), keeping the connection and the transaction open, return to the client, and based on some javascript result, do a commit.

This feels like a strange design where the client can actually keep a connection open, making your application extremely vulnerable for (D)DOS attacks or client problems in general.

I would try really hard to remodel it as follows:

  1. Upon submit, call the javascript you need to confirm the commit/save action
  2. When the javascript succeeds, do the submit to your own server
  3. Do normal Connection/Transaction handling within the DAO, not exposing transactions to the client.

This is quicker, more robust and also probably less code.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文