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
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:
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:
Para hacerla disponible como destino remoto añadimos al archivo WebContent/WEB-INF/flex/remoting-config.xml lo siguiente:
-
<destination id="FlexWTPService">
-
<properties>
-
<source>com.flexwtp.service.FlexWTPService</source>
-
</properties>
-
</destination>
Finalmente para configurar el RDSDispatchServlet añadimos lo siguiente al archivo WebContent/WEB-INF/web.xml
-
<servlet>
-
<servlet-name>RDSDispatchServlet</servlet-name>
-
<display-name>RDSDispatchServlet</display-name>
-
<servlet-class>flex.rds.server.servlet.FrontEndServlet</servlet-class>
-
<init-param>
-
<param-name>useAppserverSecurity</param-name>
-
<param-value>false</param-value>
-
</init-param>
-
<load-on-startup>10</load-on-startup>
-
</servlet>
-
-
<servlet-mapping id="RDS_DISPATCH_MAPPING">
-
<servlet-name>RDSDispatchServlet</servlet-name>
-
<url-pattern>/CFIDE/main/ide.cfm</url-pattern>
-
</servlet-mapping>
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:
Obtenemos el siguiente error:
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:
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”.
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:
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).
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.
Acerca de esta entrada
Usted está leyendo “Usando Data Centric Development (DCD) en proyectos Flex/Java con WTP,” una entrada de MadeInFlex
- Autor: Nono F. Carballo Escalona
- Publicada:
- 30.05.10 / 2pm
- Categorías:
- Artículos, Tutoriales
- Entradas relacionadas:
- Clear Toolkit para el desarrollo de aplicaciones Flex
- Disponible Adobe LiveCycle Data Services 2.5
- Nuevos proyectos Flex en Adobe Labs
- LiveCycle Data Services 2.5.1
- Número de visitas:
- 3109









3 Comentarios
Ir al formulario de comentarios | rss (comentarios) [?] | trackback url [?]