04.02.08
Crear proyectos con Flex Builder 3 y BlazeDS
El pasado día 1 de Febrero, Adobe sacó la primera release de BlazeDS. Sin duda una gran noticia para la comunidad de programadores Flex, ya que por fín hay una versión estable de la versión OpenSource de FlexDataService. Hasta el momento no había tenido el momento de probar BlazeDS, ya que cuando intentaba crear un nuevo proyecto en mi Flex Builder indicándole como archivo Flex.war el archivo BlazeDS.war, o bien no me dejaba crear el proyecto, o bien me dejaba crearlo, pero luego a la hora de ejecutarlo no arrancaba el tomcat (dependiendo la beta del flex builder y de la versión de eclipse). Con la aparición de la mencionada versión release, pensé que esto estaría solucionado, y que se podría integrar BlazeDS en la creación de un nuevo proyecto sin problema, pero siguen apareciendo los mismos problemas.
Entonces, ¿qué hay que hacer para integrar BlazeDS con un proyecto desde el Flex Builder? Pues yo tras mucho trastear he encontrado una posible solución. Seguramente habrá otras soluciones mas sencillas, o incluso alguna otra manera de integrar BlazeDS en la misma creación del proyecto, pero la solución que me he ingeniado es la siguiente:
1: Desde el Flex Builder 3, nos vamos a File -> New -> Project, y seleccionamos un FlexProject y pulsamos Siguiente. En el siguiente paso, daremos nombre al proyecto, y le indicaremos que queremos un servidor con soporte J2EE. Además seleccionaremos la opción de utilizar Live Cycle DataService:
2: En el siguiente paso, en el momento en el que se nos pide indicar la localización del fichero flex.war, haremos referencia al fichero flex.war que nos viene con la instalación de LCDS
3: En el último paso de creación, a la hora de indicar el nombre de la aplicación principal, el nombre del directorio con el codigo fuente, etc., nos iremos a la pestaña de Library Path, y procederemos a eliminar la librería fds.swc, que se nos ha añadido al seleccionar el flex.war en el paso anterior. Al eliminarla, el icono de librería con texto Flex 3(Beta 3) se pondrá con un aspa roja indicando error. Ignoraremos eso y pulsaremos sobre Finish.
4: Una vez se nos ha creado el proyecto, nos vamos al panel izquierdo con la estructura del proyecto, y desplegamos el contenido del directorio WebContent -> WEB-INF, y eliminaremos por completo el contenido de las carpetas lib y flex, dejándolo con un aspecto así:
5: Ahora nos iremos a las propiedades del proyecto y seleccionaremos las opciones de Flex Server. Una vez se nos muestren las opciones pulsaremos sobre el botón Deploy Flex WAR. Aparecerá una ventana de búsqueda, desde la cual seleccionaremos el fichero blazeds.war, de nuestro directorio que contiene la instalación de BlazeDS. Una vez seleccionado pulsaremos OK a todo.
6: Al pulsar sobre OK para cerrar las opciones, se recompilará nuestro proyecto y las carpetas flex y lib que habíamos vaciado anteriormente se habrán regenerado con nuevos contenidos.
7: Finalmente el último paso es modificar el fichero web.xml para que ya no haga referencia a servlets que ya no se van a utilizar. Únicamente nos quedaremos con el tag servlet que hace referencia a la clase MessageBrokerServlet, y con el tag servlet-mapping del servlet anterior. El resto de tags servlet y servlet-mapping los eliminaremos, dejando el fichero web.xml tal que así:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <web-app> <display-name>MessagingBlaze</display-name> <description>LiveCycle Data Services Application</description> <!-- MessageBroker Servlet --> <servlet> <servlet-name>MessageBrokerServlet</servlet-name> <display-name>MessageBrokerServlet</display-name> <servlet-class>flex.messaging.MessageBrokerServlet</servlet-class> <init-param> <param-name>services.configuration.file</param-name> <param-value>/WEB-INF/flex/services-config.xml</param-value> </init-param> <init-param> <param-name>flex.write.path</param-name> <param-value>/WEB-INF/flex</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>MessageBrokerServlet</servlet-name> <url-pattern>/messagebroker/*</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app> |
A partir de aquí el resto ya es cosa vuestra. Si alguien conoce una manera mejor de integrar BlazeDS en un proyecto con el Flex Builder 3 estaría agradecido de que me la comentara. Espero ser de ayuda.
Un saludo!
hermany said,
18.02.08 at 17:15
Muy buen tutorial, quisiera hacerte una consulta fuera del tema, quisiera saber si con Adobe Air puedo llamar a una pagina web, que se yo como facebook y que lo haga como programa desktop, o solo lo puedo usar para capturar datos.
Gracias saludos.
irl said,
22.02.08 at 9:12
Hola. Estoy intentnado crear un proyecto j2ee con flex para empezar a probar cositas. He seguido tu tutorial y todo perfecto. Pero no se como configurarlo para que me salga en project deployments y le pueda asignar el tomcat para que me haga el despliegue…como se hace en un j2ee normal. Es posible hacerlo?¿? O cual es la forma correcta? gracias!
crash said,
22.02.08 at 12:24
Hola, yo tengo el mismo problema. He intentado crear un proyecto j2ee para flex y no me parece en el combo de project deployments. Alguna solución??
Un Saludo y gracias.
admin said,
23.02.08 at 12:09
Hola a todos. Yo he realizado este procedimiento utilizando eclipse 3.2.2 y la beta 3 del Flex Builder 3. Si el problema es que en el primer paso no os aparece la opción de j2ee en el combo de Application Server Type, pues no tengo ni idea de como añadirlo. A mi me sale por defecto (junto con PHP, etc.).
Para hacerlo funcionar en el tomcat, dentro del eclipse en View -> Show View -> Other, buscais la vista de servidores. Una vez la tengáis visible en la parte de abajo, le dais a new -> server y os aparecerá el wizard para configuraros un servidor externo. Yo en mis pruebas utilizo un tomcat 5.5.25.
Si os quedan más dudas me envias un mail a antonio.serrano.guerrero@gmail.com concretándome más vuestro caso.
Un saludo!
Pedro Varela said,
07.05.08 at 17:12
Hola, yo tengo un problema peor que ese.. ni siquiera me aparece la opción de Create combined Flex/Java…….. y el botón de Deploy War está siempre desactivado.. Por cierto, yo tengo es el stand alone, no el plugin de eclipse instalado.
Fernando Wermus said,
07.08.08 at 21:19
En el paso 3, le pasas el flex.war. Supongo que el objetivo es que del archivo war obtenga librerias java, etc para asociarlas al proyecto. Luego borras los elementos asociados y le pasas el blazeds.war. Para lo mismo, por que no pasarle directamente el blazeds.war y tener todo generado. Esto funciona? por que no lo resolviste asi?
Laura said,
23.09.09 at 10:05
Holaaa!!!
Acabo de iniciarme en el flex y queria usar el blazeDs , con flex 3,y mi pregunta es:
¿La única solucion es usar el eclipse 3.3 con el plugin flex builder? Es que he leido que con el plugin flex builder solo funciona la version 3.2 y 3.3 de eclipse?? No hay ningún otro plugin de flex para la version de eclipse Ganymede???
QUe de preguntas, eh??jajjaja
Muchas gracias por adelantado.
Pedro Varela said,
23.09.09 at 14:53
HOla Laura, no vale.. hasta los momentos yo no he tenido problemas en instalar FB3 en ningún eclipse.. de todas maneras, una vez te lo hayas descargado e instalado, revisa en el menu Help -> Check for flex builder updates, y el hace solito el trabajo.. Asi que tranquila.
acnesiac said,
24.11.09 at 20:20
Hola mira tengo un problema al definir dos dataservices con el mismo destination, al cambier la lista asociada al primero, es cambiada la propiedad commitRequired del segundo, es decir:
dataservices destination cambio a la lista commitReq
dsOne foo si si
dsTwo foo no si
existe alguna fomra de evitarlo?
Pedro Varela said,
24.11.09 at 20:28
Hola acne..
Bueno mira, primero que nada por que vas a tender dos servicios con el mismo destino?? Los id deberían ser diferentes, para cada servicio, y si quieres usar operaciones en el mismo servicio solamente llama las operaciones y ya.
com.blazeds.services.dsOne
com.blazeds.services.dsTwo
La verdad no entendí muy bien tu pregunta, pero no se para que quieres tener dos servicios con el mismo destino.
admin said,
24.11.09 at 21:25
Hola a todos.
Yo alguna vez sí que he utilizado dos RemoteObjects con el mismo destination. No pasa nada por eso. Lo único que yo para lo único que lo he usado ha sido si he querido que a la hora de obtener respuesta haga una cosa u otra. Si por ejemplo llamas a un método de un destination y quieres que en el resultado muestre un Alert y llamando a otro método distinto del mismo destination haga otra operación, no me parece mal la solución de poner dos RemoteObjects que apuntan al mismo destination.
Lo que todavía no entiendo es la duda de acnesiac. ¿Podrías explicarlo un poco mas claro?
Un saludo!
acnesiac said,
25.11.09 at 0:22
Que tal gracias por estar interesados en mi pregunta, para ser mas claros pongo un poco de codigo:
PASO 1
Este es el destination del ejemplo crm que viene en LCDS ok.
y yo coloco un boton asi habilitandose en el cambio del flag commitRequired:
PASO 2
si yo coloco otro DS con el mismo destination:
y otro boton que este al pendiente del flag commitRequired de este segundo DS
PASO 3
hago una modificacion en el modelo de la lista asociada al primer DS,
La pregunta es porque el flag del DS segundo dsCompanyTwo.commitRequired tambien se prende, porque no solo el primero?
La idea era utilizar la libreria MDI que permite tener varios paneles abiertos al mismo tiempo y poder dar de alta en una, o modificar algun elemento en otra, pero con este comportamiento solo se puede hacer o la una o la otra, pensaba que si se tenian varias instancias de un DS, cada una guardaria su estado pero al parecer no es asi.
saludos
Pedro Varela said,
25.11.09 at 16:13
Hola acne, de verdad sigo sin entender, parece que tus dos servicios responden al mismo tiempo, insisto, creo que es por que tienes el mismo destination.. no se cómo estas haciendo el manejo de los DS, y tampoco he usado los metododos de fill, y el commitRequired que tu dices, por lo general mis llamadas a los DS son service.operación.send y utilizo siempre AsyncTokens, para controlar la llamada, te recomiendo que te leas sobre éste tema a ver si te funciona http://kuwamoto.org/2006/05/16/dealing-with-asynchronous-events-part-1/, si quieres manda el link del tutorial que estás haciendo, flex es un framework muuuuyyy grande, y hay muchas maneras de hacer las cosas, no todo siempre se puedes saber
acnesiac said,
25.11.09 at 16:34
Que tal , si mira me he encontrado con una pregunta similar dentro del foro de discusion de Adobe con el mensaje :
http://forums.adobe.com/message/176977#176977
se trata de que dos dataservices tambien apuntan al mismo destination.