tutorial transacciones español java java-ee-6 ejb-3.1 schedule

java - transacciones - ejb 3.0 tutorial español



¿Se puede configurar EJB 3.1 @ Programar fuera del código de la aplicación? (3)

  1. ejb-jar.xml

Para mí, la variante de ejb-jar.xml comenzó a funcionar solo en TomEE. Pase el parámetro javax.ejb.Timer en el método de tiempo de espera:

<session> <ejb-name>AppTimerService</ejb-name> <ejb-class>my.app.AppTimerService</ejb-class> <session-type>Singleton</session-type> <timer> <schedule> <second>*/10</second> <minute>*</minute> <hour>*</hour> </schedule> <timeout-method> <method-name>timeout</method-name> <method-params> <method-param>javax.ejb.Timer</method-param> </method-params> </timeout-method> </timer>

public class AppTimerService { public void timeout(Timer timer) { System.out.println("[in timeout method]"); } }

Gracias https://blogs.oracle.com/arungupta/entry/totd_146_understanding_the_ejb post.

  1. Variante de archivo de propiedades

Puedes leer el archivo .properties y crear un temporizador programáticamente

ScheduleExpression schedule = new ScheduleExpression(); schedule.hour(hourProperty);//previously read property from .properties file schedule.minute(minuteProperty);//previously read property from .properties file Timer timer = timerService.createCalendarTimer(schedule);

Pero no puedo encontrar podemos usar expresiones cron en EJB.

¿Cómo puedo configurar un intervalo de horarios:

@Schedule(persistent=true, minute="*", second="*/5", hour="*")

fuera del código de aplicación?

  1. ¿Cómo puedo configurarlo en ejb-jar.xml?
  2. ¿Puedo configurarlo fuera de la aplicación (tipo de archivo de propiedades)?

De acuerdo con la especificación EJB 3.1, los temporizadores automáticos se pueden configurar mediante anotaciones o mediante el ejb-jar.xml implementación ejb-jar.xml .

18.2.2 Creación automática del temporizador

El servicio de temporizador admite la creación automática de un temporizador basado en metadatos en la clase de bean o el descriptor de implementación . Esto permite al desarrollador de beans programar un temporizador sin depender de una invocación de beans para invocar mediante programación uno de los métodos de creación del temporizador del servicio de temporizador. Los temporizadores creados automáticamente son creados por el contenedor como resultado de la implementación de la aplicación.

Y mi comprensión del esquema del descriptor de implementación XLM es que lo define utilizando un elemento <timer> dentro de un elemento <session> .

<xsd:element name="timer" type="javaee:timerType" minOccurs="0" maxOccurs="unbounded"/>

Consulte la definición del tipo complejo timerType para obtener información detallada (en particular, los elementos del timeout-method schedule y de timeout-method ).

Referencias

  • Especificación EJB 3.1
    • Sección 18.2.2 "Creación automática del temporizador"
    • Sección 19.5 "Esquema XML del descriptor de implementación" (p. 580, p583-p584)

Este es un ejemplo de una programación en el descriptor de implementación:

<session> <ejb-name>MessageService</ejb-name> <local-bean/> <ejb-class>ejb.MessageService</ejb-class> <session-type>Stateless</session-type> <timer> <schedule> <second>0/18</second> <minute>*</minute> <hour>*</hour> </schedule> <timeout-method> <method-name>showMessage</method-name> </timeout-method> </timer> </session>

Otra forma de configurar los temporizadores es con una programación programática.

@Singleton @Startup public class TimedBean{ @Resource private TimerService service; @PostConstruct public void init(){ ScheduleExpression exp=new ScheduleExpression(); exp.hour("*") .minute("*") .second("*/10"); service.createCalendarTimer(exp); } @Timeout public void timeOut(){ System.out.println(new Date()); System.out.println("time out"); } }