Servicios de Mensajes con JMS
 

Ejercicios de Subscripciones Duraderas, Transacciones Locales y Uso de JMS en JavaEE

Transacciones Locales (1p)

Las hipotecas con color naranja requieren de un estudio específico por parte de analistas financieros externos a nuestra entidad. Por lo tanto, al recibir el color naranja, le reenviaremos toda la información de la hipoteca a un sistemas externo.

Para ello, modificaremos el proyecto del semáforo para que en el caso de que el semáforo devuelva Naranja, antes de sacar el color por la consola, envíe un mensaje con DatosHipoteca a una nueva cola (ConsultorExternoQueue).

Así pues, tanto la recepción asíncrona como el envío síncrono del mensaje deberán formar parte de una transacción JMS.

Semáforo EAR

Vamos a crear una nueva aplicación EAR (jms-banco-semaforo-ear) que se base en nuestro semáforo hipotecario.

Consejo
A la hora de crear el EAR mediante Netbeans, es conveniente también crear los proyectos ejb y web

jms-banco-ejb (1p)

Crearemos un nuevo proyecto jms-banco-ejb, de modo que construyamos un EJB de sesión sin estado y con únicamente el interfaz local (ConsultorHipotecaSLSBean) que haga la función del banco, es decir, que envíe mensajes a la cola. Para ello, crearemos el siguiente método:

String enviaHipotecaSemaforo(String banco, double cuantia, int anyos, double interes, double nomina)

Este EJB enviará un mensaje a la misma cola (SemaforoHipotecarioRequestQueue) que lo enviaba el proyecto jms-banco, con la misma propiedad (BancoCaja).

De momento, el EJB siempre devolverá null. En la siguiente sesión cambiaremos su comportamiento.

jms-banco-web (1p)

Además, crearemos un aplicación web que contendrá dos Servlets:

  1. El Servlet SolicitarHipotecaEJBServlet, el cual llamará al EJB.
  2. Y el Servlet SolicitarHipotecaJMSServlet, el cual enviará directamente el mensaje a la cola desde el Servlet, sin hacer uso del EJB. Es decir, tendrá código JMS dentro del Servlet.

Para facilitar el trabajo, disponemos del siguiente formulario para comprobar el resultado:

<form action="SolicitarHipotecaEJBServlet">
   Banco: <input type="text" name="banco" value="Banesto" /> <br />
   Cuantia: <input type="text" name="cuantia" value="150000.0" /> <br />
   Años: <input type="text" name="anyos" value="30" /> <br />
   Interes: <input type="text" name="interes" value="4.5" /> <br />
   Nómina: <input type="text" name="nomina" value="40000.0" /> <br />
   <input type="submit" value="Preguntar Semaforo" />
</form>