Struts2 - 延迟执行动作

3
我有两个不同的操作,但是我同时从同一主机获取这两个操作的响应。
我想要延迟其中一个操作30秒。 我尝试使用Thread.sleep(30000),但是似乎会延迟这两个操作。
由于这两个操作都是后台进程,因此我无法使用ExecuteAndWaitInterceptor以下是我想要延迟的操作。
@Namespace(StrutsConstants.Namespace.PUBLIC)
public class CCAveDNHandlerAction extends  BaseRequestResponseAwareAction {

    private static Log log = LogFactory.getLog(CCAveDNHandlerAction.class);

    public String execute() throws ModuleException {

        log.info("CCAveDNHandlerAction ### Starting..");

        try {               
            Thread.sleep(30000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

Struts2文档表示,两个不同的请求在两个不同的线程中执行。

但在这种情况下并没有发生。可能是因为这两个请求来自同一主机。有没有办法强制执行一个动作以在单独的上下文中运行?

以下是工作流程:

  • 用户被重定向到外部支付网关页面。
  • 用户进行成功付款并重定向回我的应用程序中的预定义操作。
  • 同时,支付网关向我的应用程序的另一个操作发送另一个响应。(这是次要响应)
  • 我使用Thread.sleep来暂停此操作,并暂停整个过程。
  • 我只想暂停次要响应。我该怎么做?

你能发布一些你的代码部分吗? - Aracthor
使用案例是什么?你如何执行你的动作? - Aleksandr M
@AndreaLigios:我没有使用Spring来管理操作。我已经更新了问题。由于这2个请求来自同一主机,它们是否在同一个会话中执行?有没有一种方法可以强制将操作在单独的会话中执行? - tharindu_DG
@AleksandrM:我已经更新了问题,请查看。 - tharindu_DG
是的,这是支付系统的标准流程。但是想一想,如果发生了双重提交,情况也是一样的。你不需要延迟操作,而是需要处理持久化。这可以通过会话和检查数据库中对象是否已经持久化来完成。 - Aleksandr M
显示剩余8条评论
1个回答

2

现在我想,你也可以使用两个线程分别执行和等待每个任务,因为显然调用Thread.sleep()将暂停线程当前执行的所有操作,据我所知,没有办法绕过这一点... - vlex
Struts2文档指出,2个不同的请求在2个不同的线程中执行。但在这种情况下并没有发生。可能是因为2个请求来自同一主机。有没有一种方法可以强制执行一个操作以在单独的上下文中执行? - tharindu_DG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接