2016-04-14 8 views
0

У меня есть задача async, которая выполняет операции с базой данных. Это может занять много минут.Java - Выполнение последовательных async

public void doSomeStuff() { 
    // 10 minutes of database magic 
} 

Из-за возможных проблем параллелизма на стороне базы данных, должны быть только один асинхронное выполнение этого метода в то же время (как одноточечного). Кроме того, если этот метод уже запущен, следующий вызов не должен отбрасываться, но запоминается и выполняется, когда предыдущий вызов заканчивается. Также как очередь.

Я исследовал аннотации @Asynchronous и @ConcurrencyManagement(...), однако они, похоже, не обеспечивают необходимый контроль.

Как добиться этого в JavaEE 7 с помощью JBoss EAP 6 (+ JSF)?

+1

Отметить метод синхронизации? – Ferrybig

ответ

1

Вы можете использовать фасоль @Stateless с методом @Asynchronous.

Затем вы можете установить пул потоков, используемый компонентом с аннотацией @Pool(<pool name>). Если вы ограничиваете размер пула равным 1, у вас есть то, что вам нужно.

Смежные вопросы