lunes, 31 de mayo de 2010

Un ejemplo rápido de JMS

Para este ejemplo estoy usando Netbeans version 6.9, un servidor Glassfish V3, JDK1.6 y Ubuntu 9.10
En este ejemplo vamos a mostrar como hacer funcionar Java Message Service desde Glassfish y un aplicativo java.

Luego se tiene que iniciar el servidor Glassfish
Posteriormente, se tiene que abrir el administrador de Glassfish V3

Una vez hecho esto, damos click sobre JMS Resources y nos mostrará dos opciones:
Connection Factories y Destination Resources

Damos click sobre Conection Factories y creamos una Conexion. Esta conexión nos permitira el conectarnos a un queue o un topic. Damos click sobre Nuevo
Entonces, le damos el nombre jms/queueFactory y como ResourceType, seleccionamos javax.jms.QueueConnectionFactory y guardamos esta configuración
Luego tenemos que crear un Destination Resource
Damos click sobre Destination Resources y luego click en Nuevo
Le damos el nombre jms/queue, en el Physical Destination Name colocamos something y como tipo de recurso seleccionamos javax.jms.Queue, es decir:




Luego, creamos una aplicación JavaEE y le llamamos PracticaJMS
El presente ejercicio consiste en crear un servlet que cree un mensaje y que luego este servlet sea consumido por otro servlet e imprima el mensaje original.
En el módulo web creamos un nuevo Servlet llamado Generador

y en ese Servlet colocamos el siguiente código:
Generador.java
//Variables de instancia
@Resource(mappedName = "jms/queueFactory")
javax.jms.QueueConnectionFactory queueConnectionFactory;
@Resource(mappedName = "jms/queue")
javax.jms.Queue queue;

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
String text = "Esta es una prueba!!!";
try {
Connection connection = queueConnectionFactory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
TextMessage message = session.createTextMessage(text);
MessageProducer producer = session.createProducer(queue);
producer.send(message);
producer.close();
session.close();
connection.close();
response.sendRedirect("Consumidor");
} catch (JMSException ex) {
ex.printStackTrace();
}
}



Luego creamos un nuevo Servlet llamado Consumidor



Con el siguiente código:



Consumidor.java
//Variables de instancia
@Resource(mappedName = "jms/queueFactory")
javax.jms.QueueConnectionFactory queueConnectionFactory;
@Resource(mappedName = "jms/queue")
javax.jms.Queue queue;

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
List messages = new ArrayList();
String mensaje = "No hay mensaje";
try {
Connection connection = queueConnectionFactory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
QueueBrowser browser = session.createBrowser(queue);
Enumeration queueEnum = browser.getEnumeration();
while (queueEnum.hasMoreElements()) {
Object obj = queueEnum.nextElement();
if (obj instanceof TextMessage) {
mensaje = ((TextMessage) obj).getText();
}
}
browser.close();
session.close();
connection.close();
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet Consumidor</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>" + mensaje + "</h1>");
out.println("</body>");
out.println("</html>");
} catch (JMSException ex) {
ex.printStackTrace();
} finally {
out.close();
}
}

Finalmente ejecutamos Generador y obtendremos la salida:

No hay comentarios:

Publicar un comentario