¿Elegancia o sencillez?

 

En el trabajo llevamos varios días peleándonos con la instalación de una versión de nuestro software en uno de nuestros sistemas. El sistema consta de unas diez estaciones de trabajo solaris y unos veinte PCs con Windows. En todos ellos corren aplicaciones nuestras, en su mayoría java. Estas aplicaciones tienen algunas partes comunes, pero son distintas en cada una de las estaciones y de los PCs (cada uno está especializado en diversas funciones, algunas comunes, otras no y comparten mucha información entre ellos). En las estaciones hay bases de datos Oracle, con muchas tablas comunes, pero otras distintas en cada estación. Y en todo esto reside el problema de la instalación.

La gente está dividida en dos posibles tipos de instalación.

Junto con algunos, yo soy partidario de implementar las distintas funcionalidades del sistema en jar distintos e instalar en cada estacion/PC sólo aquellos jar que son necesarios, de forma que ninguna estación/PC lleve más jar o ficheros de configuración que no va a usar. Esta es la solución que considero elegante, pero es más compleja. Requiere generar instaladores/zips disintos para cada estación/PC, así como ser mucho más cuidadoso en esta generación de instaladores/zips, muchos jar, muchos grupos de ficheros de configuración, partes comunes y partes específicas.

Otros piensan que es mejor hacer un único mega-jar, o unos pocos jar grandes, un único mega-grupo de ficheros de configuración e instalar todo en todos lados. De esta forma, un único instalador o un único zip vale para todas las estaciones/PCs. Luego es el propio software el que mirando el nombre de la estación/PC en el que corre, sabe qué fichero concreto de configuración leer, de qué clase principal hacer el new y actuar como lo que le toca. Esta instalación es, desde mi punto de vista, más chapuza, pero es innegable que es infinitamente más sencilla.

Y después de la pelea de estos días atrás para la instalación según mi punto de vista (disintos zips/instaladores que instalan en cada estación/PC sólo lo necesario), creo que estoy empezando a cambiar de opinión. Los instaladores/zips, desde luego, se hacen con procesos automáticos, pero alguien tiene que decirle a ese proceso qué debe meter. Según evoluciona el software y va llevando más funcionalidades y ficheros, hay que tocar la configuración de la herramienta que genera los instaladores/zips (izpack, maven assembly,…) y hay que hacerlo con cuidado. Este proceso es manual y está sujeto a errores humanos, por lo que a nuestros instaladores siempre les acaba faltando alguna cosa y necesitan su proceso de "depuración".

En fin, no me gustan las chapuzas y tengo que pensar seriamente la forma de mejorar el proceso de generar los zips/instaladores, pero desde luego, es difícil resistirse a la facilidad de instalación de "todo va en todos sitios, aunque no se use". Es mucho más fácil instalar un solo mega-jar en todos lados que instalar varios jar distintos en cada estación/PC.

Esta entrada ha sido publicada en trabajo y etiquetada como , , , . Guarda el enlace permanente.

10 respuestas a ¿Elegancia o sencillez?

  1. Luis dijo:

    Una base en cada estación? no se puede centralizar? que tipo de aplicación corren?

  2. juanlu dijo:

    Navaja de Occam: ante dos situaciones posibles, normalmente la mas sencilla es la mas acertada.

  3. lopez dijo:

    Hola, en mi opinión instalar todo es la mejor solución, lo otra es un follón, y se perderá mucho tiempo en las actualizaciones. Sin embargo, si pasar todo no os gusta, podrías intentar montar un sistema en el que cuando no se encuentra un paquete, este se descargue de un repositorio automáticamente. De este modo se actualizaría todo en un servidor central, y después cada equipo obtendría lo que necesitase.

    Un saludo

  4. Chuidiang dijo:

    Luis, cada estación va en un armario junto a un montón de equipos hardware a los que controla. No tienen teclado, ratón ni pantalla. El programa java que corre en la estación maneja los equipos hardware y permite la conexión de clientes java-swing que van en los PCs. Hay equipos hardware comunes a todas las estaciones, pero otros son específicos para cada estación. Las estaciones muchas veces ni siquiera se ven en red entre ellas.

  5. atreyu dijo:

    Mmm parece que la adopcion de osgi podria ayudar en este caso añadiendo la complejidad de un framework claro :-/

    «The OSGi, the Open Service Gateway Initiative is a consortium Founded by Ericson, IBM, Oracle and Sun. It is also known as Dynamic Module System for Java. This architecture-specification defines a platform for running modular applications. This platform acts as a container that provides some common services such as life cycle management and security for example. OSGi is basically a framework for containing functional componets. In the OSGi terminology this component is called bundle. The OSGi specification defines the standard that clearly specifies how a bundle should be developed so as to plug into the OSGi platform.»

    from http://aneeshkumarkb.blogspot.com/

    mas en http://www.javaworld.com/javaworld/jw-03-2008/jw-03-osgi1.html?nhtje=rn_011509&nladname=011509

  6. Lek dijo:

    Lo que viene siendo un Eclipse, atreyu

    Yo sería partidario de los mega-jars… por si algún día hacen falta.

  7. Chuidiang dijo:

    Hola:

    El mega-jar no me parece mal siempre que se genere en el momento a partir de los jar más pequeños, aunque tenga todo. El problema del mega-jar es que la gente luego es menos cuidadosa con las dependencias. Si en vez de varios proyectos independientes, uno por módulo y que cada uno genera un jar, se hace un solo proyecto grande para todos los módulos, al final es fácil que acabe todo entremezclado y el mega-proyecto deja de ser modular. Y nos acaba pasando lo que ya nos ha pasado en varias ocasiones: nos tenemos que llevar el mega-jar a otro proyecto distinto en el que sólo necesitamos uno de los algoritmos del primer mega-jar.

    Sed buenos.

  8. FGR dijo:

    divide y vencerás

    muchas veces, en un proyecto surgen subproyectos pequeñitos, entonces hay que tener la habilidad de separarlo, y meterlo en un jar distinto

  9. Probablemente ya hayas instalado… así que la discusión es puramente teórica.

    Es cuestión de gustos, para mí elegancia = sencillez.

    Veo elegante un sólo instalador que pregunte qué servicios/aplicaciones deben correr en ESTA estación, se le pueden poner otros chiches (combinaciones predeterminadas, etc.) todo configurable.

    Si tienes problemas con una maquina tal vez la de al lado pueda hacerse cargo temporariamente con sólo tocar un archivo de configuración, etc. Eso me gusta.

  10. Chuidiang dijo:

    Hola Andres:

    Efectivamente, ya está instalado, pero sólo hasta que haya que reemplazar por la siguiente versión. Al final hemos hecho lo que comentas, un único instalador en el que se marca qué se quiere. La «complejidad» es que son muchos jar y ficheros de configuración distintos para cada estación/PC, por lo que el xml de izpack (con el que se hace el instalador), no es precisamente sencillo.

    Se bueno.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.