我有一个执行数据库操作的异步任务。这可能需要几分钟。
public void doSomeStuff() {
// 10 minutes of database magic
}
由于数据库端可能存在并发问题,因此该方法必须同时只有一个异步执行(如单例)。此外,如果该方法已在运行,则不应丢弃下一个呼叫,但在前一个呼叫结束时重新计算并执行。就像一个队列。
我已经对@Asynchronous
和@ConcurrencyManagement(...)
注释进行了研究,但它们似乎无法提供所需的控制权。
如何使用JBoss EAP 6(+ JSF)在JavaEE 7中实现这一目标?
答案 0 :(得分:1)
您可以使用@Stateless
方法使用@Asynchronous
bean。
然后,您可以使用注释@Pool(<pool name>)
设置bean使用的线程池。如果将池大小限制为1,则可以获得所需的内容。