Este documento describe el proceso de implementación de aplicaciones GeneXus, incluyendo la preparación del entorno técnico, la instalación y configuración de los componentes del stack tecnológico de GeneXus como GXflow, GXportal y la administración de datos, así como consideraciones para la implementación de aplicaciones web y actualizaciones. También anticipa nuevas funcionalidades de implementación en la nube y un deployer genérico en futuras versiones de GeneXus.
Nuestra charla se enmarca en el ciclo de conferencias de GeneXus Consulting donde se expone cada una de las etapas de ciclo de desarrollo del software. En este caso vamos a hablar de la última etapa del ciclo que refiere a las instalación o despliegue (deployment) del sistema en el ambiente del cliente.
Sistema operativo:Dimensionar la variedad de plataformas sobre las cuales se quiere hacer el deploy, es diferente siempre instalar sobre la misma plataforma que sobre varias. A modo de ejemplo si hubiéramos elegido como sistema operativo Windows ® debemos tener en cuenta si hablamos de una versión para 32 o 64 bits dado que esto va a influir en la deployement. Por ej. STE es una librería de cálculo de impuestos en EEUU para este sistema operativo que tiene versiones comerciales para ambas versiones: 32 y 64 bits. Si cambiamos de plataforma debemos comprar nuevamente la librería.Es recomendable tener desde el principio ambientes de test lo más parecido posible al ambiente de producción, quizás no en potencia pero si a nivel de componentes (hardware y software). Cuanto antes comencemos las pruebas sobre un ambiente parecido al final, más temprano encontraremos errores y será más económico solucionarlos.En el caso que el tipo de desarrollo sea un producto cerrado es necesario prever en el plan de proyecto las plataformas objetivo y ejecutar pruebas completas de deployment sobre las mismas.
Lenguaje de generación:Existenciertoslenguajesquecorrenmejor en ciertasplataformas: porejemplo java sobre Solaris.Otroejemplo: en GX XEv1 java web se soporta a partir del jdk 1.5, lo cual es razonable por las propias features nuevas del lenguaje y los avances en el runtime como ser el manejo de memoria etc. Esto impide en instalaciones viejas que tengan un jdk de versión inferior correr aplicaciones generadas en GX XEv1.Un casotípicoreferente al tema de lasversiones del framework escuandoinstalas un cliente y posteriormente el productosigue en proceso de evolución y mejoras. En algúnmomento se hace el upgrade de version y se llevaunaactualización al cliente con el framework viejo lo quecausaquedeje de andar. Este es un ejemplo de como la etapa de construccióndebeaportarinformación al proceso de deploy, esestecaso, notificando la version del framework con la cual se compiló.Tenercuidadosiembebemoscodigonativo, estoimplicaqueperdemos la capacidad de cambiarfacilmente de lenguaje de generacion. En GX XEv1 tenemosunasoluciónelegante al problema de códigonativoembebido: los External Objects. Estosobjetospermiteninteractuar con códigonativo en forma de clases java, .net o ruby en nuestraaplicación GX, minimizando la dependencia de nuestrocódigo GX con el lenguaje de generación.En GX 9.0 tenemos herramientas que nos ayudan a hacer el deploy de nuestra aplicación mas simple en algunos lenguajes que en otros: para win el problema del instalador está resuelto en casi todas las plataformas (visual basic, java, .net) pero para web solo está resuelto para java (WAR deployment). En GX XEv1 para java se tienen las mismas herramientas que en GX 9. Para .net hoy en día tenemos una Extension que permite empaquetar toda una aplicación web. A corto plazo se va a liberar una herramienta más potente para hacer deployment en .net, análoga a la existente en java.En el futuro se tendrá una herramienta unificada (ver al final de la presentación).
Software de base (instalación, configuración y tuning)DBMS:Algunosrequieren al momento de instalarque se habilitenciertospuertos.Tunning: se puedenfragmentarverticalementelastablas (dependiendo del DBMS), habilitar el caché, elegir un motor de tablasporejemplo en MySQL (MyISAM, InnoDB), asignartamaño a los logs (porejemplo ORACLE).Servidor de Aplicaciones:Configuración: session timeout, servlet invoker, declaración de extensiones de archivos, habilitar CGIs en casoque sea necesario.Tunning de memoria de cualquier web container: mínimo y máximo de heap, máximo de Perm; parámetros para optimizar el garbagecollector.Se puedellegar a necesitarsegún el porte de nuestraaplicaciónhacergranja y/o cluster de servidores. En esta decision esimportantetenerencuentaconceptoscomobalanceo de carga, replicación y session afinity.Servidor http:Configuración: https de ser necesario, connector con tomcat.En cuanto al tuning, depende mucho del tipo de aplicación: si es Intranet o Internet, si tengo un buen enlace o no, si tengo requerimientos no funcionales de tiempo de respuesta o uptime.Hay decisiones u omisiones en tiempo de desarrollo que te limitan a la hora del deploy: por ejemplo muchos join del lado del cliente obligan a tener un buen enlace entre servidor de aplicación y DBMS (fibra óptica o como peor caso que residan en la misma máquina).
Protección: El mecanismo de protección varía si estamos en windows ® o linux. En el caso de instalación siempre tenemos que instalar la protección, en windows se traduce a instalar el Protection server y el Protectionservice. En el caso de estar en una actualización y haber cambiado la versión de Gxflow podemos llegar a tener que actualizar la versión de la protección.Licenciamiento En el caso de instalaciónsiempretenemosquepedirlicencias. En caso de actualizaciónsolamentedebemoshaceresosicambiamos de version de GXflow. TIP: Para nominar en la nuevaversión de GXflowsususuariospuedenexportar e importar la lista de usuarionominados.Procesos de negocio:En el caso de instalacióntenemos dos opciones:Llevar la base de datos de GXflowdentro de la base de datos de nuestraaplicación, en la mismallevamosusuarios, roles, permisos y procesos de negocio. Impactar los roles y procesos de negocio.En el caso de actualización la opciónmásrecomendableesimpactar los roles y procesos de negocio dado queestopreserva los datosingresadospreviamente a GXflow (usuarios, permisos, instancias de procesos de negocio, etc).
Instalación y configuraciónbasicaProtección y licenciamiento: Las consideraciones para la protección de GXportal son las mismas que mencionamos para GXflow. En el licenciamiento de GXportal tenemosqueelegir el tipo de licenciasadecuadoparanuestraaplicación, porejemplosisolamente se utilizaráGXportalcomointegrador de aplicacionespodemosutilizar la licencia de tipo Portal For Applications.Configuraciónadicional:Si utilizamos el editor interno a GXportaldebemosinstalar PHP.Si utilizamos tomcat debemoshabilitar la ejecucion de CGIs.Si hacemosllamadas a las API de GXportal via WebServicedebemosconfigurar los webservices.Configuración de mi aplicacion:La copia del sitio se puedehacer de dos formasdurante la instalación: Importar sitio con su repositorio (consta de las aplicaciones usuarios y roles) e imágenes. Copiar la base de datos con un configuración inicial (siempre que origen y destino tengan tipos de licencia compatibles). En ambos casos debemos configurar la dirección de los servers, la ruta a las imágenes y los ambientes.En unaactualización es deseable mantener la configuración actual de usuarios, roles y permisos, la forma de hacer esto es la siguiente: Importar el sitio en el repositorio existente TIP: Se puede copiar la configuración del sitio anterior, por ej se puede mantener la dirección del sitio anterior. Importar las aplicaciones en el repositorio actualizando las ya existentes. TIP: El check de “Publish” actualiza las referencias a la aplicación vieja, haciéndolas apuntar a la aplicación nueva. Borrar los sitios y aplicaciones viejas.Integracion con GXflow:Los roles comunes a GXflow y GXportal debe tener como external ID del rol de GXportal el ID del rol de GXflow.
Para el caso de Gxplorer y Gxquery, el proceso de puesta en produccióntambiénesdiferentesiestamosinstalandoporprimeravez o estamosactualizando.Instalación:Configuraciónusuarios, roles, consultas, permisossobreatributos de GXquery o indicadores y dimensiones de GXplorer.Importación de metadata completa.Procesos de carga (GXplorer): estospueden ser parte de la aplicaciónmisma, porejemplo concadaalta de datos en la BD transaccional, se genera unainserción en el sitsemadatawarehouse, disparandounaactualización de los datoscalculados y/o derivados. La otraopciónestener un proceso de carga en modo batch cadaciertaventana de tiempo.Actualización:Importación de la reorganización de la metadata.Actualización de los procesos de cargasiaplica.A partir de GX Xtenemos el objeto query quepermiteembeberunaconsulta a la base de datostrasaccionaldentro de objetos GeneXus. En estecaso no hay queefectuarningúnmanejo de la metadata en tiempo de deploy, yaquees parte de la KB.En futurasversiones de GeneXus se tendranfuncionalidades de GXquery y GXplorerintegradas en el propio IDE de GX.
Manejo de reorganizaciones:En el manejo de reorganizaciones va a depender mucho el tipo de organización: si existe un rol de DBA quizás sea requisito ejecutar las reorganizaciones mediante scripts SQL (en este caso si se trabaja con versiones de GX previas a la X se debe generar el script con alguna herramienta de terceros). Es recomendable siempre que sea posible ejecutar las reorganizaciones mediante programas GeneXus, esto se debe a que además de mantener la estructura física de la base de datos mantienen también los datos en si mismo. Un ejemplo claro de esto es si agregamos un atributo formula redundante en una determinada tabla. El script de base de datos puede crear el atributo, mientras el programa GeneXus va a crear el atributo y cargarlo correctamente.Otro punto interesante es saber qué reorganizaciones debemos aplicar, muchas veces se deben ejecutar varios pasos de reorganización para llegar de una versión a otra de nuestro producto. Para hacer una reorganización desde versión A a la versión B, en GX 9.0 se sugiere tener una KB congelada de la versión A (copia del consolidado), a la cual le impactamos los cambios estructurales de la versión B y generamos la reorganización.En GeneXus X hoy en día se puede generar un análisis de impacto entre dos versiones congeladas, pero no generar la reorganización. Para poder generar los programas de reorganización debemos seguir un proceso similar al de GX 9.0. En alguna de las evolutions se podrá generar los programas de reorganización entre dos versiones congeladas.Carga de datos post-reorganizaciones:Determinadas creaciones de campos o tablas nuevas pueden requerir una exportación de datos hacia el cliente, por ejemplo, tablas nuevas de impuestos se mandan ya cargadas con datos.
Para el caso de lainstalación de la webapp se puedentomar dos caminos: armar un paquete con la aplicación a distribuir o copiarmanualmente los cambios. Generalmentecuandoesinstalalación se genera el WAR con el contenidocompleto de la aplicación (clases, imagnes, java scripts y demásrecursos) y cuandoesactualización se puedeoptarporllevar la nuevaversión de la aplicacióncompleta, o solamente los programasquehayansufridocambios. Estadecisióndepende de la realidad de cadauno.Archivo de configuración y conexión:En los casosquellevamos la aplicacióncompletadebemostenercuidado de no sobreescribir el archivo de configuración y conexion. En caso de sobreescribirlodebemosllevarloconfiguradopara el cliente o modificarlo en la instalación. En caso de haberagregado o eliminadodatastoresdebemossiempresobreescribirdichoarchivo.
El equipo de desarrollo de Artechestatrabajandoparafacilitar el deploy de aplicaciones GeneXus en lasnubes. En el eventopasado se liberó el deployment de aplicaciones java en la nube de Amazon y en este se va a liberar el deployment de aplicaciones .NET en la nube de Microsoft.A futuro se planeatener un deployergenérico, independiente del lenguanje de generación, el cualademás de permitirnos empaquetar nuestras aplicaciones nos va a permitir ejecutar tareas, la idea es permitirnos automatizar la mayor parte del proseso de deployment, todo lo que hoy ponemos en nuestra documentación y sea automatizable se transformaría en tareas del deployer de GeneXus.