Мое решение с использованием компонента SchedulerComponent
@Named("scheduler")
@Component
public class SchedulerComponent {
private List<IScheduledComponent> components;
public SchedulerComponent() {
this.components = new ArrayList<IScheduledComponent>();
}
public void register(IScheduledComponent component){
this.components.add(component);
}
@Scheduled(fixedRate = 5000)
public void doAllWork() {
try {
for(IScheduledComponent component : this.components){
component.doWork();
}
System.out.println("SchedulerComponent.doAllWork()");
} catch (Exception e) {
e.printStackTrace();
}
}
}
Интерфейс для выполнения по расписанию
public interface IScheduledComponent {
public void doWork();
}
Позволяет компоненту данных реализовать интерфейс и зарегистрироваться в компоненте Scheduler
@Named("agentData")
@Scope("application")
public class AgentDataBean implements Serializable,IScheduledComponent {
...
public void doWork() {
// do database poll
}
...
}
Теперь у меня запланировано Spring, и у меня есть FacesContext в AgentDataBean, чтобы я мог выполнить Push-код Icefaces.