jAlarms incluye dos módulos que permiten usarlo en Groovy y Scala de manera más apropiada para esos lenguajes.
La idea principal es que se tiene un método que puede envolver un bloque de código (conocido como closure) y que se envíe una alarma si se arroja una excepción en dicho bloque. Esto es similar a la funcionalidad que ofrece el módulo de AOP, pero se puede usar en estos dos lenguajes que soportan closures.
Existe un componente llamado AlarmSenderDecorator que le agrega dos métodos withAlarm a un AlarmSender. Si se utiliza un manejador de inyección de dependencias, se puede configurar un bean de este tipo que reciba un AlarmSender como argumento en su constructor, y dicho AlarmSender será modificado con dos variantes de withAlarm.
Una vez modificado el AlarmSender, se puede usar de este forma en Groovy:
AlarmSender sender //generalmente es inyectado sender.withAlarm("Oh no, ha ocurrido un error!") { hacerUnaCosa() hacerOtraCosa() }
Si se arroja una excepción en el bloque de código (que en realidad es un closure), se envía el mensaje de alarma, y la excepción se arroja después. Hay otra variante que recibe la fuente de alarma como segundo argumento:
AlarmSender sender sender.withAlarm("despierten todos!", "core") { blabla() } //Lo anterior es equivalente a hacer todo esto try { blabla() } catch (Throwable t) { sender.sendAlarm("despierten todos!", "core") throw t }
De manera similar, en Scala se puede usar también el método withAlarm. Lo único que se necesita es importar com.solab.alarms.scala.bindings._ y se podrán usar estos métodos (uno con fuente y otro con el puro mensaje).
import com.solab.alarms.scala.bindings._ val sender:AlarmSender //obtener esto de algún lado sender.withAlarm("Oh no!") { blabla() } sender.withAlarm("una alarma diferente", "fuente") { foo() bar() }
En Scala no se necesita configurar nada, con el import es suficiente.