Una de las muchísimas cosas buenas que tiene Firebird son los eventos, y es algo que se conoce muy poco porque otros motores SQL no disponen de esta maravillosa característica y por lo tanto muchísima gente ni siquiera sabe que existen.

¿Qué son los eventos?

Son mensajes que asincrónicamente le envía el Servidor al Cliente. Asincrónicamente significa que el Cliente recibe el mensaje aunque en ese momento esté realizando cualquier otra tarea.

¿Cómo funcionan?

El Cliente declara su interés por enterarse cuando algo ocurra en la Base de Datos. Cuando ocurre el Servidor le envía un mensaje al Cliente, avisándole.

Ejemplos:

  1. Cuando la cantidad en stock de un producto es menor que 10 unidades el Gerente de Compras quiere saberlo para hacer un nuevo pedido al Proveedor
  2. Cuando un cliente está en mora por más de 60 días se quiere bloquear su crédito en todas las sucursales de la empresa
  3. Cuando faltan solamente 20 días para la fecha de vencimiento de un producto se quiere rebajar su precio de venta en un 20% para que se venda rápido
  4. Cuando el sensor de temperatura de la cámara frigorífica marca -4ºC se quiere automáticamente encender el motor auxiliar para que baje la temperatura
  5. Cuando el pedido que se le hizo al Proveedor tarda más de dos horas de la hora prefijada, se quiere enviarle un mensaje al celular del Gerente de Compras y también avisarle mediante un mensaje en la pantalla de su computadora.

En todos estos ejemplos y muchísimos más lo que se desea es que al instante de ocurrir el evento se tome una acción (avisarle a una persona, insertar o actualizar un registro en una tabla, encender un motor, etc.)

O sea, no se estará esperando que el Gerente de Compras se acuerde de que debe ver el informe que le muestra los productos cuya cantidad en stock está baja, no, lo que se quiere es que sea avisado sí o sí cuando tal cosa ocurra.

Soluciones posibles:

  1. El programa está monitoreando constantemente la Base de Datos, por ejemplo mediante un control timer que cada 1 minuto verifica la cantidad en stock de los productos para detectar si alguno de ellos se encuentra en el mínimo o debajo del stock mínimo.
  2. El Servidor se encarga de avisar cuando ocurre lo que se está monitoreando. En el ejemplo anterior, avisará cuando la cantidad en stock de un producto llegue al mínimo

Evidentemente la opción 2. es preferible porque solamente avisa cuando el hecho ocurre. Con la opción 1. tendríamos un control timer disparándose cada 1 minuto y quizás pasan muchos días y la condición nunca se cumple, lo cual significa que se están desperdiciando recursos de la computadora en espera de que tal hecho acontezca.

Y con Firebird … tenemos la gran oportunidad de usar la opción 2.

¿Cómo se notifica un evento?

Mediante el comando:

POST_EVENT ‘Mi mensaje’;

¿Dónde se puede notificar un evento?

En los stored procedures y en los triggers.

¿Cómo se reciben los eventos?

Cada vez que ocurre el evento el Servidor se lo notifica a todos los Clientes que demostraron interés en enterarse de ese evento. Esto se hace a través de un módulo llamado “Event Manager” que se ejecuta en segundo plano y que tiene una lista de todas las aplicaciones y los eventos que dichas aplicaciones quieren recibir.

¿En qué momento el Servidor envía el evento al Cliente?

Justo después que la transacción finalizó con un COMMIT. Eso significa que solamente los eventos de las transacciones “comiteadas” son enviados. Lo cual es muy lógico, no tendría sentido enviar eventos de transacciones que luego terminan con ROLLBACK.

¿Cómo se reciben los eventos en las aplicaciones?

Eso depende del lenguaje que estés utilizando para programarlas. Un ejemplo con Visual FoxPro será tema de otro artículo, para mostrar como utilizarlas desde ese lenguaje.

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21

Anuncios