BlazeDS es una tecnología open source basada en java que permite utilizar desde flex clases desarrolladas en este lenguaje facilitando así al programador el manejo de los datos, ya que permite utilizar los métodos de dichas clases desde la plataforma flex.
Pero a su vez cuenta con la capacidad de recibir y enviar datos en tiempo real desde y hacia las instancias de la aplicación, mediante una arquitectura de subscripcion y publicacion a un messaging destination, lo que permite en la practica tener un conjunto de instancias de la aplicación web de manera sincronizada y que nos ayudarian a desarrollar aplicaciones en que los multiples usuarios de ella interactuarian en tiempo real ya sea actualizando informacion en sus pantallas, refrescando graficos, tablas, imágenes y cualquier situacion que se pueda dinamizar en este sentido. Esto es permitido debido a la arquitectura que tiene BlazeDS que implementa un Servlet como punto de entrada que se encarga de conectar todo el servicio al cliente Flex.
Aplicación
Esto es un sencillo ejemplo de como sincronizar todas las instancias de una aplicacion web que trabaje en un servidor basado en java y que este desarrollada en flex. Por eso es que utilizamos
messaging-services de blazeds, ya que nos permite comunicar las instancias en tiempo real sin importar el navegador que se este utilizando.
Aplicación De Esta Guia Corriendo
Como pueden ver la aplicacion se ejecuta en navegadores distintos (Firefox Mozilla e IExplorer). Este tutorial se trata de desarrollar esta sencilla aplicacion pero si lo aplicamos a ciertas circunstancias resultara muy util.
Conocimiento
Flex y conocimiento en aplicaciones web java.
Requerimientos de Software
- BlazeDS (binary distribution, aunque también serviría la distribución turn-key para no tener que instalar el servidor java)
- Servidor Java (En este caso utilizo Tomcat 6.0).
- Flash Buider(también se puede implementar con Flex Builder 3, el antecesor ).
Pasos
- Empezaremos descargando la distribución binary de BlazeDS, luego extraemos el archivo blazeds.war del zip y le cambiamos el nombre por EjemploBlazeDS.war, seguidamente lo desplegamos en nuestro servidor java mediante la consola web de administración; asumo que ya lo tienen instalado. Si están usando JBoss deben de seleccionar que si en Deployed Exploded para permitir que el despliegue se haga en forma de directorio.
- Ahora debemos de configurar el messaging-service en blazeds para registrar un destination que le pondremos el nombre "mensajesblazeds"(este nombre queda a criterio de cada quien, de igual forma se pueden tener definidos mulltiples destinations con distintos nombres) y con el cual se comunicaran las instancias de nuestra aplicacion y que se puedan sincronizar simultaneamente, esto lo haremos modificando el archivo messaging-config.xml que se encuentra en el directorio WEB-INF\flex de la aplicacion web que desplegamos. El archivo debe de quedar de la siguiente manera:
- <?xml version="1.0" encoding="UTF-8"?>
- <service id="message-service"
- class="flex.messaging.services.MessageService">
- <adapters>
- <adapter-definition id="actionscript" class="flex.messaging.services.messaging.adapters.ActionScriptAdapter" default="true" />
- <!-- <adapter-definition id="jms" class="flex.messaging.services.messaging.adapters.JMSAdapter"/> -->
- </adapters>
- <default-channels>
- <channel ref="my-polling-amf"/>
- </default-channels>
- <destination id="mensajesblazeds"/>
- </service>
3. Ahora comenzaremos a trabajar la parte cliente en flex,
creamos un proyecto flex como se puede observar acá, al proyecto lo nombre EjemploBlazeDS, también se debe de modificar la parte que dice application server type para que trabaje con Java y además el remoting service que es BlazeDS. Damos Next:

4. En este paso procedemos a confirmar el directorio(root folder) de nuestra aplicación en el servidor y además deberemos de asignar las url. Damos Finish.

5. Ya por configurado el proyecto, se procede a prorgramar la aplicacion flex.
<?xml version="1.0" encoding="utf-8"?>
<!-- Inicializar el objeto receptor es crucial por ello debe de subscribirse al destination al momento de inicio de
la aplicaion o cuando asi sea necesario --->
<s:Application creationComplete="receptor.subscribe()" xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
<fx:Declarations>
<!-- se deben de crear los dos objetos claves que son el que recibe (consumer) y el que emite (producer)
a la propiedad destination se le asigna el nombre del destination que creamos en el archivo
messaging-config.xml y ademas utilizamos el evento message para determinar cuando son recibidos los
mensajes
-->
<s:Consumer id="receptor" destination="mensajesblazeds" message="recibirMensaje(event.message)"/>
<s:Producer id="emisor" destination="mensajesblazeds"/>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.messaging.messages.AsyncMessage;
import mx.messaging.messages.IMessage;
// metodo para gestionar los mensajes entrantes y asignarselos a un text area
protected function recibirMensaje(mensaje:IMessage):void{
mensajes.text += mensaje.body.mensaje + "\n";
}
// metdo para enviar el mensaje al destination y que este lo reenvie a todoas
// las instancias de la aplicacion
protected function button1_clickHandler(event:MouseEvent):void
{
var message:IMessage = new AsyncMessage;
message.body.mensaje = texto.text;
emisor.send(message);
texto.text = "";
}
]]>
</fx:Script>
<s:TextInput x="113" y="42" id="texto"/>
<s:Button x="262" y="42" label="Button" click="button1_clickHandler(event)"/>
<s:TextArea x="113" y="87" id="mensajes"/>
</s:Application>
<!-- Inicializar el objeto receptor es crucial por ello debe de subscribirse al destination al momento de inicio de
la aplicaion o cuando asi sea necesario --->
<s:Application creationComplete="receptor.subscribe()" xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
<fx:Declarations>
<!-- se deben de crear los dos objetos claves que son el que recibe (consumer) y el que emite (producer)
a la propiedad destination se le asigna el nombre del destination que creamos en el archivo
messaging-config.xml y ademas utilizamos el evento message para determinar cuando son recibidos los
mensajes
-->
<s:Consumer id="receptor" destination="mensajesblazeds" message="recibirMensaje(event.message)"/>
<s:Producer id="emisor" destination="mensajesblazeds"/>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.messaging.messages.AsyncMessage;
import mx.messaging.messages.IMessage;
// metodo para gestionar los mensajes entrantes y asignarselos a un text area
protected function recibirMensaje(mensaje:IMessage):void{
mensajes.text += mensaje.body.mensaje + "\n";
}
// metdo para enviar el mensaje al destination y que este lo reenvie a todoas
// las instancias de la aplicacion
protected function button1_clickHandler(event:MouseEvent):void
{
var message:IMessage = new AsyncMessage;
message.body.mensaje = texto.text;
emisor.send(message);
texto.text = "";
}
]]>
</fx:Script>
<s:TextInput x="113" y="42" id="texto"/>
<s:Button x="262" y="42" label="Button" click="button1_clickHandler(event)"/>
<s:TextArea x="113" y="87" id="mensajes"/>
</s:Application>
Con esto ya podemos correr la aplicacion y observar como el messaging-service puede usarse parar elaborar aplicaciones mas interactivas para el usuario final, ya que pueden estar pendientes de las actualizaciones o modificaciones que se den en la informacion.
El archivo war queda a disposición aquí
0 comentarios:
Publicar un comentario en la entrada