在JSF中点击按钮异步调用长时间运行的进程

时间:2015-08-07 07:55:49

标签: jsf asynchronous java-ee long-running-processes

我想通过单击JSF和Java开发的按钮来执行存储过程。执行过程大约需要大约30分钟。

当用户点击此按钮时,他/她应该收到一条默认消息,如 -

  

正在处理数据。请在60分钟后登录以查看数据。

现在,当我们点击按钮时,UI页面将暂停执行proc的时间。

是否有解决方法来显示此默认消息并在后端运行proc?

2 个答案:

答案 0 :(得分:4)

您可以通过单击按钮调用方法,该按钮可以使用java.util.concurrent包中提供的FutureFutureTask。前者是接口,后者是Future接口的实现。

通过在代码中使用“Future”,您的异步任务将立即执行,并保证将来可以将结果提供给调用线程。

看一下这个链接:Is it safe to start a new thread in a JSF managed bean?
另请查看此链接:https://codereview.stackexchange.com/questions/39123/efficient-way-of-having-synchronous-and-asynchronous-behavior-in-an-application

答案 1 :(得分:3)

只需触发@Asynchronous EJB方法即可。它将触发并忘记一个单独的线程,bean动作方法将立即返回。

@Named
public class Bean {

    @EJB
    private Service service;

    public void submit() {
        service.asyncDoSomething();

        // Add message here.
    }

}
@Stateless
public class Service {

    @Asynchronous
    public void asyncDoSomething() {
        // ...
    }

}

另见: