我想通过单击JSF和Java开发的按钮来执行存储过程。执行过程大约需要大约30分钟。
当用户点击此按钮时,他/她应该收到一条默认消息,如 -
正在处理数据。请在60分钟后登录以查看数据。
现在,当我们点击按钮时,UI页面将暂停执行proc的时间。
是否有解决方法来显示此默认消息并在后端运行proc?
答案 0 :(得分:4)
您可以通过单击按钮调用方法,该按钮可以使用java.util.concurrent包中提供的Future或FutureTask。前者是接口,后者是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() {
// ...
}
}