Избегайте перекрытия таймеров в расписании EJB, работающем внутри wildfly.JAVA

Программисты JAVA общаются здесь
Anonymous
Избегайте перекрытия таймеров в расписании EJB, работающем внутри wildfly.

Сообщение Anonymous »

У меня есть расписание таймера EJB в одноэлементном EJB, работающем внутри Wildfly 10.10:

Код: Выделить всё

@Singleton
@Startup
@ConcurrencyManagement(ConcurrencyManagementType.BEAN)
public class MySingletonBean {

public method() {
//uses synchronization primitives to fine control the concurrent access
}

@Schedule(hour = "*", minute = "*", second = "*", persistent = false)
public void update() {
//each 120 seconds update method timeouts and the overlapping/log message occurs
}
}
Задача внутри модели update() выполняется плавно, тратя в основном менее 1 секунды. Однако каждые 2 минуты из-за потребностей бизнеса время ожидания метода превышает 1 секунду.

Проблема:

Каждые 2 минуты wildfly выводит сообщение журнала следующего вида:


(по умолчанию EJB — 1) WFLYEJB0043: A предыдущее выполнение таймера [] все еще продолжается, пропуская это перекрывающееся запланированное выполнение по адресу: .


Мне ясно, о чем идет речь означает: предыдущий таймер не завершился до начала следующего выполнения, и происходит перекрытие.

Кроме того, перекрытие вызывает параллельные проблемы в базовой структуре данных при обновлении.< /p>

Мои вопросы:

1 - Как отбросить следующий график в деле когда таймер работает медленно, избегая перекрытия/параллельного обновления?

2 - Как избежать сообщения журнала, если невозможно отменить перекрывающееся расписание?

Кстати, я подумал разбить метод обновления на два разных расписания (1 секунда и 120 секунд). Но нарушение метода обновления подразумевает разрыв всей обновляемой структуры данных, что как-то сложно и нецелесообразно, по крайней мере на данный момент.

Любая помощь приветствуется!

Подробнее здесь: https://stackoverflow.com/questions/469 ... de-wildfly

Вернуться в «JAVA»