2012-05-01 29 views
6

¿Alguien sabe cómo hacer que la anotación @Schedule funcione en JBoss AS 7?JBoss AS 7.1 - programación en ejecución usando la anotación @Schedule

Sé que en Glassfish-3.1.2 funciona de inmediato.

que intento esto:

@ManagedBean 
@Stateless(name="ImportStatementSchedule") 
public class ImportStatementSchedule implements Serializable{ 
private Logger _log = Logger.getLogger(this.getClass()); 

    @Schedule(minute="*") 
    public void executeImport(){ 
     _log.info("Scheduled task started"); 
    } 

} 

espero recibir mensaje de registro de cada minuto, pero nada;)

he comprobado estos hilos del foro, pero nada ayuda:

https://community.jboss.org/message/623574

https://community.jboss.org/message/621893

https://community.jboss.org/message/637567

A tienen JBoss AS 7.1.1-final

Tal vez se me olvidó algo, por favor, ¿alguien puede apuntar a manera correcta?

ACTUALIZACIÓN:

Sé que JBoss registrar mi EJB a JNDI:

11:07:05,548 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-6) JNDI bindings for session bean named ImportStatementSchedule in deployment unit deployment "finadv.war" are as follows: 

    java:global/finadv/ImportStatementSchedule!finadv.bean.ImportStatementSchedule 
    java:app/finadv/ImportStatementSchedule!finadv.bean.ImportStatementSchedule 
    java:module/ImportStatementSchedule!finadv.bean.ImportStatementSchedule 
    java:global/finadv/ImportStatementSchedule 
    java:app/finadv/ImportStatementSchedule 
    java:module/ImportStatementSchedule 

Update2

Se ha resuelto como se menciona en los comentarios de servicio

+3

ver este hilo, particularmente el parámetro "hora": http://stackoverflow.com/questions/10246606/java-ee-scheduler- is-not-called –

+1

Problema resuelto estableciendo parámetro de hora. Sin embargo, lo intenté antes con valores exactos como @Schedule (minute = "18", hour = "15") pero no pasa nada. Gracias. – rkosegi

Respuesta

6

temporizador es el servicio EJB. ImportStatementSchedule debe ser un bean de sesión @Stateless o @Singleton. De la especificación de EJB 3.1, Sección 18.2:

Para los temporizadores creados automáticamente, el método de tiempo de espera puede ser un método anotado con la anotación de Programa. Se pueden crear temporizadores para beans de sesión sin estado, beans de sesión singleton, beans controlados por mensaje y beans de entidad 2.1. No se pueden crear temporizadores para beans de sesión con estado.

La declaración de registro INFO es engañosa. JBoss no registra un EJB. Simplemente utiliza el mismo esquema de nombres definido por el @ManagedBean anotación (Javadoc):

[..] nombres bean administrado debe ser único dentro de un módulo Java EE. Para cada Bean gestionado nombrado, los contenedores Java EE deben poner a disposición las siguientes entradas en JNDI, utilizando el mismo esquema de denominación utilizado para los componentes EJB. En el espacio de nombres de la aplicación:

java:app/<module-name>/<bean-name>

En el espacio de nombres de módulo del módulo que contiene el bean gestionado:

java:module/<bean-name>

+0

+1 para una buena referencia, pero lo intenté antes de la anotación Stateless o Singleton, ahora sé que ese problema fue como lo mencionó @Nick Wilson en el parámetro hora. – rkosegi

+0

thx, @rkosegi. ¿eso significa que puede usar '@ Schedule' sin usar' @ Stateless' o '@ Singleton'? – kraftan

+0

No, significa que no pude hacerlo funcionar hasta que configuré el parámetro hora en "*". Actualmente estoy usando una anotación sin estado y funciona. – rkosegi

4

puedo añadir, que si se escribe

@Schedule(minute="*")

solo se disparará a la medianoche. Porque el parámetro de hora es el predeterminado: .

Probar: @Schedule(minute = "/1", hour = "") o algo como esto. En mi caso, ayudó.

0

Debe especificar horas, intente:

@Schedule(hour="\*", minute="\*") 
Cuestiones relacionadas