madeinflex título de la charla autor correo del autor mif online i fds2 en ejemplos por carlos...

25
MadeInFlex “Título de la Charla” Autor Correo del Autor MIF Online I FDS2 en ejemplos Por Carlos Rovira [email protected]

Upload: eulalia-miron

Post on 14-Apr-2015

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: MadeInFlex Título de la Charla Autor Correo del Autor MIF Online I FDS2 en ejemplos Por Carlos Rovira carlos.rovira@gmail.com

MadeInFlex

“Título de la Charla”

Autor

Correo del Autor

MIF Online I

FDS2 en ejemplos

Por Carlos [email protected]

Page 2: MadeInFlex Título de la Charla Autor Correo del Autor MIF Online I FDS2 en ejemplos Por Carlos Rovira carlos.rovira@gmail.com

¿Qué es Flex Data Services 2?

• Es el “esqueleto” de una RIA Flex 2 que nos da funcionalidades avanzadas para comunicar distintos clientes Flex con la lógica de negocio.

• Aplicación Web Java (.war).• Soporta la mayoría de servidores Java actuales

(JBoss, Tomcat, Weblogic,…)• Facilita enormemente la producción de una RIA.• Existen versiones gratis y empresariales.

Page 3: MadeInFlex Título de la Charla Autor Correo del Autor MIF Online I FDS2 en ejemplos Por Carlos Rovira carlos.rovira@gmail.com

¿Qué ofrece?

• Corazón -> Bus de Mensajería• Remote Objects:

– RPC a objetos Java (AMF3).• Flex Message Service:

– Aplicaciones colaborativas.– Mensajería en tiempo real con “push” de datos al cliente

(RTMP).• Flex Data Management:

– Orientación al dato vs Orientación al RPC– Gestión, sincronización y persistencia de los datos (a nivel de

cliente).– Paginación, resolución de conflictos,…

• Otros: Flex Proxy Service, Seguridad y mucho más

Page 4: MadeInFlex Título de la Charla Autor Correo del Autor MIF Online I FDS2 en ejemplos Por Carlos Rovira carlos.rovira@gmail.com

Arquitectura FDS2

Page 5: MadeInFlex Título de la Charla Autor Correo del Autor MIF Online I FDS2 en ejemplos Por Carlos Rovira carlos.rovira@gmail.com

RemoteObjects

Page 6: MadeInFlex Título de la Charla Autor Correo del Autor MIF Online I FDS2 en ejemplos Por Carlos Rovira carlos.rovira@gmail.com

Características

• Similar a Web Services• Llamadas remotas(RPC) a Objetos Java• Protocolo AMF3 (binario, basado en SOAP,

sobre HTTP)• Serialización/Deserialización transparente para

el desarrollador• Mejor rendimiento que un Web Service.

Page 7: MadeInFlex Título de la Charla Autor Correo del Autor MIF Online I FDS2 en ejemplos Por Carlos Rovira carlos.rovira@gmail.com

Ejemplo

• Declaración:– <mx:RemoteObject id="countrys_ro" destination="userService“ result="

countriesResultHandler(event)“ fault=“countriesFaultHandler(event)”/>

• Inicialización:– creationComplete="countrys_ro.getAllCountries()“

• Resolución:– import mx.rpc.events.ResultEvent;– private function countriesResultHandler(event:ResultEvent):void {

countries_cmb.dataProvider = event.result as ArrayCollection}

• Fallo:– import mx.rpc.events.FaultEvent;– private function countriesFaultHandler(event:ResultEvent):void {

Alert.show (event.fault.faultCode, event.fault.faultString);}

Page 8: MadeInFlex Título de la Charla Autor Correo del Autor MIF Online I FDS2 en ejemplos Por Carlos Rovira carlos.rovira@gmail.com

Configuración

Configuración en el servidor (remoting-config.xml):

<destination id="countryService">

<properties> <source>com.mif.fds.CountryService</source>

<scope>application</scope>

</properties>

</destination>

Page 9: MadeInFlex Título de la Charla Autor Correo del Autor MIF Online I FDS2 en ejemplos Por Carlos Rovira carlos.rovira@gmail.com

Flex Message Service

Page 10: MadeInFlex Título de la Charla Autor Correo del Autor MIF Online I FDS2 en ejemplos Por Carlos Rovira carlos.rovira@gmail.com

Flex Message Service

• Corazón de FDS2• Intercambio de mensajes en tiempo real • Protocolo RTMP(Real Time Message Protocol).

Solo datos (ver FMS2 para streaming audio/video).• “Push” de datos a los clientes conectados

(comunicación Servidor -> Cliente)• Creación de aplicaciones colaborativas (ejemplo

básico: Chat)

Page 11: MadeInFlex Título de la Charla Autor Correo del Autor MIF Online I FDS2 en ejemplos Por Carlos Rovira carlos.rovira@gmail.com

Adaptadores

• Determinan que aplicaciones cliente participan en la mensajería.

• 2 tipos:– Actionscript. Para aplicaciones en las que solo intervienen

clientes Flex. (es el usado por defecto)– JMS. Permite usar clientes Flex y JMS (clientes java con

SWING, AWT,…)

• Se configura en messaging-config.xml– <adapters> <adapter-definition id="actionscript…

• Usado en destinations:– <adapter ref=“jms”/>

Page 12: MadeInFlex Título de la Charla Autor Correo del Autor MIF Online I FDS2 en ejemplos Por Carlos Rovira carlos.rovira@gmail.com

Canales

• Deciden como se formatean y circulan los mensajes por la red

• 2 tipos de protocolos sobre los que se construyen los canales:– RTMP: “push” de datos desde el servidor.– AMF: Mensajes por sondeo o petición(existen canales securizados y encripatados basados en estos

protocolos).

• Usado en destinations:<channels>

<channel ref=“my-rtmp”/><channels>

Page 13: MadeInFlex Título de la Charla Autor Correo del Autor MIF Online I FDS2 en ejemplos Por Carlos Rovira carlos.rovira@gmail.com

Ejemplo• Declaración:

– <mx:Producer id="producer" destination="chatDestination"/>– <mx:Consumer id="consumer" destination="chatDestination”

message="messageHandler(event)"/>• El consumidor se suscribe:

– consumer.subscribe();• El Productor manda mensajes

– import mx.messaging.messages.AsyncMessage;– var message:AsyncMessage = new AsyncMessage();– message.headers.user = userlist.selectedItem.name;– message.body = msg_ta.text;– producer.send(message);

• El Consumidor gestiona los mensajes que le llegan:– import mx.messaging.events.MessageEvent;– private function messageHandler(event:MessageEvent):void {

If(data.data.name == event.message.headers.user) msg_ta.text = "" + event.message.body;

}

Page 14: MadeInFlex Título de la Charla Autor Correo del Autor MIF Online I FDS2 en ejemplos Por Carlos Rovira carlos.rovira@gmail.com

Configuración

Configuración en el servidor (messaging-config.xml):

<destination id="chatDestination">

<channels>

<channel ref="my-rtmp"/>

</channels>

</destination>

(Nota: usa el adaptador de actionscript por defecto)

Page 15: MadeInFlex Título de la Charla Autor Correo del Autor MIF Online I FDS2 en ejemplos Por Carlos Rovira carlos.rovira@gmail.com

Flex Data Management Service

Page 16: MadeInFlex Título de la Charla Autor Correo del Autor MIF Online I FDS2 en ejemplos Por Carlos Rovira carlos.rovira@gmail.com

Carácteristicas

• Basado en Flex Message Service (Permite actualizar los datos de los clientes conectados)

• Sincronización• Persistencia• “Orientación a Datos” vs “Orientación a RPCs”• APIs en cliente y servidor que manejan

automática operaciones CRUD.

Page 17: MadeInFlex Título de la Charla Autor Correo del Autor MIF Online I FDS2 en ejemplos Por Carlos Rovira carlos.rovira@gmail.com

Adaptadores

• Determinan la persistencia de los datos.• Se incluyen 2:

– Java (java-dao): Usa clases java para transferir los datos con una fuente de datos (BD, XML, ...)

• Por ejemplo se puede usar un driver JDBC para conectar a una base de datos

– Actionscript: Guarda los datos en la memoria del servidor. Estos persisten mientra FDS esté levantado.

• Configuración en “data-management-config.xml”– <adapters> <adapter-definition id="actionscript

• Usado en destinations:– <adapter ref=“java-dao”/>

Page 18: MadeInFlex Título de la Charla Autor Correo del Autor MIF Online I FDS2 en ejemplos Por Carlos Rovira carlos.rovira@gmail.com

Configuración

<destination id="users"> <adapter ref="java-dao" /> <properties> <source>com.mif.fds.UserAssembler</source> <scope>application</scope> <metadata><identity property="userId"/></metadata> <network> <session-timeout>20</session-timeout> <paging enabled="false" pageSize="10" /> <throttle-inbound policy="ERROR" max-frequency="500"/> <throttle-outbound policy="REPLACE" max-frequency="500"/> </network> <server> <fill-method><name>getUsers</name></fill-method> <fill-method> <name>getUsersByCountry</name> <params>java.lang.String</params> </fill-method> <sync-method><name>syncUsers</name></sync-method> </server> </properties></destination>

métodos del Assembler:*fill*sync*count*get

Garantiza que los elementos de laColección son únicos

Clase Assembler de destino

Page 19: MadeInFlex Título de la Charla Autor Correo del Autor MIF Online I FDS2 en ejemplos Por Carlos Rovira carlos.rovira@gmail.com

Assembler

Assembler DAO BD

FDS2ClienteFlex

VO

Patrón Assembler• Es el encargado de “ensamblar” El API de FDS con nuestro DAO: fill (Assembler) getUsers (DAO)• La información entre las capas viaja a través de Vos (mapeo de POJOs)

Page 20: MadeInFlex Título de la Charla Autor Correo del Autor MIF Online I FDS2 en ejemplos Por Carlos Rovira carlos.rovira@gmail.com

Value Object (o DTO)

Representación de los datos en ambas capas (cliente y servidor):

package com.mif.fds {

[Managed][RemoteClass(alias="com.mif.fds.User")]public class User {

public var userId:String;public var name:String;public var email:String;public var country:String;

}}

*Implementa mx.data.IManaged*automáticamente [Bindable]

VO Equivalente en Java

Page 21: MadeInFlex Título de la Charla Autor Correo del Autor MIF Online I FDS2 en ejemplos Por Carlos Rovira carlos.rovira@gmail.com

Ejemplo FILL

• Declaración– <mx:DataService id="users_ds" destination="users“

result="graphOperations(event)"/>– <mx:ArrayCollection id="users_ac"/>

• Uso– import mx.rpc.AsyncToken;– private function getUsers():void {

var token:AsyncToken = users_ds.fill(users_ac);token.operation = "fill";

}

• Asociar comportamientos adicionales al Resultado:– private function graphOperations(event:ResultEvent):void {

if (event.token.operation == "fill") { …

Page 22: MadeInFlex Título de la Charla Autor Correo del Autor MIF Online I FDS2 en ejemplos Por Carlos Rovira carlos.rovira@gmail.com

Operaciones CRUD

• <sync-method><name>syncUsers</name></sync-method>• public List syncUsers(List changes) {

Iterator iterator = changes.iterator();ChangeObject co;while (iterator.hasNext()) {

co = (ChangeObject)iterator.next();if (co.isCreate()) {

co = createUser(co);} else if (co.isDelete()) {

deleteUser(co);} else if (co.isUpdate()) {

updateUser(co);}

}return changes;

}

Page 23: MadeInFlex Título de la Charla Autor Correo del Autor MIF Online I FDS2 en ejemplos Por Carlos Rovira carlos.rovira@gmail.com

• Añadir y Borrar datos• Editar

– <mx:DataGrid dataProvider="{users_ac}

… editable="true“

• autoCommit=“false”• TraceTarget

– <mx:TraceTarget />– Muestra el contenido de los mensajes cuando

depuramos.

Page 24: MadeInFlex Título de la Charla Autor Correo del Autor MIF Online I FDS2 en ejemplos Por Carlos Rovira carlos.rovira@gmail.com

Características Avanzadas

• Paginación: Podemos configurar el tamaño del conjunto de datos que pidamos, de forma que FDMS se encarga de enviar automáticamente la porción de datos apropiada en cada momento según operemos con los componentes en cliente.– <paging enabled=“true" pageSize=“20" />

• Resolución de conflictos: Estos se generan cuando dos o mas usuarios están editando los mismos datos simultáneamente. FDMS nos permite decidir que hacer en estas situaciones. (DataConflictEvent)

• Relación de datos anidados: Es decir la gestión automática de relaciones "1 a 1", "1 a muchos" y "muchos a muchos". Configurado dentro del destination en <metadata>

Page 25: MadeInFlex Título de la Charla Autor Correo del Autor MIF Online I FDS2 en ejemplos Por Carlos Rovira carlos.rovira@gmail.com

FIN

Carlos Rovira

http://www.madeinflex.com

http://www.carlosrovira.com

[email protected]