Del autor

Esta serie de tutoriales está dirigida a aquellos entusiastas y curiosos del mundo de la programación que desean iniciarse con el lenguaje Java.
Los temas tratados en los documentos que componen este blog serán agregados periódicamente y en el orden adecuado para un aprendizaje organizado de los conceptos necesarios.
Los contenidos fueron seleccionados como consecuencia de mi experiencia como instructor Java, partiendo de la base de que el lector no cuenta con conocimientos previos de programación.
Los únicos requisitos para seguir este blog son: contar con una computadora personal, y saber utilizar el sistema operativo instalado, ya sea Windows o Linux; Esto es, ser capaz de instalar, desinstalar y ejecutar una aplicación, copiar, mover, eliminar, comprimir y descomprimir archivos.
Por favor, siéntase libre de hacer sus comentarios, ya que éstos me permitirán ir mejorando los contenidos.
Desde ya, estoy muy agradecido de que lea este blog.

sábado, 20 de junio de 2015

Tutorial 04 - Despliegue y ejecución de aplicaciones Java SE

  Este tutorial muestra las diferentes alternativas para distribuir y ejecutar una aplicación Java de escritorio en producción.


1. Compilación y ejecución
  Sin tener en cuenta las facilidades que brindan los IDEs actuales, si se quisiera crear y ejecutar una aplicación Java SE, se deberían seguir los siguientes pasos:
  a. Escribir el código fuente en un archivo de texto plano con el nombre de la clase pública y la extensión "java".
  b. Compilar ese archivo de texto con "javac", el compilador de Java que se encuentra en el directorio "bin" de la instalación del JDK.
     Esta compilación produce un archivo con el nombre de la clase y la extensión "class".

     Aquí existe una de las diferencias fundamentales entre Java y otros lenguajes de programación de alto nivel.
     Para entender esta diferencia se analiza primero cómo funciona un compilador de otros lenguajes:
     Cuando un compilador de un lenguaje como C o C++, compila el código fuente, produce código nativo para una determinada plataforma, esto, es una combinación particular de sistema operativo (S.O.) y arquitectura de hardware, en donde puede ser ejecutado.
     Si se quiere ejecutar la misma aplicación en otra plataforma, se debe obtener el compilador para esta nueva plataforma y compilar nuevamente el código fuente. Además, como las arquitecturas y los compiladores son diferentes, también difiere la interpretación del código fuente.
     Con Java, en cambio, el compilador produce "bytecodes" en un archivo ".class", que en lugar de ser nativo para una plataforma determinada, es un código intermedio capáz de ser interpretado por cualquier Java Virtual Machine. Y como Oracle distribuye JVMs para diferentes plataformas (S.O. + arquitectura de hardware), el mismo archivo compilado en Java puede ser ejecutado en diversas plataformas.
     En conclusión, con Java, lo que cambia entre  plataformas es la JVM, pero el producto de la compilación es el mismo.

  c. Ejecutar la JVM para que cargue e interprete el bytecode de la o las clases (archivos ".class"), con lo cual se obtiene el resultado de la aplicación.

     Es importante hacer notar que interpretar el bytecode, como lo hace la JVM, no es exactamente el mismo significado que tiene la palabra "interpretar" para los lenguajes interpretados como algunas versiones de Basic.
     La JVM carga el bytecode, lo interpreta y lo compila para obtener código nativo para la plataforma en la cual se está ejecutando.
     Por esta forma de trabajar, Java fue fuertemente criticado: tener una doble compilación e interpretar el código puede hacer la ejecución mas lenta. En las primeras versiones de la JVM esto era cierto. Pero a medida que fueron mejorando la interpretación y compilación, el rendimiento en la ejecución de las aplicaciones Java igualó al de otros sistemas y lenguajes como C++.

2. Obtención de los archivos para despliegue
  Se entiende por despliegue, al conjunto de acciones que deben realizarse para poner una aplicación en producción. Esto es, luego de haber desarrollado la aplicación y haber comprobado que los resultados de su ejecución en el ambiente de desarrollo son los esperados, se obtienen los archivos compilados para que se trasladen al ambiente de producción y se realicen las configuraciones que fuesen necesarias.
  Como se describió anteriormente, la aplicación Java estará constituída por una o varias clases (archivos ".class") distribuídas en una estructura de directorios particular (determinada por la sentencia package de cada clase).

  En Eclipse, la aplicación puede obtenerse desde la vista "Navigator".
  Si se selecciona "Window -> Show View -> Navigator" desde la barra de menús, se abre el navegador (solapa "Navigator") en el panel izquierdo del banco de trabajo.


  Esta vista muestra el proyecto tal como se encuentra en el sistema de archivos (disco duro, por ejemplo).
  Si en esa vista se abre el directorio del proyecto "PrimerProyecto", se encuentra el directorio "bin". (El nombre de este directorio puede cambiarse en el asistente, cuando se crea el proyecto.)
  Dentro del directorio "bin" se encuentra la estructura de directorios y clases, tal como deben ser desplegados.


  Si se copia esta estructura completa, por ejemplo, haciendo clic derecho en el primer directorio ("ar") y seleccionando "Copy" desde el menú contextual, esta aplicación puede ser almacenada en cualquier lugar del sistema de archivos de la computadora para producción.
  (También puede obtenerse esta estructura diréctamente accediendo al directorio del proyecto con un explorador como Windows Explorer, Nautilus o Dolphin.)

  Esta forma de obtener los archivos de despliegue es sencilla. Pero comienza a complicarse a medida que las aplicaciones son más grandes, en cuanto a cantidad de clases se refiere.
  De hecho, no es tan raro encontrar aplicaciones Java SE con varios cientos de clases, distribuídas en varios paquetes, y por tanto, directorios diferentes.
  En tales casos, replicar la estructura de directorios con sus clases puede ser complicado y propenso a errores.
  Por tal motivo, es usual utilizar el empaquetador de Java "jar", que está incluído con todas la herramientas del JDK (directorio "bin").
  El empaquetador produce un único archivo comprimido, con el nombre de la aplicación y extensión "jar", con la totalidad de la estructura de directorios y clases de la aplicación. Además, genera un archivo de texto llamado "MANIFEST.MF" incluído en un directorio "META-INF" dentro del archivo comprimido. Este archivo contiene información sobre cuál es la clase principal del proyecto por donde deberá comenzar la ejecución de la aplicación, entre otras cosas.
  (El archivo comprimido empaquetado puede ser descomprimido por cualquier aplicación capaz de manipular archivos ".zip", tal como "7zip".)
  Para obtener el archivo empaquetado de la aplicación, se debe hacer clic derecho en en el nombre del proyecto en el "Project Explorer" y seleccionar "Export...", con lo que se abre el siguiente diálogo:



  Allí, en la lista se debe elegir "Runnable JAR file" dentro de la carpeta "Java", y presionar el botón "Next >".
  El siguiente cuadro es el asistente para exportar archivos "jar" ejecutables. Se debe seleccionar de la lista desplegable "Launch configuration", el nombre de la clase principal del proyecto desarrollado.
  En el campo de texto "Export destination", se puede navegar con el botón "Browse" hasta el directorio donde se guardará el archivo ".jar", y luego se debe completar el cuadro de texto con el nombre de la aplicación, en este caso "PrimerProyecto.jar".
  En la sección "Library handling", se elige la forma en que serán exportadas las librerías de este proyecto. Por lo general, se selecciona "Package required libraries into generated JAR", con lo que las librerías son incluídas en el archivo comprimido. (En el caso del proyecto desarrollado en tutoriales anteriores, no se incluyen librerías adicionales a las contenidas en el ambiente de ejecución JRE.)



  Presionando el botón "Finish" en el asistente, se crea el el archivo "PrimerProyecto.jar" en el directorio establecido.
  Nota: Si se abre un cuadro de diálogo durante la exportación, con la leyenda "JAR export finished with warnings. See details for additional information.", puede pasarse por alto seleccionando el botón "OK".
  El archivo obtenido, es el archivo de despliegue que se utiliza en producción.

  En NetBeans, la solapa "Files" del panel izquierdo, muestra la disposición en el sistema de archivos de los distintos componentes del proyecto.
  Si el proyecto fue ejecutado al menos una vez, en el directorio "build" se encuentra la estructura de directorios y las clases que conforman la aplicación.


  A través de un navegador del sistema de archivos como el Windows Explorer, Nautilus o Dolphin, puede obtenerse la aplicación para ser desplegada, copíandola en la computadora de producción.
  Si como se mencinó anteriormente, la estructura de archivos es complicada, puede obtenerse la aplicación empaquetada, si en la solapa de "Projects", en el panel izquierdo de NetBeans se selecciona con clic derecho el nombre del proyecto ("PrimerProyecto"), y en el menú contextual se elige "Clean and Build".
  Luego de esa operación, en la solapa "Files" del panel izquierdo de NetBeans, se habrá creado un directorio llamado "dist" (por distribution), conteniendo el archivo de despliegue empaquetado, "PrimerProyecto.jar", y un archivo de texto "README.TXT" que explica cómo se debe ejecutar la aplicación en producción.


  El archivo de despliegue puede obtenerse a través del sistema de archivos.

3. Ejecución de la aplicación en producción
  Si lo que se obtuvo como aplicación es la estructura de directorios con los archivos de clases (".class"), se debe replicar esta estructura en la computadora de producción.
  Nota: La computadora de producción debe tener el ambiente de ejecución JRE de una versión igual o superior a la versión del JDK con la cual fue compilada la aplicación durante el desarrollo.
  Donde se haya replicado esta estructura de directorios con sus clases, la aplicación puede ser ejecutada con:
java ar.com.adriancordoba.app.console.primerproyecto.Programa
  (Nótese que el nombre de la clase no lleva la extensión ".class".)
  A continuación se muestra un terminal Linux, donde se visualiza la versión instalada de Java ("java -version"), la estructura de directorios desplegada (copia de la obtenida desde el navegador de Eclipse o de NetBeans), y la ejecución de la aplicación:



  De forma análoga, se ejecuta la misma aplicación en un terminal de caracteres de Windows ("Command prompt" o "Símbolo de sistema"):


  Si como es usual, se obtuvo el archivo de despliegue empaquetado, "PrimerProyecto.jar", puede ser ejecutado en producción como:
java -jar PrimerProyecto.jar
   Acontinuación se muestra un terminal Linux ejecutando la aplicación empaquetada:


  En un terminal de caracteres de Windows la ejecución de la aplicación es idéntica:


  El archivo empaquetado puede obtenerse en es siguiente enlace: PrimerProyecto.jar

No hay comentarios.:

Publicar un comentario