style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Problema con FacesContext

Hola tengo el siguente metodo dentro de mi aplicacion donde constantemente esto ejecutandolo cada 3 segundos y nunca me reconoce la interfaz visual de mi aplicacion y si esta visible...Saludos y gracias...si no queda claro postear yo le respondo gracias

public void temporizador() {

System.out.println("Entro a TEMPORIZADOR");
ses = Executors.newScheduledThreadPool(1);

// Ejecutar dentro de 4 segundos, repetir cada 3 segundos
ses.scheduleAtFixedRate(this, 4 * 1000, 3 * 1000, TimeUnit.MILLISECONDS);

}

public void run() {

System.out.println("Entro a RUN");

FacesContext fc = FacesContext.getCurrentInstance();
if(fc != null){
UIComponent comp0 = fc.getViewRoot().findComponent("form_dashboard:id_office0");
UIComponent comp1 = fc.getViewRoot().findComponent("form_dashboard:id_office1");
UIComponent comp2 = fc.getViewRoot().findComponent("form_dashboard:id_office2");
UIComponent comp3 = fc.getViewRoot().findComponent("form_dashboard:id_office3");
UIComponent comp4 = fc.getViewRoot().findComponent("form_dashboard:id_office4");
UIComponent comp5 = fc.getViewRoot().findComponent("form_dashboard:id_office5");
UIComponent comp6 = fc.getViewRoot().findComponent("form_dashboard:id_office6");
UIComponent comp7 = fc.getViewRoot().findComponent("form_dashboard:id_office7");
UIComponent comp8 = fc.getViewRoot().findComponent("form_dashboard:id_office8");

}

if (office0 != null) {
if (generalServices.dameTiempoAtención(office0) != atencion0) {
atencion0 = generalServices.dameTiempoAtención(office0);
System.out.println("ACTUALIZO ATENCION OFFICE 0");
}
if (generalServices.dameTiempoEspera(office0) != espera0) {
espera0 = generalServices.dameTiempoEspera(office0);
System.out.println("ACTUALIZO ESPERA OFFICE 0");
}
Float provisional0 = Redondear2Decimales(generalServices.damePorcentClientDESERT(office0));
if (provisional0 != abandonan0) {
abandonan0 = provisional0;
System.out.println("ACTUALIZO % OFFICE 0");
}
}

}

}

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ElderMael

FacesContext.getCurrentInstance()

Hola Yudiel,

Al inspeccionar tu código me doy cuenta de esta línea:

FacesContext fc = FacesContext.getCurrentInstance();

La cual esta siendo llamada desde el método run del Runnable que estas pasando como parametro al ScheduledExecutorService. Si mal no recuerdo (lo que pasa es que usaba JSF hace mucho) este metodo estatico te regresa el FacesContext para el request.

Desgraciadamente (en las implementaciones que he usado) este método está implementado con un ThreadLocal. Lo que significa que únicamente te va a regresar lo que le pides si la llamada se ejecuta en el mismo Thread que despacho tu request i.e. si lo llamas desde el Thread que despacha tu método run te regresara null por que es un Thread diferente.

Quiero suponer que debido a lo anterior tu estas haciendo el check if(fc != null). No tengo el contexto de lo que quieres hacer pero pues supongo que deseas actualizar esos componentes en un hilo aparte; en ese caso pues simplemente podrias guardar el FacesContext como un campo de tu clase... Sin embargo no se si esto te de problemas despues si es que tienes mas de un request y este objeto deje de servirte o sea reemplazado por el contexto de otro hilo (en otro request).

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">