jueves, 20 de agosto de 2009

Uso de un nodo de correo

En este artículo se muestra un ejemplo de uso de un nodo de correo dentro de un proceso en jBPM.

Para poder probar el funcionamiento del envío de mensajes, lo primero que se va a hacer es instalar un servidor de correo, en este caso, Apache James, un servidor de correo electrónico implementado en Java muy fácil de instalar.

En primer lugar se obtienen los archivos binarios de la última versión (2.3.1) de esta dirección. Se tiene así un archivo comprimido que podemos descomprimir en la ruta que nos plazca.

Una vez descomprimido, vamos a la carpeta bin y ejecutamos el archivo run.bat (si estamos en Windows). Con ello se arranca el servidor, apareciendo una pantalla como la siguiente:

Lo siguiente es la configuración de usuarios de correo. Para ello se abre una ventana de terminal y se ejecuta >telnet localhost 4555. Con ello se accede a la herramienta de administración remota del servidor, en la que hay que registrarse como usuario root con el mismo password root. A continuación se crean dos usuarios user y user2 que se van a usar para las pruebas:

En un cliente de correo electrónico, como Thunderbird, se configura la cuenta de correo de electrónico para el usuario user. El password es también user y todos los servidores que se piden son localhost. Así, el usuario user ya puede enviar y recibir correo a través del servidor que hemos instalado.

Para probar esta configuración, se va a crear un proyecto en eclipse, con una clase de prueba que envía un correo electrónico del usuario user2 al usuario user:
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;

public class MailClient
extends Authenticator
{
protected String from;
protected Session session;
protected PasswordAuthentication authentication;

public MailClient(String user, String host)
{
this(user, host, false);
}

public MailClient(String user, String host, boolean debug)
{
from = user + '@' + host;
authentication = new PasswordAuthentication(user, user);
Properties props = new Properties();
props.put("mail.user", user);
props.put("mail.host", host);
props.put("mail.debug", debug ? "true" : "false");
props.put("mail.store.protocol", "pop3");
props.put("mail.transport.protocol", "smtp");
session = Session.getInstance(props, this);
}

public void sendMessage(
String to, String subject, String content)
throws MessagingException
{
System.out.println("SENDING message from " + from + " to " + to);
System.out.println();
MimeMessage msg = new MimeMessage(session);
msg.addRecipients(Message.RecipientType.TO, to);
msg.setSubject(subject);
msg.setText(content);
Transport.send(msg);
}

public static void main(String[] args) throws Exception
{
MailClient user2Client = new MailClient("user2", "localhost");

user2Client.sendMessage(
"user@localhost",
"Prueba",
"Mensaje de prueba");
}
}

Ahora, al ejecutar esta clase de ejemplo, se debería recibir un mensaje en el cliente de correo en que se ha configurado la cuenta del usuario user:

Una vez configurado el servidor de correo, se va a crear un proceso de prueba, formado por un nodo de inicio, un nodo de correo y un nodo de fin:

Se configura el nodo de correo para que envíe un correo al usuario user, como se ha mostrado en la imagen anterior.

Para probar este proceso se crea una clase de prueba que unicamente crea una instancia del proceso y lanza su ejecución:
package com.sample;

import junit.framework.TestCase;

import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;

public class ProcessTest extends TestCase {
public void testProcess() throws Exception {
// Obtener la definición del proceso
ProcessDefinition processDefinition =
ProcessDefinition.parseXmlResource("nodocorreo/processdefinition.xml");

// Crear una instancia del proceso
ProcessInstance instance = new ProcessInstance(processDefinition);

// Saltar desde el nodo de inicio
instance.signal();
}
}

Si se ejecuta esta prueba, se debería recibir un mensaje en el cliente de correo en que se ha configurado la cuenta del usuario user:

Referencias:
JBoss user guide
jBPM Javadoc
Apache James
Working with James

No hay comentarios:

Publicar un comentario