我正在构建一个 JSF 2.0 应用程序。基本上这是流程:
- 执行一些步骤(前提条件)
- 根据先决条件的结果重定向到外部服务器
- 执行一些后重定向步骤(更新状态标志等)
我的问题是,一旦我重定向到外部服务器,如何让后重定向代码执行?控制将完全超出我的应用程序,对吗?
上述所有 3 个步骤都发生在单击命令按钮时,我的代码在 doPost() 下
假设您使用的是标准 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 ...
}
// ...
}