1

我正在构建一个 JSF 2.0 应用程序。基本上这是流程:

  1. 执行一些步骤(前提条件)
  2. 根据先决条件的结果重定向到外部服务器
  3. 执行一些后重定向步骤(更新状态标志等)

我的问题是,一旦我重定向到外部服务器,如何让后重定向代码执行?控制将完全超出我的应用程序,对吗?

上述所有 3 个步骤都发生在单击命令按钮时,我的代码在 doPost() 下

4

1 回答 1

0

假设您使用的是标准 Java EE 堆栈,只需@Asynchronous在重定向后添加您正在调用的 EJB 服务方法。它将在单独的线程中运行并允许当前线程直接继续(从而直接从操作方法返回而不会阻塞)。

例如

@ManagedBean
@RequestScoped
public class Bean {

    @EJB
    private SomeService someService;

    public void doPost() throws IOException { // Strange name for a JSF command button action btw, confuses with a standard HttpServlet method.
        // ... Preprocessing ...

        externalContext.redirect(externalURL);

        someService.doSomethingAsynchronously();
    }

    // ...
}

@Stateless
public class SomeService {

    @Asynchronous
    public void doSomethingAsynchronously() {
        // ... Update stuff ...
    }

    // ...
}
于 2013-07-11T15:19:51.300 回答