<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.3.2" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title></title>
	<link>http://www.antonioserrano.es/blog</link>
	<description></description>
	<pubDate>Sun, 09 Nov 2008 22:11:07 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.2</generator>
	<language>en</language>
			<item>
		<title>Masterd lanza su nuevo blog de profesionales</title>
		<link>http://www.antonioserrano.es/blog/masterd-lanza-su-nuevo-blog-de-profesionales/</link>
		<comments>http://www.antonioserrano.es/blog/masterd-lanza-su-nuevo-blog-de-profesionales/#comments</comments>
		<pubDate>Sun, 09 Nov 2008 22:11:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.antonioserrano.es/blog/masterd-lanza-su-nuevo-blog-de-profesionales/</guid>
		<description><![CDATA[Hola a todos. Para todos aquellos que no me conozcan, trabajo una empresa llamada masterd como programador Flex. Recientemente hemos lanzado un blog entre todo el área de tecnología de la empresa. Dentro de él no sólo se tratarán temas sobre Flex, sino que además se posteará sobre programación en Java, Oracle, posicionamiento web, CSS, [...]]]></description>
			<content:encoded><![CDATA[<p>Hola a todos. Para todos aquellos que no me conozcan, trabajo una empresa llamada <a href="http://www.masterd.es" target="_blank">masterd</a> como programador Flex. Recientemente hemos lanzado un blog entre todo el área de tecnología de la empresa. Dentro de él no sólo se tratarán temas sobre Flex, sino que además se posteará sobre programación en Java, Oracle, posicionamiento web, CSS, etc.</p>
<p>Yo he sido el encargado de estrenar el blog, por lo que todavía está un poco vacío, pero día a día vamos a ir comentando un montón de temas interesantes. Tanto es así que he creído conveniente hacer una referencia a dicho blog porque creo que es un feed al que todos deberíamos de estar suscrito :). Sin más rodeos aquí dejo el link <a href="http://www.masterdlabs.es" target="_blank">http://www.masterdlabs.es</a>.</p>
<p>Espero que os guste <img src='http://www.antonioserrano.es/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Saludos!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.antonioserrano.es/blog/masterd-lanza-su-nuevo-blog-de-profesionales/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Barras de descargas de aplicacion en Flex (preloaders)</title>
		<link>http://www.antonioserrano.es/blog/barras-de-descargas-de-aplicacion-en-flex-preloaders/</link>
		<comments>http://www.antonioserrano.es/blog/barras-de-descargas-de-aplicacion-en-flex-preloaders/#comments</comments>
		<pubDate>Sun, 02 Nov 2008 15:02:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[flex]]></category>

		<category><![CDATA[custom]]></category>

		<category><![CDATA[custom preloader]]></category>

		<category><![CDATA[preloader]]></category>

		<guid isPermaLink="false">http://www.antonioserrano.es/blog/barras-de-descargas-de-aplicacion-en-flex-preloaders/</guid>
		<description><![CDATA[Una de las cosas que hacen que nuestra aplicación tenga un toque más de profesional, es el utilizar un preloader propio personalizado. Buscando documentación sobre este tema me he encontrado con varias formas de conseguir esto. De todas ellas me he quedado con la siguente opción, la cual se divide en dos pasos:
1.- Crear una clase que [...]]]></description>
			<content:encoded><![CDATA[<p>Una de las cosas que hacen que nuestra aplicación tenga un toque más de profesional, es el utilizar un preloader propio personalizado. Buscando documentación sobre este tema me he encontrado con varias formas de conseguir esto. De todas ellas me he quedado con la siguente opción, la cual se divide en dos pasos:</p>
<p>1.- Crear una clase que extienda de la clase Loader en la cual nos declaramos un bitmap que puede estar formado por cualquier tipo de imagen (una forma poligonal que nos ofrece la API de Flex, un logo, una combinación de ambos, etc., etc.) Dentro de esta clase trataremos de representar el progreso de descarga como queramos (dibujando un rectángulo, haciendo que un logo se vaya iluminando de izquierda a derecha, &#8230;) esto ya queda en la imaginación de cada uno</p>
<p>2.- Crear otra clase que extienda de la clase DownloadProgressBar, dentro de la cual monitorizaremos todos los eventos de carga de la aplicación (inicialización, progreso, error, finalización, etc.) y a través de la información que nos proporcionan dichos eventos, representaremos la información de la carga en la clase del punto anterior. Una vez creadas ambas clases, en la propiedad preloader de nuestra aplicación principal, especificaremos la clase que hemos creado en este segundo paso para indicarle a la aplicación que este va a ser nuestro preloader.</p>
<p>Como todo esto se ve mucho mejor con código, podéis <a target="_blank" href="http://www.antonioserrano.es/samples/preloaderSample/PreloaderSample.zip">descargaros este ejemplo </a>de lo que acabo de contar. Al ejecutar la aplicación da un error. Este error está puesto a posta para que se pueda ver la barra de progreso personalizada. <a target="_blank" href="http://www.antonioserrano.es/samples/preloaderSample/PreloaderSample.html">Podéis ver el ejemplo aquí.</a></p>
<p> Saludos!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.antonioserrano.es/blog/barras-de-descargas-de-aplicacion-en-flex-preloaders/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Minimizar una aplicacion AIR al area de notificacion (systemtray) de windows</title>
		<link>http://www.antonioserrano.es/blog/minimizar-una-aplicacion-air-al-area-de-notificacion-systemtray-de-windows/</link>
		<comments>http://www.antonioserrano.es/blog/minimizar-una-aplicacion-air-al-area-de-notificacion-systemtray-de-windows/#comments</comments>
		<pubDate>Thu, 14 Aug 2008 12:54:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[air]]></category>

		<category><![CDATA[area de notificacion]]></category>

		<category><![CDATA[systemtray]]></category>

		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.antonioserrano.es/blog/minimizar-una-aplicacion-air-al-area-de-notificacion-systemtray-de-windows/</guid>
		<description><![CDATA[Una de las funcionalidades que nos ofrece Adobe a la hora de desarrollar una aplicación AIR, que nos puede resultar muy útil, es la de poder añadir un icono al área de notificación de windows (o system tray) y añadirle un menú contextual. Esto se consigue añadiendo el siguiente código cuando inicializamos la aplicación:
Primero habrá [...]]]></description>
			<content:encoded><![CDATA[<p>Una de las funcionalidades que nos ofrece Adobe a la hora de desarrollar una aplicación AIR, que nos puede resultar muy útil, es la de poder añadir un icono al área de notificación de windows (o system tray) y añadirle un menú contextual. Esto se consigue añadiendo el siguiente código cuando inicializamos la aplicación:</p>
<p>Primero habrá que cargar la imagen que queremos que sea nuestro icono en el área de notificación. Para ello utilizaremos la clase Loader. Además monitorizaremos el evento que queremos que sea el que haga aparecer el icono en el área (En el ejemplo se captura el evento de minimizar la ventana). Para ello escribiremos:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
</pre></td><td class="code"><pre class="actionscript"><span style="color: #66cc66;">&#91;</span>Bindable<span style="color: #66cc66;">&#93;</span> 
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> iconoMinimizado:BitmapData; 
&nbsp;
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> creationComplete<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><span style="color: #66cc66;">&#123;</span> 
    <span style="color: #808080; font-style: italic;">//Cargamos el icono de la bandeja de notificacion y monitorizamos el evento de minimizar </span>
    <span style="color: #000000; font-weight: bold;">var</span> loader:Loader = <span style="color: #000000; font-weight: bold;">new</span> Loader<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; 
    loader.<span style="color: #006600;">contentLoaderInfo</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">COMPLETE</span>, inicializarSystray<span style="color: #66cc66;">&#41;</span>; 
    loader.<span style="color: #0066CC;">load</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> URLRequest<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;assets/icon.png&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>; 
    <span style="color: #0066CC;">this</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>NativeWindowDisplayStateEvent.<span style="color: #006600;">DISPLAY_STATE_CHANGE</span>, stateChanging<span style="color: #66cc66;">&#41;</span>; 
<span style="color: #66cc66;">&#125;</span> 
&nbsp;
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> stateChanging<span style="color: #66cc66;">&#40;</span>event:NativeWindowDisplayStateEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><span style="color: #66cc66;">&#123;</span> 
    event.<span style="color: #006600;">preventDefault</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; 
    <span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>event.<span style="color: #006600;">afterDisplayState</span> == NativeWindowDisplayState.<span style="color: #006600;">MINIMIZED</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span> 
        <span style="color: #808080; font-style: italic;">//Ocultamos la aplicacion y mostramos el icono del systray </span>
        <span style="color: #0066CC;">stage</span>.<span style="color: #006600;">nativeWindow</span>.<span style="color: #0066CC;">visible</span> = <span style="color: #000000; font-weight: bold;">false</span> 
        NativeApplication.<span style="color: #006600;">nativeApplication</span>.<span style="color: #006600;">icon</span>.<span style="color: #006600;">bitmaps</span> = <span style="color: #66cc66;">&#91;</span>iconoMinimizado<span style="color: #66cc66;">&#93;</span>; 
    <span style="color: #66cc66;">&#125;</span> 
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>En la función que hemos indicado que queremos que sea la que se ejecute cuando se cargue la imagen (inicializarSystray), inicializaremos el menú del icono, el evento click sobre él (en nuestro caso será para restaurar la aplicación) y el tooltip que se mostrará.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
</pre></td><td class="code"><pre class="actionscript"><span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> inicializarSystray<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span> 
    iconoMinimizado = event.<span style="color: #0066CC;">target</span>.<span style="color: #006600;">content</span>.<span style="color: #006600;">bitmapData</span>; 
    <span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>NativeApplication.<span style="color: #006600;">supportsSystemTrayIcon</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span> 
        SystemTrayIcon<span style="color: #66cc66;">&#40;</span>NativeApplication.<span style="color: #006600;">nativeApplication</span>.<span style="color: #006600;">icon</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">tooltip</span> = <span style="color: #ff0000;">&quot;Ejemplo de Systray&quot;</span>; 
        SystemTrayIcon<span style="color: #66cc66;">&#40;</span>NativeApplication.<span style="color: #006600;">nativeApplication</span>.<span style="color: #006600;">icon</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">CLICK</span>, restaurarAplicacion<span style="color: #66cc66;">&#41;</span>; 
&nbsp;
        <span style="color: #808080; font-style: italic;">//Creamos su menu y lo añadimos </span>
        <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">menu</span>:NativeMenu = <span style="color: #000000; font-weight: bold;">new</span> NativeMenu<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; 
        <span style="color: #000000; font-weight: bold;">var</span> restaurarNativeMenuItem:NativeMenuItem = <span style="color: #000000; font-weight: bold;">new</span> NativeMenuItem<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Restaurar&quot;</span><span style="color: #66cc66;">&#41;</span>; 
        <span style="color: #000000; font-weight: bold;">var</span> maximizarNativeMenuItem:NativeMenuItem = <span style="color: #000000; font-weight: bold;">new</span> NativeMenuItem<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Maximizar&quot;</span><span style="color: #66cc66;">&#41;</span>; 
        <span style="color: #000000; font-weight: bold;">var</span> salirNativeMenuItem:NativeMenuItem = <span style="color: #000000; font-weight: bold;">new</span> NativeMenuItem<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Salir&quot;</span><span style="color: #66cc66;">&#41;</span>; 
&nbsp;
        <span style="color: #808080; font-style: italic;">//Manejador de cada uno de los items del menu </span>
        restaurarNativeMenuItem.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">SELECT</span>, restaurarAplicacion<span style="color: #66cc66;">&#41;</span>; 
        maximizarNativeMenuItem.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">SELECT</span>, maximizarAplicacion<span style="color: #66cc66;">&#41;</span>; 
        salirNativeMenuItem.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">SELECT</span>, cerrarAplicacion<span style="color: #66cc66;">&#41;</span>; 
&nbsp;
        <span style="color: #808080; font-style: italic;">//Añadimos los menuitems al menu, y el menu al icono </span>
        <span style="color: #0066CC;">menu</span>.<span style="color: #006600;">addItem</span><span style="color: #66cc66;">&#40;</span>restaurarNativeMenuItem<span style="color: #66cc66;">&#41;</span>; 
        <span style="color: #0066CC;">menu</span>.<span style="color: #006600;">addItem</span><span style="color: #66cc66;">&#40;</span>maximizarNativeMenuItem<span style="color: #66cc66;">&#41;</span>; 
        <span style="color: #0066CC;">menu</span>.<span style="color: #006600;">addItem</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> NativeMenuItem<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;&quot;</span>,<span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">//Esto es un separador </span>
        <span style="color: #0066CC;">menu</span>.<span style="color: #006600;">addItem</span><span style="color: #66cc66;">&#40;</span>salirNativeMenuItem<span style="color: #66cc66;">&#41;</span>; 
        SystemTrayIcon<span style="color: #66cc66;">&#40;</span>NativeApplication.<span style="color: #006600;">nativeApplication</span>.<span style="color: #006600;">icon</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">menu</span> = <span style="color: #0066CC;">menu</span>; 
    <span style="color: #66cc66;">&#125;</span> 
<span style="color: #66cc66;">&#125;</span> 
&nbsp;
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> restaurarAplicacion<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span> 
    <span style="color: #808080; font-style: italic;">//Ponemos la aplicacion visible y la maximizamos </span>
    <span style="color: #0066CC;">stage</span>.<span style="color: #006600;">nativeWindow</span>.<span style="color: #0066CC;">visible</span> = <span style="color: #000000; font-weight: bold;">true</span>; 
    <span style="color: #0066CC;">stage</span>.<span style="color: #006600;">nativeWindow</span>.<span style="color: #006600;">restore</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; 
&nbsp;
    <span style="color: #808080; font-style: italic;">//Eliminamos el icono del systray </span>
    NativeApplication.<span style="color: #006600;">nativeApplication</span>.<span style="color: #006600;">icon</span>.<span style="color: #006600;">bitmaps</span> = <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span>; 
<span style="color: #66cc66;">&#125;</span> 
&nbsp;
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> maximizarAplicacion<span style="color: #66cc66;">&#40;</span>evt:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span> 
    <span style="color: #808080; font-style: italic;">//Ponemos la aplicacion visible y la maximizamos </span>
    <span style="color: #0066CC;">stage</span>.<span style="color: #006600;">nativeWindow</span>.<span style="color: #0066CC;">visible</span> = <span style="color: #000000; font-weight: bold;">true</span>; 
    <span style="color: #0066CC;">stage</span>.<span style="color: #006600;">nativeWindow</span>.<span style="color: #006600;">maximize</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; 
&nbsp;
    <span style="color: #808080; font-style: italic;">//Eliminamos el icono del systray </span>
    NativeApplication.<span style="color: #006600;">nativeApplication</span>.<span style="color: #006600;">icon</span>.<span style="color: #006600;">bitmaps</span> = <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span>; 
<span style="color: #66cc66;">&#125;</span> 
&nbsp;
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> cerrarAplicacion<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><span style="color: #66cc66;">&#123;</span> 
    <span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">close</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; 
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>Con este código, cada vez que minimicemos la aplicación, en lugar de estar en la parte inferior, nos aparecerá un icono en el área de notificación y dándole un click normal, restauraremos la aplicación, y dándole un click con el botón derecho, nos aparecerá un menú de restaurar, maximizar o cerrar.</p>
<p>Para más comodidad os podéis <a target="_blank" href="http://www.antonioserrano.es/samples/SystemTraySample/SystemTraySample.zip">descargar el proyecto AIR con el código fuente</a> para verlo con más calma :). Espero que sirva de ayuda. Saludos!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.antonioserrano.es/blog/minimizar-una-aplicacion-air-al-area-de-notificacion-systemtray-de-windows/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Llamar a objetos remotos en cluster desde una aplicación flex</title>
		<link>http://www.antonioserrano.es/blog/llamar-a-objetos-remotos-en-cluster-desde-una-aplicacion-flex/</link>
		<comments>http://www.antonioserrano.es/blog/llamar-a-objetos-remotos-en-cluster-desde-una-aplicacion-flex/#comments</comments>
		<pubDate>Mon, 04 Aug 2008 08:29:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[flex]]></category>

		<category><![CDATA[cluster]]></category>

		<category><![CDATA[distributable]]></category>

		<category><![CDATA[tomcat]]></category>

		<guid isPermaLink="false">http://www.antonioserrano.es/blog/llamar-a-objetos-remotos-en-cluster-desde-una-aplicacion-flex/</guid>
		<description><![CDATA[Durante esta última semana en el trabajo, a petición de los de sistemas, nos hemos visto en la necesidad de poner todas las aplicaciones para que se puedan ejecutar en cluster. Como nuestros servidores son Java, con poner la etiqueta &#60;distributable /&#62; en el fichero web.xml, era suficiente. Una vez desplegadas las nuevas aplicaciones con [...]]]></description>
			<content:encoded><![CDATA[<p>Durante esta última semana en el trabajo, a petición de los de sistemas, nos hemos visto en la necesidad de poner todas las aplicaciones para que se puedan ejecutar en cluster. Como nuestros servidores son Java, con poner la etiqueta &lt;distributable /&gt; en el fichero web.xml, era suficiente. Una vez desplegadas las nuevas aplicaciones con dicha etiqueta, nos ponemos a probarlas y vemos que la parte web normal (struts2, etc.) funciona correctamente, pero a la hora de ejecutar una aplicación flex y llamar a un objeto remoto, este no se ejecuta bien, devolviéndonos una excepción enorme.</p>
<p>Tras dos días de plena investigación, encontré mucha documentación sobre BlazeDS acerca de unos tags &lt;cluster&gt;, unos ficheros jgroups-tcp.xml y jgroups-udp.xml, etc., etc. Tras probar todo esto, de todas las formas posibles, el error seguía manteniéndose y no había forma de hacer una llamada remota. Finalmente haciendo pruebas ya a la desesperada, probamos a marcar las clases Java que son llamadas como objeto remoto como <strong>Serializables</strong>.</p>
<p>Para nuestra sorpresa y alegría,  con esto ya se podían hacer llamadas remotas con la aplicación en el servidor ejecutándose en cluster, así que si alguna vez os veis en la necesidad de marcar una aplicación como &lt;distributable /&gt;, para que las llamadas funcionen sólo tenéis que marcar los RO como Serializables y todo funcionará con total normalidad.</p>
<p>¡Saludos! (PD: Creo que es el post más chorras que he escrito, pero os estoy ahorrando horas y horas de pruebas :D)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.antonioserrano.es/blog/llamar-a-objetos-remotos-en-cluster-desde-una-aplicacion-flex/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Trabajando con la API de Google Maps para Flex</title>
		<link>http://www.antonioserrano.es/blog/trabajando-con-la-api-de-google-maps-para-flex/</link>
		<comments>http://www.antonioserrano.es/blog/trabajando-con-la-api-de-google-maps-para-flex/#comments</comments>
		<pubDate>Fri, 11 Jul 2008 16:21:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[flex]]></category>

		<category><![CDATA[api]]></category>

		<category><![CDATA[google maps]]></category>

		<category><![CDATA[sdk]]></category>

		<guid isPermaLink="false">http://www.antonioserrano.es/blog/trabajando-con-la-api-de-google-maps-para-flex/</guid>
		<description><![CDATA[Hola a todos. Hace ya unas cuantas semanas, google lanzo su api para poder realizar aplicaciones flex que integren Google Maps. Como no he andado muy sobrado de tiempo, todavía no la había podido probar, pero recientemente me he animado y he estado probando alguna de sus funcionalidades. La verdad es que la documentación que [...]]]></description>
			<content:encoded><![CDATA[<p>Hola a todos. Hace ya unas cuantas semanas, google lanzo su <a href="http://code.google.com/apis/maps/" target="_blank">api para poder realizar aplicaciones flex que integren Google Maps</a>. Como no he andado muy sobrado de tiempo, todavía no la había podido probar, pero recientemente me he animado y he estado probando alguna de sus funcionalidades. La verdad es que la documentación que proporciona Google está bastante bien, proporcionándo una buena variedad de ejemplos para poder ver el código, creación de mapas paso a paso, etc. Así que animo a todo el mundo a que la utilice ya que su utilidad es grandísima.</p>
<p>El único problema que he tenido haciendo pruebas, es que me tope con <a href="http://code.google.com/p/gmaps-api-issues/issues/detail?id=341&amp;colspec=ID%20Type%20Status%20Priority%20Introduced%20Fixed%20Summary&amp;start=200" target="_blank">un bug reconocido por Google</a>. Este bug consiste en que cuando quieres codificar una dirección a un objeto de LatLng (latitud/longitud) para mostrarlo en el mapa, si codificas una misma dirección 2 veces, a la segunda vez te salta un error en la ejecución.  Este error, por suerte, se puede corregir si cada vez que hacemos una codificación con la instrucción <strong>Geocoder.geocode()</strong> colocamos inmediatamente antes la isntrucción <strong>Geocoder.resetCache()</strong>. Esto hace que antes de hacer una búsqueda limpiemos la caché de búsquedas, y así evitar el error antes comentado.</p>
<p>Por si alguien quiere ver un ejemplo de todo esto, me he picado <a href="http://www.antonioserrano.es/samples/GoogleMapsSample/GoogleMaps.html" target="_blank">este ejemplo de uso</a>. Si alguien se quiere descargar el código fuente, le puede dar con el botón derecho al programa y darle a download source, o descargarse directamente el <a href="http://www.antonioserrano.es/samples/GoogleMapsSample/GoogleMaps.zip" target="_blank">proyecto para Flex Builder 3</a>.</p>
<p>Saludos!!</p>
<p>(Nota: Hay veces que el ejemplo no carga bien el segundo mapa. Si esto pasa hay que recargar la página en el navegador una o dos veces. La verdad es que no sé porque ocurre esto, sólo pasa con el segundo mapa :S )</p>
]]></content:encoded>
			<wfw:commentRss>http://www.antonioserrano.es/blog/trabajando-con-la-api-de-google-maps-para-flex/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Realizar videoconferencias con Flex y Flash Media Server</title>
		<link>http://www.antonioserrano.es/blog/realizar-videoconferencias-con-flex-y-flash-media-server/</link>
		<comments>http://www.antonioserrano.es/blog/realizar-videoconferencias-con-flex-y-flash-media-server/#comments</comments>
		<pubDate>Sat, 21 Jun 2008 14:25:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[flex]]></category>

		<category><![CDATA[flash media server]]></category>

		<category><![CDATA[videoconferencia]]></category>

		<guid isPermaLink="false">http://www.antonioserrano.es/blog/realizar-videoconferencias-con-flex-y-flash-media-server/</guid>
		<description><![CDATA[Hola a todos. Tras tanto tiempo sin postear en el blog, he decidido hablar sobre cómo realizar una videoconferencia en una aplicación flex utilizando Flash Media Server. En primer lugar lo que haremos será descargarnos la última versión del Flash Media Server. Le daremos a la opción de descargar el servidor de desarrollo gratuito. Durante [...]]]></description>
			<content:encoded><![CDATA[<p>Hola a todos. Tras tanto tiempo sin postear en el blog, he decidido hablar sobre cómo realizar una videoconferencia en una aplicación flex utilizando Flash Media Server. En primer lugar lo que haremos será <a target="_blank" href="http://www.adobe.com/es/products/flashmediastreaming/">descargarnos la última versión del Flash Media Server. </a>Le daremos a la opción de descargar el servidor de desarrollo gratuito. Durante el proceso de instalación nos pedirá un número de serie, pero este paso se puede saltar en la versión gratuita, así que le daremos a siguiente. Una vez instalado, para arrancarlo y detenerlo, nos iremos (en Windows) a inicio -&gt; todos los programas -&gt; Adobe -&gt; Flash Media Server. Ahí tenemos las opciones de arrancar y parar el servidor, arrancar y parar el servidor de administración y acceder a la consola de administración en nuestro navegador. Esta consola nos resultará muy útil para ver el estado en el que se encuentran las aplicaciones en todo momento, la cantidad de información que está procesando cada aplicación, los usuarios conectados, etc.</p>
<p>Una vez instalado el servidor, ya podemos empezar a realizar aplicaciones que utilicen Streaming de vídeo y audio. En mi caso, <a target="_blank" href="http://www.antonioserrano.es/samples/Videoconferencia/Videoconferencia.zip">he realizado el típico chat</a>, pero en este caso con audio y vídeo utilizando webcam y micrófono. Para ello habrá que programar la lógica del servidor y el cliente Flex que se conecta al servidor.</p>
<p>Para la parte del servidor utilizaremos el siguiente código:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre class="actionscript">application.<span style="color: #006600;">onAppStart</span> = <span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span> 
    application.<span style="color: #006600;">listaUsuarios</span> = <span style="color: #0066CC;">SharedObject</span>.<span style="color: #0066CC;">get</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;listaUsuarios&quot;</span>, 
                                                                <span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span>; 
<span style="color: #66cc66;">&#125;</span>    
&nbsp;
application.<span style="color: #0066CC;">onConnect</span> = <span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>client, <span style="color: #0066CC;">name</span>, identifier<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span> 
    client.<span style="color: #006600;">identifier</span> = identifier; 
    application.<span style="color: #006600;">listaUsuarios</span>.<span style="color: #0066CC;">setProperty</span><span style="color: #66cc66;">&#40;</span>identifier, <span style="color: #0066CC;">name</span><span style="color: #66cc66;">&#41;</span>; 
    application.<span style="color: #006600;">acceptConnection</span><span style="color: #66cc66;">&#40;</span>client<span style="color: #66cc66;">&#41;</span>; 
<span style="color: #66cc66;">&#125;</span>    
&nbsp;
application.<span style="color: #006600;">onDisconnect</span> = <span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>client<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span> 
    <span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span> client.<span style="color: #006600;">identifier</span> != <span style="color: #0066CC;">undefined</span> <span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span> 
        application.<span style="color: #006600;">listaUsuarios</span>.<span style="color: #0066CC;">setProperty</span><span style="color: #66cc66;">&#40;</span>client.<span style="color: #006600;">identifier</span>, 
                                                         <span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span>; 
    <span style="color: #66cc66;">&#125;</span> 
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>En este códido lo que le estamos indicando al servidor es que cuando arranque la aplicación cree un objeto compartido (más adelante veremos como utilizarlo) llamado listaUsuarios, que contendrá todos los usuarios que están haciendo uso del chat, que cuando un cliente se conecte, lo añada a la lista de usuarios y acepte la conexión y que cuando un cliente se desconecte, lo elimine de la lista de usuarios.</p>
<p>Todo esto irá en un fichero llamado main.asc, y para añadirlo al servidor tendremos que desplazarnos al directorio de instalación del servidor y dentro del directorio applications crear un nuevo directorio con el nombre de nuestra aplicacion (en el ejemplo videoconferencia) en el cual pegaremos el fichero main.asc. En el caso de que tengamos el servidor arrancado, deberemos reiniciarlo para que lo reconozca.</p>
<p>Ahora ya podemos programar el cliente Flex. Lo único que deberemos hacer será conectarnos con el servidor al iniciar la aplicación y sincronizarnos con el objeto remoto listaUsuarios para que cuando haya algún cambio en él, recibamos su nuevo valor y podamos realizar las operaciones que creamos oportunas. El código necesario es el siguiente:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>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
31
32
33
34
35
</pre></td><td class="code"><pre class="actionscript"><span style="color: #000000; font-weight: bold;">var</span> nc:<span style="color: #0066CC;">NetConnection</span> ; 
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> conectar<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><span style="color: #66cc66;">&#123;</span> 
    <span style="color: #808080; font-style: italic;">//Creamos el objeto de conexion </span>
    nc= <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">NetConnection</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; 
    nc.<span style="color: #006600;">objectEncoding</span> = ObjectEncoding.<span style="color: #006600;">AMF0</span>;   
&nbsp;
    <span style="color: #808080; font-style: italic;">//Añadimos el manejador del evento de estado e intentamos conectarnos </span>
    nc.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>NetStatusEvent.<span style="color: #006600;">NET_STATUS</span>, netStatusHandler<span style="color: #66cc66;">&#41;</span>; 
    nc.<span style="color: #006600;">client</span> = <span style="color: #0066CC;">this</span>; 
    nc.<span style="color: #0066CC;">connect</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;rtmp://localhost:1935/videoconferencia&quot;</span>, <span style="color: #ff0000;">&quot;&quot;</span>, <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #66cc66;">&#41;</span>; 
<span style="color: #66cc66;">&#125;</span>   
&nbsp;
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> netStatusHandler<span style="color: #66cc66;">&#40;</span>event:NetStatusEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><span style="color: #66cc66;">&#123;</span> 
    <span style="color: #b1b100;">switch</span><span style="color: #66cc66;">&#40;</span> event.<span style="color: #006600;">info</span>.<span style="color: #006600;">code</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span> 
        <span style="color: #b1b100;">case</span> <span style="color: #ff0000;">&quot;NetConnection.Connect.Success&quot;</span>: <span style="color: #808080; font-style: italic;">//Conexion OK </span>
            obtenerObjetoCompartido<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; 
            <span style="color: #b1b100;">break</span>; 
        <span style="color: #b1b100;">case</span> <span style="color: #ff0000;">&quot;NetConnection.Connect.Failed&quot;</span>: <span style="color: #808080; font-style: italic;">//Error </span>
            Alert.<span style="color: #0066CC;">show</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Error al conectarse al servidor&quot;</span><span style="color: #66cc66;">&#41;</span>; 
    <span style="color: #66cc66;">&#125;</span> 
<span style="color: #66cc66;">&#125;</span>   
&nbsp;
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> obtenerObjetoCompartido<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><span style="color: #66cc66;">&#123;</span> 
    <span style="color: #0066CC;">SharedObject</span>.<span style="color: #006600;">defaultObjectEncoding</span>  = flash.<span style="color: #006600;">net</span>.<span style="color: #006600;">ObjectEncoding</span>.<span style="color: #006600;">AMF0</span>; 
    listaUsuarios = <span style="color: #0066CC;">SharedObject</span>.<span style="color: #006600;">getRemote</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;listaUsuarios&quot;</span>, nc.<span style="color: #006600;">uri</span>, <span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span>; 
    <span style="color: #808080; font-style: italic;">//Añadimos el manejador del evento de sincronización, así cuando el objeto cambie se </span>
    <span style="color: #808080; font-style: italic;">//llamará a la función sincronizacionObjetoRemoto </span>
    listaUsuarios.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>SyncEvent.<span style="color: #006600;">SYNC</span>, sincronizacionObjetoCompartido<span style="color: #66cc66;">&#41;</span>; 
    listaUsuarios.<span style="color: #0066CC;">connect</span><span style="color: #66cc66;">&#40;</span>nc<span style="color: #66cc66;">&#41;</span>; 
<span style="color: #66cc66;">&#125;</span>   
&nbsp;
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> sincronizacionObjetoCompartido<span style="color: #66cc66;">&#40;</span>event:SyncEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><span style="color: #66cc66;">&#123;</span> 
    <span style="color: #000000; font-weight: bold;">var</span> usuarios:<span style="color: #0066CC;">Object</span>= event.<span style="color: #0066CC;">target</span>.<span style="color: #0066CC;">data</span>;<span style="color: #808080; font-style: italic;">//Ya tenemos el objeto listaUsuarios actualizado </span>
    <span style="color: #808080; font-style: italic;">//A partir de aqui realizamos las tareas que creamos oportunas </span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>En la primera función realizamos la petición de conexión con el servidor y le añadimos el manejador del evento NET_STATUS, cuyo código se encuentra en la segunda función. Por otro lado tenemos en la tercera función el código para obtener un objeto compartido (SharedObject) y el manejador del evento SyncEvent.SYNC, que es la cuarta función. Cada vez que en el servidor el objeto compartido listaUsuarios cambie, se ejecutará el código de la cuarta función. Podemos tener tantos objetos compartidos como queramos, todos ellos se pueden ver en la consola de administración del Flash Media Server.</p>
<p>Como todo esto es mucho mejor verlo con un programa en acción, he preparado este <a target="_blank" href="http://www.antonioserrano.es/samples/Videoconferencia/Videoconferencia.zip">ejemplo de chat por videoconferencia</a>. (Nota: El ejemplo empieza a dar problemas a partir de que un cuarto usuario se conecte. Esto puede ser debido a que el servidor de desarrollo gratuito que nos ofrece adobe tengas ciertas limitaciones, o que alguna configuración del servidor esté mal definida).</p>
<p>Espero que sirva de ayuda. Saludos!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.antonioserrano.es/blog/realizar-videoconferencias-con-flex-y-flash-media-server/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Actualizar aplicaciones AIR automáticamente</title>
		<link>http://www.antonioserrano.es/blog/actualizar-aplicaciones-air-automaticamente/</link>
		<comments>http://www.antonioserrano.es/blog/actualizar-aplicaciones-air-automaticamente/#comments</comments>
		<pubDate>Fri, 04 Apr 2008 19:40:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[air]]></category>

		<guid isPermaLink="false">http://www.antonioserrano.es/blog/actualizar-aplicaciones-air-automaticamente/</guid>
		<description><![CDATA[Hola a todos. Recientemente me he visto en la necesidad de realizar una aplicacion AIR que detectase si hay una nueva versión en el servidor y se actualice automáticamente (algo que por otro lado resulta muy útil). Como es algo que me ha llevado más tiempo de lo que me esperaba, he creído conveniente hablar [...]]]></description>
			<content:encoded><![CDATA[<p>Hola a todos. Recientemente me he visto en la necesidad de realizar una aplicacion AIR que detectase si hay una nueva versión en el servidor y se actualice automáticamente (algo que por otro lado resulta muy útil). Como es algo que me ha llevado más tiempo de lo que me esperaba, he creído conveniente hablar de ello.</p>
<p>Para hacer que nuestra aplicación compruebe si es la versión más reciente, no hay más que seguir los siguientes pasos:</p>
<p>1.- Comprobar que la aplicación en ejecución es la más reciente: Aquí los de Adobe nos han dejado esto un poco a nuestra elección. Es decir, no hay manera de comprobar la versión de un archivo .air (sí que podemos obtener la versión de la aplicación en ejecución), por lo que el sistema está dentro de la imaginación de cada uno. Yo en mi caso esto lo he hecho dejando un archivo muy simple xml en el servidor de la siguiente manera:</p>
<p>&lt;version&gt;X.X&lt;/version&gt;</p>
<p>Desde la aplicación hago una llamada a la URL donde se encuentra este archivo, obtengo el valor de la etiqueta version, y la comparo con la versión de la aplicación en ejecución. Para obtener la versión de la aplicación no hay más que utilizar estas tres líneas:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="actionscript"><span style="color: #000000; font-weight: bold;">var</span> appXML:<span style="color: #0066CC;">XML</span> = NativeApplication.<span style="color: #006600;">nativeApplication</span>.<span style="color: #006600;">applicationDescriptor</span>; 
<span style="color: #000000; font-weight: bold;">var</span> air:Namespace = appXML.<span style="color: #006600;">namespaceDeclarations</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#93;</span>; 
<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">version</span>:<span style="color: #0066CC;">String</span> = appXML.<span style="color: #006600;">air</span>::<span style="color: #0066CC;">version</span>;</pre></td></tr></table></div>

<p>Para obtener la versión del servidor utilizaremos el siguiente código:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="actionscript"><span style="color: #000000; font-weight: bold;">var</span> loader:URLLoader = <span style="color: #000000; font-weight: bold;">new</span> URLLoader; 
loader.<span style="color: #0066CC;">load</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> URLRequest<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;url archivo version.xml&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> resultEvent<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><span style="color: #66cc66;">&#123;</span> 
<span style="color: #000000; font-weight: bold;">var</span> loader:URLLoader = event.<span style="color: #006600;">currentTarget</span> as URLLoader; 
versionServidor = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">XML</span><span style="color: #66cc66;">&#40;</span>loader.<span style="color: #0066CC;">data</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; 
<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>versionServidor != <span style="color: #0066CC;">version</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span> 
    versionMasReciente = <span style="color: #000000; font-weight: bold;">false</span>; 
<span style="color: #66cc66;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #66cc66;">&#123;</span> 
    versionMasReciente = <span style="color: #000000; font-weight: bold;">true</span>;
<span style="color: #66cc66;">&#125;</span> 
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>Si las versiones de la aplicación y del servidor son diferentes, supondremos que en el servidor hay una versión más actual. Esto lo he hecho yo así, cada uno puede hacer el mecanismo que prefiera.</p>
<p>2.- Descargar la versión del servidor: El siguiente paso es descargar  la versión del instalable de la aplicación que hay en el servidor. Esto se hace de la siguiente manera:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="actionscript"><span style="color: #000000; font-weight: bold;">var</span> request:URLRequest = <span style="color: #000000; font-weight: bold;">new</span> URLRequest<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;url archivo instalable .air&quot;</span><span style="color: #66cc66;">&#41;</span>; 
<span style="color: #000000; font-weight: bold;">var</span> urlStream:URLStream = <span style="color: #000000; font-weight: bold;">new</span> URLStream<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; 
<span style="color: #000000; font-weight: bold;">var</span> instalableBinario:ByteArray = <span style="color: #000000; font-weight: bold;">new</span> ByteArray<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; 
urlStream.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span> Event.<span style="color: #006600;">COMPLETE</span>, manejadorEvento<span style="color: #66cc66;">&#41;</span>; 
urlStream.<span style="color: #0066CC;">load</span><span style="color: #66cc66;">&#40;</span>request<span style="color: #66cc66;">&#41;</span>;</pre></td></tr></table></div>

<p>3.- Una vez descargado el instalable hay que almacenarlo en un fichero local. Esto por ejemplo puede hacerse guardando dicho archivo en el escritorio. Una vez se haya actualizado la aplicación podremos borrarlo si queremos. Para escribir el instalable el disco, dentro de la función de manejador del evento COMPLETE del paso anterior realizaremos dicha acción:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="actionscript"><span style="color: #808080; font-style: italic;">//Guardamos el instalable en binario en el escritorio </span>
urlStream.<span style="color: #006600;">readBytes</span><span style="color: #66cc66;">&#40;</span>instalableBinario, <span style="color: #cc66cc;">0</span>, urlStream.<span style="color: #006600;">bytesAvailable</span> <span style="color: #66cc66;">&#41;</span>; 
<span style="color: #000000; font-weight: bold;">var</span> instalable:File = File.<span style="color: #006600;">desktopDirectory</span>.<span style="color: #006600;">resolvePath</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;AIRUpdate.air&quot;</span><span style="color: #66cc66;">&#41;</span>; 
&nbsp;
<span style="color: #808080; font-style: italic;">// Escritura del archivo </span>
<span style="color: #000000; font-weight: bold;">var</span> fileStream:FileStream = <span style="color: #000000; font-weight: bold;">new</span> FileStream<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; 
fileStream.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #0066CC;">CLOSE</span>, actualizaAplicacion<span style="color: #66cc66;">&#41;</span>; 
fileStream.<span style="color: #006600;">openAsync</span><span style="color: #66cc66;">&#40;</span>instalable, FileMode.<span style="color: #006600;">WRITE</span><span style="color: #66cc66;">&#41;</span>; 
fileStream.<span style="color: #006600;">writeBytes</span><span style="color: #66cc66;">&#40;</span>instalableBinario, <span style="color: #cc66cc;">0</span>, instalableBinario.<span style="color: #0066CC;">length</span><span style="color: #66cc66;">&#41;</span>; 
fileStream.<span style="color: #0066CC;">close</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</pre></td></tr></table></div>

<p>4.- Una vez hayamos terminado de escribir el fichero, se cierra el fileStream. Como hemos añadido un manejador para el evento close de dicho fileStream, dentro de ese manejador llamaremos a la función que actualiza la aplicación, así tenemos todo correctamente encadenado:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="actionscript"><span style="color: #000000; font-weight: bold;">var</span> updater:Updater = <span style="color: #000000; font-weight: bold;">new</span> Updater<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; 
updater.<span style="color: #006600;">update</span><span style="color: #66cc66;">&#40;</span>instalable, versionServidor<span style="color: #66cc66;">&#41;</span>;</pre></td></tr></table></div>

<p>Al llamar a esta función, la aplicación directamente se reinstalará y comenzará a ejecutarse ya con la nueva versión instalada.</p>
<p>Como un ejemplo vale más que mil explicaciones <a target="_blank" href="http://www.antonioserrano.es/samples/AIRUpdaterSample/AIRUpdaterSample.rar">aquí dejo un ejemplo con todo el código anterior</a> y el <a target="_blank" href="http://www.antonioserrano.es/samples/AIRUpdaterSample/AIRUpdaterSample.zip">instalable de dicho ejemplo</a>. Si bajáis directamente el instalable y lo ejecutáis, se descargará otra versión del mismo programa que tengo en el servidor y podréis ver como la versión es diferente.</p>
<p>Espero que sirva de ayuda. Si hay alguna duda me mandáis un e-mail a antonio.serrano.guerrero@gmail.com. Un saludo!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.antonioserrano.es/blog/actualizar-aplicaciones-air-automaticamente/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Servicios web vía Rest en Flex y Air (Segunda parte)</title>
		<link>http://www.antonioserrano.es/blog/servicios-web-via-rest-en-flex-y-air-segunda-parte/</link>
		<comments>http://www.antonioserrano.es/blog/servicios-web-via-rest-en-flex-y-air-segunda-parte/#comments</comments>
		<pubDate>Sat, 08 Mar 2008 12:18:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[air]]></category>

		<category><![CDATA[flex]]></category>

		<guid isPermaLink="false">http://www.antonioserrano.es/blog/servicios-web-via-rest-en-flex-y-air-segunda-parte/</guid>
		<description><![CDATA[En un post anterior comenté como hacer peticiones REST a un servicio web, más en concreto al servicio web que nos ofrecía MyStrands, desde aplicaciones Flex y AIR. En aquel post comenté la forma de hacer las llamadas y ponía una aplicación de ejemplo, la cual estaba a medio programar.
Recientemente he terminado de programar (en [...]]]></description>
			<content:encoded><![CDATA[<p>En un post anterior comenté como hacer peticiones REST a un servicio web, más en concreto al servicio web que nos ofrecía <a target="_blank" href="http://www.mystrands.com">MyStrands</a>, desde aplicaciones <a target="_blank" href="http://labs.adobe.com">Flex y AIR</a>. En aquel post comenté la forma de hacer las llamadas y ponía una aplicación de ejemplo, la cual estaba a medio programar.</p>
<p>Recientemente he terminado de programar (en mis ratos libres) todas las funcionalidades de búsqueda, así que os dejo los proyectos en flex y air de la aplicación (utilizan el mismo código fuente), para el que le quiera echar un vistazo. Además he estado apurando para terminar de compilarlas con la versión final del Flex Builder 3:</p>
<p>      - Flex:</p>
<p>               - <a target="_blank" href="http://www.antonioserrano.es/samples/MyStrandsApi/MyStrandsApp.html">Demostración de la aplicación</a></p>
<p>               - <a target="_blank" href="http://www.antonioserrano.es/samples/MyStrandsApi/projects/MyStrandsApi.zip">Descarga del proyecto</a></p>
<p>               - <a target="_blank" href="http://www.antonioserrano.es/samples/MyStrandsApi/proxy-mystrands.zip">Descarga del fichero php que utilizo a modo de proxy</a></p>
<p>       - AIR:</p>
<p>              - <a target="_blank" href="http://www.antonioserrano.es/samples/MyStrandsApi/projects/MyStrandsApi_AIR.zip">Descarga del proyecto</a></p>
<p>              - <a target="_blank" href="http://www.antonioserrano.es/samples/MyStrandsApi/projects/MyStrandsApi_AIR_Installer.zip">Descarga del instalable (archivo .air)</a></p>
<p>La diferencia entre ambas aplicaciones, es que para la versión flex utilizo una página php a modo de proxy para poder llamar al Servicio Web de MyStrands desde la URL www.antonioserrano.es (problemas de seguridad que sigo sin poder solucionar), mientras que en la aplicación AIR realizo las llamadas al Servicio Web directamente.</p>
<p>Espero que os guste. Un saludo!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.antonioserrano.es/blog/servicios-web-via-rest-en-flex-y-air-segunda-parte/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ejecutar aplicaciones sobre Tomcat en Eclipse+FlexBuilder 3</title>
		<link>http://www.antonioserrano.es/blog/ejecutar-aplicaciones-sobre-tomcat-en-eclipseflexbuilder-3/</link>
		<comments>http://www.antonioserrano.es/blog/ejecutar-aplicaciones-sobre-tomcat-en-eclipseflexbuilder-3/#comments</comments>
		<pubDate>Tue, 26 Feb 2008 19:48:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[flex]]></category>

		<category><![CDATA[eclipse]]></category>

		<category><![CDATA[flexbuilder]]></category>

		<category><![CDATA[tomcat]]></category>

		<guid isPermaLink="false">http://www.antonioserrano.es/blog/ejecutar-aplicaciones-sobre-tomcat-en-eclipseflexbuilder-3/</guid>
		<description><![CDATA[Hola a todos. En mi último post comenté como realizar aplicaciones que utilizen BlazeDS. A raíz de ello, se han publicado comentarios, y he recibido unos cuantos e-mails preguntándome cómo hacer correr la aplicación sobre un servidor apache tomcat. Voy a poner unos cuantos pantallazos de como lo hago yo en mi instalación del FlexBuilder [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.antonioserrano.es/blog/wp-content/uploads/2008/02/tomcat4.PNG" title="tomcat_eclipse_4"></a>Hola a todos. En mi último post comenté como realizar aplicaciones que utilizen BlazeDS. A raíz de ello, se han publicado comentarios, y he recibido unos cuantos e-mails preguntándome cómo hacer correr la aplicación sobre un servidor apache tomcat. Voy a poner unos cuantos pantallazos de como lo hago yo en mi instalación del FlexBuilder 3, más en concreto en el plug-in para eclipse (en mi caso Eclipse 3.2.2) que nos ofrece Adobe Labs.</p>
<p>Una vez arrancamos eclipse, nos vamos en la barra de herramientas a view -&gt; show view -&gt; other, y nos aparecerá una ventanita tal que así:</p>
<p><a href="http://www.antonioserrano.es/blog/wp-content/uploads/2008/02/tomcat1.PNG" title="tomcat_eclipse_1"><img src="http://www.antonioserrano.es/blog/wp-content/uploads/2008/02/tomcat1.PNG" alt="tomcat_eclipse_1" /></a></p>
<p>En ella seleccionaremos servers, y en la parte inferior, debajo del editor, nos aparecerá la vista de servidores. Dentro de ella, pulsaremos el botón derecho y diremos new -&gt; server, y nos aparecerá el asistente para añadir servidores externos.</p>
<p><a href="http://www.antonioserrano.es/blog/wp-content/uploads/2008/02/tomcat2.PNG" title="tomcat_eclipse_2"><img src="http://www.antonioserrano.es/blog/wp-content/uploads/2008/02/tomcat2.PNG" alt="tomcat_eclipse_2" /></a></p>
<p> En el primer paso, desplegaremos la carpeta de Apache, y seleccionaremos, dependiendo del caso, la versión de tomcat de la que dispongamos (en la versión Europa del eclipse existe la posibilidad de elegir un Tomcat versión 6, en mi caso, versión 3.2.2 la última versión es la 5.5).</p>
<p><a href="http://www.antonioserrano.es/blog/wp-content/uploads/2008/02/tomcat3.PNG" title="tomcat_eclipse_3"><img src="http://www.antonioserrano.es/blog/wp-content/uploads/2008/02/tomcat3.PNG" alt="tomcat_eclipse_3" /></a></p>
<p>El siguiente paso es indicarle el nombre que queremos que tenga el servidor, el directorio donde está instalado (el directorio raíz), y el runtime que queremos que utilice (dejaremos la opción que viene por defecto).</p>
<p>En pasos posteriores podemos indicarle sobre que aplicaciones queremos que haga el deploy. Yo estos últimos pasos los ignoro y directamente cuando quiero ejecutar una aplicación pulso con el botón derecho del ratón sobre la carpeta del proyecto y le doy a Run As -&gt; Run on Server, y directamente hace el deploy sobre el tomcat y comienza la ejecución. Algo tal que así:</p>
<p><a href="http://www.antonioserrano.es/blog/wp-content/uploads/2008/02/tomcat4.PNG" title="tomcat_eclipse_4"><img src="http://www.antonioserrano.es/blog/wp-content/uploads/2008/02/tomcat4.PNG" alt="tomcat_eclipse_4" /></a></p>
<p>Si por algún motivo no arranca, es posible que tengáis errores en el web.xml, o si habéis modificado algún archivo como el services-config.xml o alguno de esos. Si todo está correcto debería funcionar a la primera, aunque hay veces que se pone tonto y hay que reiniciar eclipse y hacer deploy y undeploy varias veces.</p>
<p>Espero haber resuelto las dudas que había, y si alguien sigue con problemas que no dude en escribir. Un saludo!!</p>
<p><a href="http://www.antonioserrano.es/blog/wp-content/uploads/2008/02/tomcat3.PNG" title="tomcat_eclipse_3"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.antonioserrano.es/blog/ejecutar-aplicaciones-sobre-tomcat-en-eclipseflexbuilder-3/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Crear proyectos con Flex Builder 3 y BlazeDS</title>
		<link>http://www.antonioserrano.es/blog/crear-proyectos-con-flex-builder-3-y-blazeds/</link>
		<comments>http://www.antonioserrano.es/blog/crear-proyectos-con-flex-builder-3-y-blazeds/#comments</comments>
		<pubDate>Mon, 04 Feb 2008 22:08:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[flex]]></category>

		<guid isPermaLink="false">http://www.antonioserrano.es/blog/crear-proyectos-con-flex-builder-3-y-blazeds/</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>El pasado día 1 de Febrero, Adobe sacó la primera release de <a target="_blank" href="http://labs.adobe.com/technologies/blazeds/">BlazeDS</a>. 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.</p>
<p>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:</p>
<p>1: Desde el Flex Builder 3, nos vamos a File -&gt; New -&gt; 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:</p>
<p><center><br />
<a href="http://www.antonioserrano.es/blog/wp-content/uploads/2008/02/blazeds1.PNG" title="Blaze_Paso1"><img src="http://www.antonioserrano.es/blog/wp-content/uploads/2008/02/blazeds1.PNG" alt="Blaze_Paso1" /></a><br />
</center></p>
<p>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</p>
<p><center><br />
<a href="http://www.antonioserrano.es/blog/wp-content/uploads/2008/02/blazeds2.PNG" title="Blaze_Paso2"><img src="http://www.antonioserrano.es/blog/wp-content/uploads/2008/02/blazeds2.PNG" alt="Blaze_Paso2" /></a><br />
</center></p>
<p>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.</p>
<p><center><br />
<a href="http://www.antonioserrano.es/blog/wp-content/uploads/2008/02/blazeds3.PNG" title="Blaze_Paso3"><img src="http://www.antonioserrano.es/blog/wp-content/uploads/2008/02/blazeds3.PNG" alt="Blaze_Paso3" /></a><br />
</center></p>
<p>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 -&gt; WEB-INF, y eliminaremos por completo el contenido de las carpetas lib y flex, dejándolo con un aspecto así:</p>
<p><center><br />
<a href="http://www.antonioserrano.es/blog/wp-content/uploads/2008/02/blazeds6.PNG" title="Blaze_Paso4"><img src="http://www.antonioserrano.es/blog/wp-content/uploads/2008/02/blazeds6.PNG" alt="Blaze_Paso4" /></a><br />
</center></p>
<p>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.</p>
<p><center><br />
<a href="http://www.antonioserrano.es/blog/wp-content/uploads/2008/02/blazeds7.PNG" title="Blaze_Paso5"><img src="http://www.antonioserrano.es/blog/wp-content/uploads/2008/02/blazeds7.PNG" alt="Blaze_Paso5" /></a><br />
</center></p>
<p>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.</p>
<p><center><br />
<a href="http://www.antonioserrano.es/blog/wp-content/uploads/2008/02/blazeds8.PNG" title="Blaze_Paso6"><img src="http://www.antonioserrano.es/blog/wp-content/uploads/2008/02/blazeds8.PNG" alt="Blaze_Paso6" /></a><br />
</center></p>
<p>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 <strong>MessageBrokerServlet</strong>, 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í:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>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
</pre></td><td class="code"><pre class="xml"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;web-app<span style="font-weight: bold; color: black;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;display-name<span style="font-weight: bold; color: black;">&gt;</span></span></span>MessagingBlaze<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/display-name<span style="font-weight: bold; color: black;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;description<span style="font-weight: bold; color: black;">&gt;</span></span></span>LiveCycle Data Services Application<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/description<span style="font-weight: bold; color: black;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #808080; font-style: italic;">&lt;!-- MessageBroker Servlet --&gt;</span></span>
    <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;servlet<span style="font-weight: bold; color: black;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;servlet-name<span style="font-weight: bold; color: black;">&gt;</span></span></span>MessageBrokerServlet<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/servlet-name<span style="font-weight: bold; color: black;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;display-name<span style="font-weight: bold; color: black;">&gt;</span></span></span>MessageBrokerServlet<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/display-name<span style="font-weight: bold; color: black;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;servlet-class<span style="font-weight: bold; color: black;">&gt;</span></span></span>flex.messaging.MessageBrokerServlet<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/servlet-class<span style="font-weight: bold; color: black;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;init-param<span style="font-weight: bold; color: black;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;param-name<span style="font-weight: bold; color: black;">&gt;</span></span></span>services.configuration.file<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/param-name<span style="font-weight: bold; color: black;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;param-value<span style="font-weight: bold; color: black;">&gt;</span></span></span>/WEB-INF/flex/services-config.xml<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/param-value<span style="font-weight: bold; color: black;">&gt;</span></span></span>
       <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/init-param<span style="font-weight: bold; color: black;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;init-param<span style="font-weight: bold; color: black;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;param-name<span style="font-weight: bold; color: black;">&gt;</span></span></span>flex.write.path<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/param-name<span style="font-weight: bold; color: black;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;param-value<span style="font-weight: bold; color: black;">&gt;</span></span></span>/WEB-INF/flex<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/param-value<span style="font-weight: bold; color: black;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/init-param<span style="font-weight: bold; color: black;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;load-on-startup<span style="font-weight: bold; color: black;">&gt;</span></span></span>1<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/load-on-startup<span style="font-weight: bold; color: black;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/servlet<span style="font-weight: bold; color: black;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;servlet-mapping<span style="font-weight: bold; color: black;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;servlet-name<span style="font-weight: bold; color: black;">&gt;</span></span></span>MessageBrokerServlet<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/servlet-name<span style="font-weight: bold; color: black;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;url-pattern<span style="font-weight: bold; color: black;">&gt;</span></span></span>/messagebroker/*<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/url-pattern<span style="font-weight: bold; color: black;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/servlet-mapping<span style="font-weight: bold; color: black;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;welcome-file-list<span style="font-weight: bold; color: black;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;welcome-file<span style="font-weight: bold; color: black;">&gt;</span></span></span>index.jsp<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/welcome-file<span style="font-weight: bold; color: black;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/welcome-file-list<span style="font-weight: bold; color: black;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/web-app<span style="font-weight: bold; color: black;">&gt;</span></span></span></pre></td></tr></table></div>

<p>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.<br />
Un saludo!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.antonioserrano.es/blog/crear-proyectos-con-flex-builder-3-y-blazeds/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
