Struts2 - 延迟动作执行

时间:2015-04-16 08:25:37

标签: java multithreading servlets struts2

我有2个不同的操作,我同时从相同的主机获得对这2个操作的响应。

我想将一个动作延迟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文档说,在2个不同的线程中执行了2个不同的请求。

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

这是工作流程。

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

1 个答案:

答案 0 :(得分:2)

您可以使用Timer并执行TimerTask定义来调用您的操作。然后你需要做的就是为每个调用的timertask做一个时间表,从而调用你的行动。

有关javadoc @ http://docs.oracle.com/javase/7/docs/api/javax/swing/Timer.html

的详情

GL