<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-564187376963402153</id><updated>2024-09-12T17:49:15.577-07:00</updated><category term="adobe"/><category term="browser"/><category term="cache"/><category term="cliente"/><category term="faces"/><category term="firefox"/><category term="fix"/><category term="flash"/><category term="flex"/><category term="ie"/><category term="internet"/><category term="php"/><category term="problem"/><category term="problema"/><category term="resuelto"/><category term="servidor"/><category term="solucion"/><category term="solved"/><category term="struts"/><category term="swf"/><title type='text'>El Blog de Necman</title><subtitle type='html'>El Blog de Necman esta destinado a la publicación de soluciones practicas encontradas e implementaciones particulares construidas durante el proceso de aprendizaje y desarrollo profesional.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://necmanblog.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/564187376963402153/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://necmanblog.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Nahuel</name><uri>http://www.blogger.com/profile/15525743498454402686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_Woeye0I7bXQ/Sdos2DkI9EI/AAAAAAAAAFw/na5VHVdmJS0/S220/Imagen+0a15.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>1</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-564187376963402153.post-4104788167555496321</id><published>2009-04-06T17:19:00.000-07:00</published><updated>2009-04-16T12:05:25.235-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="adobe"/><category scheme="http://www.blogger.com/atom/ns#" term="browser"/><category scheme="http://www.blogger.com/atom/ns#" term="cache"/><category scheme="http://www.blogger.com/atom/ns#" term="cliente"/><category scheme="http://www.blogger.com/atom/ns#" term="faces"/><category scheme="http://www.blogger.com/atom/ns#" term="firefox"/><category scheme="http://www.blogger.com/atom/ns#" term="fix"/><category scheme="http://www.blogger.com/atom/ns#" term="flash"/><category scheme="http://www.blogger.com/atom/ns#" term="flex"/><category scheme="http://www.blogger.com/atom/ns#" term="ie"/><category scheme="http://www.blogger.com/atom/ns#" term="internet"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><category scheme="http://www.blogger.com/atom/ns#" term="problem"/><category scheme="http://www.blogger.com/atom/ns#" term="problema"/><category scheme="http://www.blogger.com/atom/ns#" term="resuelto"/><category scheme="http://www.blogger.com/atom/ns#" term="servidor"/><category scheme="http://www.blogger.com/atom/ns#" term="solucion"/><category scheme="http://www.blogger.com/atom/ns#" term="solved"/><category scheme="http://www.blogger.com/atom/ns#" term="struts"/><category scheme="http://www.blogger.com/atom/ns#" term="swf"/><title type='text'>Solución al Problema de Flex con el Cache de los Navegadores de Internet</title><content type='html'>&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Introducción:&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Es sabido que el uso de aplicaciones desarrolladas en Flex, traen consigo un problema asociado con &lt;st1:personname productid=&quot;la Cache&quot; st=&quot;on&quot;&gt;la Cache&lt;/st1:personname&gt; de los navegadores de Internet, provocando que los usuarios accedan a información desactualizada e incluso lleguen a utilizar versiones obsoletas de las aplicaciones que se construyen.&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Esto último fue lo que me motivo a buscar una solución eficiente ante el problema del cacheo de las páginas.&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Voy a comentar aquí con detalle que es lo que intente solucionar específicamente.&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Es muy común que las aplicaciones Web corporativas sean accedidas por muchos clientes diariamente, y también es frecuente que estas estén en un constante proceso de desarrollo continuo, otorgándoles a los clientes nuevas funcionalidades agregadas en cada iteración dentro del ciclo de vida del proceso de desarrollo del programa.&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;El problema se presenta luego de haber desplegado una nueva versión de la aplicación en el servidor. Los clientes siguen accediendo a la versión antigua, ya que esta se mantiene almacenada en la cache del navegador. Y como esto depende de la configuración particular del navegador, pude que dure almacenada solo por una sesión o puede que quede eternamente mientras no se realice ninguna acción manual como es el limpiado de los archivos temporales y cache del navegador.&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Es natural que la primera ocurrencia del desarrollador sea deshabilitar o impedir que se almacene en cache la pagina. Por supuesto que la solución anda bien, pero es bastante molesto para los usuarios tener que recargar toda la aplicación cada vez que se necesite accederla. Sobre todo porque las paginas desarrolladas en Flex suelen tener gran tamaño y llegan a demorar en algunos casos varios minutos en cargarse completamente.&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;La otra alternativa es forzar que &lt;st1:personname productid=&quot;la Url&quot; st=&quot;on&quot;&gt;la Url&lt;/st1:personname&gt; de la página cambie en cada ingreso. En este punto pueden existir dos variantes. La primera es la de agregar un parámetro de fecha (timestanp, la pagina se recarga siempre), y la segunda es acceder a una página cuyo nombre se corresponde con una versión en particular que se va incrementando (Ej:aplicación_v1.html).&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;La solución que presento se basa en esta última alternativa, pero teniendo en cuenta un nuevo problema. Suponiendo que el cliente accedió a la aplicación mediante un index.html y esta fue direccionada a la versión actual aplicación_v1.html, puede suceder que un cliente que este familiarizado con los favoritos, desee guardar la pagina para ingresar en otra ocasión. Va a producirse que este cliente, ingrese “siempre” a la versión 1 de la aplicación. Este es el problema fundamental que se quiere resolver.&lt;/span&gt;&lt;/p&gt;  &lt;span style=&quot;;font-family:&amp;quot;;font-size:100%;&quot;  &gt; &lt;/span&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Aproximación:&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;La solución consta de cuatro cosas fundamentales:&lt;/span&gt;&lt;/p&gt;  &lt;ol style=&quot;margin-top: 0cm;&quot; start=&quot;1&quot; type=&quot;1&quot;&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Mantener      un registro actualizado de versión en alguna base de datos.&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Crear      un archivo dinámico que busque la última versión, construya &lt;st1:personname productid=&quot;la Url&quot; st=&quot;on&quot;&gt;la Url&lt;/st1:personname&gt; correcta y cargue la      pagina. Esta página debe ser obligada a que no sea almacenada en cache.&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;st1:personname productid=&quot;la Url&quot; st=&quot;on&quot;&gt;La Url&lt;/st1:personname&gt; de la página no debe variar nunca. (Explicado anteriormente: para que, si se guarda en favoritos no se haga referencia a una versión incorrecta.)&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Compilar      la última versión en el servidor, incrementar la versión y renombrar la      pagina versionada.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Implementación:&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;font-style: italic; font-weight: bold;&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Nota:&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;El servidor de aplicaciones utilizado es Glassfish.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;La Base de Datos es MySQL.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Entorno de programación J2EE.&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Tecnologías Usadas: Faces&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;La aplicación Flex genera un archivo llamado Aplicación.html y Aplicación.swf.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Paso 1:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);font-size:100%;&quot; &gt;Creamos una tabla de configuraciones generales e insertamos los parámetros necesarios:&lt;/span&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;CREATE TABLE&lt;span style=&quot;&quot;&gt;  &lt;/span&gt;`test`.`configuracion` (&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;&quot;&gt;  &lt;/span&gt;`Id_parametro` bigint(20) NOT NULL auto_increment,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;`parametro` varchar(50) NOT NULL,&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;`valor` varchar(50) NOT NULL,&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;`descripcion` varchar(200) default NULL,&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;  &lt;/span&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;PRIMARY KEY&lt;span style=&quot;&quot;&gt;  &lt;/span&gt;(`Id_parametro`)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;) ENGINE=InnoDB DEFAULT CHARSET=latin1;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;INSERT INTO Configuracion (parametro, valor, descripcion)&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;values (&#39;APP_VERSION&#39;, &#39;1&#39;, &#39;Version de la aplicacion flex&#39;);&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;INSERT INTO Configuracion (parametro, valor, descripcion)&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;values ( &#39;APP_NOMBRE&#39;, &#39;aplicacion&#39;, &#39;Nombre de la aplicacion flex&#39;);&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Paso 2:&lt;/span&gt;&lt;/p&gt;    &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;Configuramos Faces en nuestro Servidor Web:&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Agregamos las siguentes lineas en el archivo web.xml.&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 153, 0);&quot;&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;servlet&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;servlet-name&amp;gt;Faces Servlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;servlet-class&amp;gt;javax.faces.webapp.FacesServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;load-on-startup&amp;gt;1&amp;lt;/load-on-startup&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/servlet&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;servlet-name&amp;gt;Faces Servlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;url-pattern&amp;gt;*.faces&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;welcome-file-list&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;welcome-file&amp;gt;index.jsp&amp;lt;/welcome-file&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/welcome-file-list&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Configuramos las reglas de navegación y el bean en el archivo principal de Faces.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Lo que hacemos es agregar una regla de navegación que permita desde el archivo Index.jsp manejar una acción invocada con el nombre findNextPage. Por otro lado Registramos el Bean (LocatorBean) que va a manejar esta acción.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Agregamos las siguentes lineas al archivo faces-config.xml:&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;navigation-rule&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/navigation-rule&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;color: rgb(0, 153, 0);font-size:100%;&quot; &gt;&lt;navigation-rule&gt;&lt;/navigation-rule&gt;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 153, 0);font-size:100%;&quot; &gt;      &lt;from-view-id&gt;&lt;navigation-rule&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;navigation-rule&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;from-view-id&amp;gt;/index.jsp&amp;lt;/from-view-id&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;navigation-case&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;from-outcome&amp;gt;findNextPage&amp;lt;/from-outcome&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;to-view-id&amp;gt;/*&amp;lt;/to-view-id&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/navigation-case&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/navigation-rule&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;managed-bean&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;managed-bean-name&amp;gt;locator&amp;lt;/managed-bean-name&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;managed-bean-class&amp;gt;com.Bean.LocatorBean&amp;lt;/managed-bean-class&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;managed-bean-scope&amp;gt;session&amp;lt;/managed-bean-scope&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/managed-bean&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/navigation-rule&gt;&lt;managed-bean&gt;&lt;managed-bean-scope&gt;&lt;/managed-bean-scope&gt;&lt;br /&gt;&lt;/managed-bean&gt;&lt;/from-view-id&gt;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 153, 0);font-size:100%;&quot; &gt;   &lt;/span&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;managed-bean-scope&gt;&lt;/managed-bean-scope&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;&quot;&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Creamos un archivo dinámico Jsp llamado Index.jsp&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;En esta página se importa el Bean para poder acceder al metodo “getNextPage”.&lt;br /&gt;Luego mediante una acción forward se carga la página que nos devuelve este método.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Agregamos las siguientes líneas:&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;color: rgb(0, 153, 0);font-size:100%;&quot; &gt;&lt;code&gt;&lt;br /&gt;&amp;lt;%@ page contentType=&quot;text/html;charset=UTF-8&quot; language=&quot;java&quot; %&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;%&lt;br /&gt;&lt;br /&gt;response.setHeader( &quot;Pragma&quot;, &quot;no-cache&quot; );&lt;br /&gt;&lt;br /&gt;response.setHeader( &quot;Cache-Control&quot;, &quot;no-cache&quot; );&lt;br /&gt;&lt;br /&gt;response.setDateHeader( &quot;Expires&quot;, 0 );&lt;br /&gt;&lt;br /&gt;%&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;jsp:useBean id=&quot;locator&quot; class=&quot;com.Bean.LocatorBean&quot; scope=&quot;page&quot;/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;jsp:forward page=&quot;&amp;lt;%=locator.getNextPage()%&amp;gt;&quot;/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;jsp:usebean id=&quot;locator&quot; class=&quot;com.Bean.LocatorBean&quot; scope=&quot;page&quot;&gt;&lt;jsp:forward page=&quot;&quot;&gt;&lt;/jsp:forward&gt;&lt;/jsp:usebean&gt;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;jsp:forward page=&quot;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/jsp:forward&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Creamos una Clase Java llamada LocatorBean.java dentro del paquete com.Bean.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Esta clase es la encargada de consultar los parámetros que tienen el nombre y versión de la aplicación y devuelven la próxima Url que se debe cargar.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Agregamos las siguientes lineas:&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;/*&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Se omiten sentencias de Import y Package&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;*/&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;public class LocatorBean extends HibernateDaoSupport {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;&quot;&gt;    &lt;/span&gt;private String nextPage;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;&quot;&gt;    &lt;/span&gt;public String getNextPage() throws ConfiguracionException {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;&quot;&gt;        &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;/*&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;No se explicara en este momento el método de conexión con la base de datos.&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Pero se deberá representar una conexión que por medio de un DAO, consulte los parámetros “APP_VERSION” y “APP_NOMBRE” en la base de datos.&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;text-indent: 35.4pt; color: rgb(0, 153, 0);&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;*/&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;text-indent: 35.4pt; color: rgb(0, 153, 0);&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;DaoRegistry.getConfiguracionDao();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;&quot;&gt;        &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;&quot;&gt;        &lt;/span&gt;ApplicationContext ctx = AppContext.getApplicationContext();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;&quot;&gt;        &lt;/span&gt;ConfiguracionSpringDao configuracionDao = (ConfiguracionSpringDao) ctx.getBean(&quot;configuracionDao&quot;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;&quot;&gt;        &lt;/span&gt;String appNombre;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;&quot;&gt;        &lt;/span&gt;String appVersion;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;&quot;&gt;        &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;&quot;&gt;        &lt;/span&gt;appNombre = configuracionDao.findByParametro(&quot;APP_NOMBRE&quot;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;&quot;&gt;        &lt;/span&gt;appVersion = configuracionDao.findByParametro(&quot;APP_VERSION&quot;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;&quot;&gt;        &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;&quot;&gt;        &lt;/span&gt;nextPage = appNombre + appVersion + &quot;.html&quot;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;&quot;&gt;        &lt;/span&gt;return nextPage;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;&quot;&gt;    &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;&quot;&gt;    &lt;/span&gt;public void setNextPage(String newValue) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;nextPage = newValue;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;}&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Paso 3:&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;El paso tres se cumple con en la siguiente sentencia dentro del archivo index.jsp.&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Este comando hace que se cargue la página pero no cambie &lt;st1:personname productid=&quot;la Url&quot; st=&quot;on&quot;&gt;la Url&lt;/st1:personname&gt;, como puede llegar a suceder con algún otro tipo de redirección.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 153, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span  lang=&quot;EN-US&quot; style=&quot;font-size:100%;&quot;&gt;&lt;jsp:forward page=&quot;&quot;&gt;&lt;jsp:forward page=&quot;&quot;&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;jsp:forward page=&quot;&amp;lt;%=locator.getNextPage()%&amp;gt;&quot;/&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;/jsp:forward&gt;&lt;/jsp:forward&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Paso 4:&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Se crea un script bash para hacer el despliegue de la aplicación en el servidor de producción, montado sobre Linux.&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;(De igual forma debería hacerse en el caso que el servidor este montado sobre windows)&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Este script es el encargado de realizar el despliegue contra el servidor de aplicaciones, también debe incrementar el parámetro de versión en uno “1”, y por ultimo, renombrar el archivo generado en Flex para que quede versionado.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Se crea el archivo despliegue.sh y se agregan las siguientes líneas:&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;color: rgb(0, 153, 0);font-size:100%;&quot; &gt;&lt;!--! SELECT valor FROM base_datos.configuracion where parametro = &#39;APP_NOMBRE&#39;; quit !!  APP_NOMBRE=`head -2 /tmp/app_nombre  | tail -1` echo &quot;Nombre Index: &quot;$APP_NOMBRE  mv $RUTA_APLICACION/$APP_NOMBRE.html \ $RUTA_APLICACION/$APP_NOMBRE$APP_VERSION.html  #FINAL DE VERSIONADO&lt;/span--&gt;&lt;span style=&quot;color: rgb(0, 153, 0);&quot;&gt;&lt;span style=&quot;color: rgb(0, 153, 0);&quot;&gt;&lt;span style=&quot;color: rgb(0, 153, 0);&quot;&gt;&lt;code&gt;&lt;br /&gt;#! /bin/bash&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#####################&lt;br /&gt;&lt;br /&gt;# Se omiten los comandos para realizar el despliegue de la aplicación&lt;br /&gt;&lt;br /&gt;# Aquí es donde debería realizarse el despliegue.&lt;br /&gt;&lt;br /&gt;# Por ejemplo para un servidor glassfish debería quedar lo siguiente:&lt;br /&gt;&lt;br /&gt;# $GLASSFISH_HOME/bin/asadmin deploy aplicación.war&lt;br /&gt;&lt;br /&gt;#####################&lt;br /&gt;&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;# RUTA_APLICACION: debe apuntar al directorio donde se encuentra&lt;br /&gt;&lt;br /&gt;# el archivo a versionar. En este ejemplo es aplicación.html&lt;br /&gt;&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;#####################&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;$RUTA_APLICACION=/algunpath&lt;br /&gt;&lt;br /&gt;#INICIO VERSIONADO&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;mysql -u root --password=mi-clave base_datos &amp;lt;&amp;lt;!!&lt;br /&gt;&lt;br /&gt;UPDATE  base_datos.configuracion&lt;br /&gt;&lt;br /&gt;SET valor=valor+1&lt;br /&gt;&lt;br /&gt;WHERE parametro = &#39;APP_VERSION&#39;;&lt;br /&gt;&lt;br /&gt;quit&lt;br /&gt;&lt;br /&gt;!!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;mysql -u root --password=mi-clave base_datos &amp;gt; /tmp/app_version &amp;lt;&amp;lt;!!&lt;br /&gt;&lt;br /&gt;SELECT valor FROM base_datos.configuracion where parametro = &#39;APP_VERSION&#39;;&lt;br /&gt;&lt;br /&gt;quit&lt;br /&gt;&lt;br /&gt;!!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;APP_VERSION=`head -2 /tmp/app_version  | tail -1`&lt;br /&gt;&lt;br /&gt;echo &quot;Version Index: &quot;$APP_VERSION&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;mysql -u root --password=mi-clave base_datos &amp;gt; /tmp/app_nombre &amp;lt;&amp;lt;!!&lt;br /&gt;&lt;br /&gt;SELECT valor FROM base_datos.configuracion where parametro = &#39;APP_NOMBRE&#39;;&lt;br /&gt;&lt;br /&gt;quit&lt;br /&gt;&lt;br /&gt;!!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;APP_NOMBRE=`head -2 /tmp/app_nombre  | tail -1`&lt;br /&gt;&lt;br /&gt;echo &quot;Nombre Index: &quot;$APP_NOMBRE&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;mv $RUTA_APLICACION/$APP_NOMBRE.html \ $RUTA_APLICACION/$APP_NOMBRE$APP_VERSION.html&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#FINAL DE VERSIONADO&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Prueba:&lt;br /&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Se comprobó que la página la primera vez se carga completamente,  luego quedaba almacenada en cache y fue accedida rápidamente en las siguientes cargas.&lt;br /&gt;Luego se compilo una nueva versión y se desplegó la misma corriendo el script despliegue.sh. Por ultimo se verificó que al ingresar nuevamente a la página, se descargaba automáticamente la última versión de la aplicación.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Notas Adicionales:&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;No presenta problemas en tiempo de desarrollo:&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;MsoNormal&quot;&gt;En entornos productivos esta aplicación va a ser versionada teniendo en cuenta los parámetros “APP_VERSION” y “APP_NOMBRE”, de la base de datos. Pero para los esquemas donde se realicen el desarrollo y las pruebas, no es necesario correr el script despliegue.sh. Simplemente realizamos la compilación de la aplicación naturalmente, y dejamos el parámetro “APP_VERSION” sin ningún valor asignado. Con esto lograremos que &lt;st1:personname productid=&quot;la Url&quot; st=&quot;on&quot;&gt;la Url&lt;/st1:personname&gt; que se genera en las pruebas sea /url/aplicación.html y no /url/aplicación&lt;&lt;b style=&quot;&quot;&gt;version&lt;/b&gt;&gt;.html&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Para los que quieran usar Struts, u otra tecnología similar:&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;MsoNormal&quot;&gt;No existen inconvenientes para implementar esta solución usando Struts, solo será necesario construir la clase Action correctamente para redirigir a la nueva pagina.&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Para los que quieran usar PHP:&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;MsoNormal&quot;&gt;También sería posible realizar la consulta desde PHP y redirigir la pagina.&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;MsoNormal&quot;&gt;Lo único a tener en cuenta es que la nueva página debe ser cargada sin que &lt;st1:personname productid=&quot;la Url&quot; st=&quot;on&quot;&gt;la Url&lt;/st1:personname&gt; cambie.&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Se puede hacer una solución que funcione solo desde Flex?&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;MsoNormal&quot;&gt;Si, también probé realizar una pequeña aplicación desde Flex para que desde una página se llame a la otra. Encontrando las siguientes dificultades:&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;margin-left: 36pt; text-indent: -18pt; color: rgb(0, 0, 0);&quot;&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=&quot;&quot;&gt;1-&lt;span style=&quot;;font-family:&amp;quot;;&quot; &gt;     &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;La primera vez que se invoca la pagina, se realizan dos cargas de página. (No es para nada una buena práctica). La segunda vez, se cachean las dos páginas. Cuando se crea una nueva versión, se carga solo la segunda página como se esperaba.&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;margin-left: 36pt; text-indent: -18pt; color: rgb(0, 0, 0);&quot;&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=&quot;&quot;&gt;2-&lt;span style=&quot;;font-family:&amp;quot;;&quot; &gt;     &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;st1:personname productid=&quot;la Url&quot; st=&quot;on&quot;&gt;La Url&lt;/st1:personname&gt; cambia si se realiza una redirección, con lo cual perdemos toda utilidad para esta solución.&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;margin-left: 36pt; text-indent: -18pt; color: rgb(0, 0, 0);&quot;&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=&quot;&quot;&gt;3-&lt;span style=&quot;;font-family:&amp;quot;;&quot; &gt;     &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Existe un método para que no cambie &lt;st1:personname productid=&quot;la Url&quot; st=&quot;on&quot;&gt;la  Url&lt;/st1:personname&gt;, que es cargar la pagina versionada como módulo dentro de la primera. Pero es sabido que los módulos traen consigo otros problemas que obligan a los desarrolladores en muchos casos a no usarlos.&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;margin-left: 36pt; text-indent: -18pt; color: rgb(0, 0, 0);&quot;&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=&quot;&quot;&gt;4-&lt;span style=&quot;;font-family:&amp;quot;;&quot; &gt;     &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;La página incrementa considerablemente su tamaño.&lt;/p&gt;  &lt;span style=&quot;color: rgb(0, 0, 0);font-family:&amp;quot;;&quot; &gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Referencias en la Web del Problema:&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;a href=&quot;http://shanky.org/es/2008/08/02/flex-httpservice-browser-cache-and-ie/&quot;&gt;http://shanky.org/es/2008/08/02/flex-httpservice-browser-cache-and-ie/&lt;/a&gt;&lt;/p&gt;    &lt;p class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;a href=&quot;http://flexonblog.wordpress.com/2008/01/24/another-solution-for-cache-problem-in-ie/&quot;&gt;http://flexonblog.wordpress.com/2008/01/24/another-solution-for-cache-problem-in-ie/&lt;/a&gt;&lt;/p&gt;    &lt;p class=&quot;MsoNormal&quot;&gt;&lt;a href=&quot;http://www.flexpasta.com/index.php/2008/11/24/firefox-swf-cache/&quot;&gt;http://www.flexpasta.com/index.php/2008/11/24/firefox-swf-cache/&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://necmanblog.blogspot.com/feeds/4104788167555496321/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://necmanblog.blogspot.com/2009/04/solucion-al-problema-de-flex-con-el.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/564187376963402153/posts/default/4104788167555496321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/564187376963402153/posts/default/4104788167555496321'/><link rel='alternate' type='text/html' href='http://necmanblog.blogspot.com/2009/04/solucion-al-problema-de-flex-con-el.html' title='Solución al Problema de Flex con el Cache de los Navegadores de Internet'/><author><name>Nahuel</name><uri>http://www.blogger.com/profile/15525743498454402686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_Woeye0I7bXQ/Sdos2DkI9EI/AAAAAAAAAFw/na5VHVdmJS0/S220/Imagen+0a15.jpg'/></author><thr:total>0</thr:total></entry></feed>