Usando Data Centric Development (DCD) en proyectos Flex/Java con WTP



La instalación de Flash Builder 4 plug-in incluye el paquete Ganymede de Eclipse, pero podemos optar por instalarlo sobre una distribución de eclipse alternativa (y mas reciente), como el paquete Galileo del Eclipse IDE for Java EE Developers, el cual incluye Web Tools Platform (http://www.eclipse.org/home/categories/index.php?category=enterprise).

Introducción

Instalar Flash Builder 4 como plug-in del paquete Galileo nos permite crear proyectos Flex y Java combinados, esto es, en un mismo proyecto tendremos el código fuente de la capa de presentación (Flex) y de la capa de negocios (Java), sin necesidad de dos proyectos por separado.

El problema

Al parecer existe un bug en la creación de un proyecto Flex/Java en cuanto al uso de las macros web.context y web.content que provoca que la los parámetros “serverContextRoot” y “serverRootURL” no tomen los valores adecuados y que funcionalidad DCD no funcione.

Al crear un proyecto Flex aparece la opción de crear un proyecto combinado Flex/Java

Creación de proyecto Flex/Java con WTP

Creación de proyecto Flex/Java con WTP


Al seleccionar la opción y oprimir “Next” pasamos a configurar el servidor J2EE. Si es la primera vez que creamos un proyecto de este tipo en el Workspace, debemos definir un nuevo servidor oprimiendo “New” y seguir los pasos del asistente. En caso contrario seleccionamos un servidor existente.

El valor del campo “Content Folder” (donde se almacenará la aplicación a desplegar luego en Tomcat) por defecto es “WebContent”, dejaremos este valor y luego veremos el efecto que trae. Debemos también indicar el lugar donde se encuentra el archivo “blazeds.war”, en este caso usamos el que viene en el paquete “blazeds-bin-4.0.0.14931.zip” (https://www.adobe.com/cfusion/entitlement/index.cfm?e=lc_blazeds). Oprimimos “Next” y luego “Finish”. Terminaremos con un proyecto con una estructura como esta:

Estructura de un proyecto Flex/Java

Estructura de un proyecto Flex/Java


Notemos que la carpeta “WebContent” tiene la estructura de una aplicación J2EE, como la que se despliega en Tomcat. Intentemos ahora utilizar la funcionalidad de DCD en este proyecto. Lo que haremos será crear una clase Java con un método público y la expondremos como destino remoto, configuraremos el servlet RDSDispatchServlet (encargado de descubrir las clases expuestas como destinos remotos y los métodos que éstas contienen) y veremos si Flash Builder 4 es capaz de encontrarlo.

La clase Java puede ser una como ésta:

[java]
package com.flexwtp.service;

public class FlexWTPService {

public String[] getAll(){
return new String[]{“Uno”,”Dos”,”Tres”};
}
}
[/java]

Para hacerla disponible como destino remoto añadimos al archivo WebContent/WEB-INF/flex/remoting-config.xml lo siguiente:

[xml]
com.flexwtp.service.FlexWTPService
[/xml]

Finalmente para configurar el RDSDispatchServlet añadimos lo siguiente al archivo WebContent/WEB-INF/web.xml

[xml]

RDSDispatchServlet
RDSDispatchServlet
flex.rds.server.servlet.FrontEndServlet
useAppserverSecurity false
10


RDSDispatchServlet
/CFIDE/main/ide.cfm

[/xml]

Compilamos el proyecto y desplegamos la aplicación (el contenido de WebContent) en Tomcat (el que tenemos en el WorkSpace u otro externo) y cuando en la vista “Data/Services” de la perspectiva “Flash Development” tratamos de conectarnos a un servicio/datos de tipo BlazeDS sin usar autenticación:

Conexión a un servicio/dato de tipo BlazeDS

Conexión a un servicio/dato de tipo BlazeDS

Obtenemos el siguiente error:

Error en la conexión al servlet  RDSDispatchServlet

Error en la conexión al servlet RDSDispatchServlet

Luego de verificar que lo que se indica en los puntos 1, 2 y 3 está correcto sólo nos queda verificar la configuración del proyecto.
La configuración del servidor para el proyecto según como se definió en la creación del mismo queda de la siguiente manera:

Propiedades del proyecto Flex/Java

Propiedades del proyecto Flex/Java

Pero al examinar el contenido del archivo “.flexProperties” que se encuentra en la raíz del proyecto notamos que el parámetro “serverContextRoot” está definido cómo


serverContextRoot="/WebContent"

Sin embargo el parámetro “serverRootURL” tiene el valor:


serverRootURL="http://localhost:8080/FlexWTPProject"

De esa manera el servlet “RDSDispatchServlet” no podrá encontrar la clase que hemos definido como destino remoto, el parámetro “serverContextRoot” debe contener el nombre de la aplicación desplegada en Tomcat, en este caso “FlexWTPProject” (la última parte del url, sin el slash final).

Cuando se crea el proyecto, “serverContextRoot” toma el valor del campo “Content Folder”, y no hay modo de cambiar su valor luego en las propiedades del proyecto. Se pudiera modificar manualmente en el archivo “.flexProperties”, pero éste se genera nuevamente cuando se modifica alguna propiedad del proyecto y se perderían los cambios.

La solución

La solución es asignar al campo “Content Folder”, durante la creación del proyecto, el valor del nombre del proyecto, que a su vez forma parte del parámetro “serverRootURL”.

Configuración del servidor JEE en un proyecto Flex/Java

Configuración del servidor JEE en un proyecto Flex/Java

De esta manera, una vez desplegada la aplicación, cuando intentemos conectarnos a un servicio/dato a través de la vista “Data/Services” obtendremos lo siguiente:

Resultado de la conexión a un servicio/dato de tipo BlazeDS

Resultado de la conexión a un servicio/dato de tipo BlazeDS

Lo cual nos indica que el servlet “RDSDispatchServlet” ha encontrado la clase java que hemos definido como destino remoto. Seleccionamos el destino, indicamos el nombre de los paquetes y al oprimir “Finish” el asistente generará el código correspondiente (en este ejemplo en particular no se genera ningún valueObject ya que el tipo de dato de retorno del método es String, el cual es soportado nativamente por ActionScript).

Código generado por el asistente.

Código generado por el asistente.


Vista Data/Services luego de la generación de código

Vista Data/Services luego de la generación de código

La opción de nombrar al proyecto “WebContent” y aceptar el valor inicial propuesto para el campo “Content Folder” ni siquiera se contempla, por razones obvias 😉

Conclusiones

Siguiendo los pasos que hemos explicado en este artículo podremos crear proyectos Flex/Java con WTP y explotar la funcionalidad del Data Centric Development introducido en Flash Builder 4, la cual representa sin dudas un gran paso hacia el objetivo de lograr un entorno de trabajo altamente productivo para el desarrollo de RIA con Adobe Flex y Java.

3 Comentarios

  1. Pingback: MadeInFlex » Blog Archive » Usando Data Centric Development (DCD … « Blog de Flash

  2. Pingback: de la red – 30/05/2010 « Tecnologías y su contexto

  3. Pingback: Tweets that mention MadeInFlex » Blog Archive » Usando Data Centric Development (DCD) en proyectos Flex/Java con WTP -- Topsy.com

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Acerca de Made In Flex

Made In Flex es una comunidad de desarrolladores de Apache Flex creada en 2006.

Apache Flex, anteriormente conocido como Adobe Flex, es un SDK (kit de desarrollo de software) para crear aplicaciones enriquecidas - multiplataforma basadas en Adobe Flash donado por Adobe a la fundación Apache in 2011 y promocionado a proyecto de primer nivel en Diciembre de 2012.

Actualmente estamos cambiando muchos aspectos del sitio web para ofrecer un sitio útil para toda la comunidad que tenga en cuenta las necesidades actuales.

Últimas Fotos

Instalador de Apache Flex

Entrar o Registrase