Para el intercambio de objetos entre servicios Java en un servidor y aplicaciones Flex, se requiere que las clases de intercambio de datos estén escritas tanto en el lenguaje Java como en Action Script (as3).
Gas3 es un generador de código que genera clases as3 (para Flex) a partir de clases Java, automatizando la tarea de duplicación de clases entre ambos lenguajes. En este artículo vamos a ver un pequeño ejemplo de uso de Gas3.
Uso del generador de código Gas3
Utilizaremos la tarea ant del generador para crear las clases as3 a partir de clases Java. Para ello debemos tener instalado ant en el equipo en que se ejecute (descargar los jars de gas3) que bajanos de la página de graniteDS.
En el directorio /lib/gas3 copiaremos los siguientes jars contenidos en el archivo descargado:
- gas3.jar
- granite-generator.jar
- groovy-1.5.6.jar
- ejb3-persistence.jar
- asm-2.2.jar
- antlr-2.7.6.jar
Asumimos que tenemos un proyecto mixto Flex/Java, con la siguiente distribución de carpetas:
proyectoFlexJava /flex_src (fuentes flex) /src (fuentes java) /gas3Demo (contenido web) /WEB-INF /META-INF /lib/gas3 (jars de gas3)
Luego crearemos en la raíz del proyecto un archivo de construcción de ant, build.xml con la configuración de la tarea que vamos a ejecutar:
<project name="gas3Demo" default="generate.as3" basedir="."> <taskdef name="gas3" classname="org.granite.generator.ant.AntJavaAs3Task" classpath="lib/gas3/gas3.jar:lib/gas3/granite-generator.jar: lib/gas3/groovy-1.5.6.jar:lib/gas3/ejb3-persistence.jar: lib/gas3/asm-2.2.jar:lib/gas3/antlr-2.7.6.jar"> </taskdef> <target name="generate.as3"> <gas3 outputdir="flex_src"> <classpath> <pathelement location="gas3Demo/WEB-INF/classes"/> </classpath> <fileset dir="gas3Demo/WEB-INF/classes"> <include name="com/**/dto/*.class"/> </fileset> </gas3> </target> </project>
Con esta configuración le estamos indicando a la tarea ant de gas3 que genere clases equivalentes en action script a todas las clases java que se encuentren en paquetes llamados dto y que los genere en la carpeta flex_src, por defecto bajo el mismo nombre de clase y paquete.
Notar que configuramos el classpath de la tarea con todos los jars descargados y copiados en la carpeta /lib/gas3, deben estar todos para que funcione correctamente.
Ejecución
Para ejecutar la tarea ejecutamos en una consola, parados en el directorio del proyecto, el comando ant generate.as3
Para cada clase en los paquetes dto, digamos <nombreclasedto> se generará una clase as3 con el nombre <nombreclasedtobase> y una clase <nombreclasedto>. Esta es la manera en que trabaja gas3.
Nota: La clase "Base" se genera como implementación de la interfaz IExternalizable. Esto puede generar un conflicto con el intercambio de objetos con un servidor Java; se soluciona simplemente quitando la declaración de la implementación de la interfaz de la clase Base generada.
Más variantes de configuración pueden verse en la documentación del proyecto.