Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

la metaweb


Ensayos no destructivos en el ecosistema Java-Web, y algún off topic para desconectar ;-)

Montar el entorno de trabajo adecuado (2/2)

En esta segunda entrada terminaremos de instalar y configurar el software del entorno de desarrollo Java EE. Como IDE elegimos Eclipse, por ser el más extendido. El cambio de IDE no es algo costoso si nuestro proyecto está bajo Maven o Gradle.

Preliminares

Un IDE debe procurar al desarrollador un entorno que le permita ser lo más productivo posible, ocultando al máximo la complejidad de las tecnologías empleadas. Por ejemplo cuando creamos un Web service el IDE nos generará todas las clases y ficheros necesarios y nosotros sólo tendremos que enfocarnos en definir la API REST e implementar cada operación.

Existen otros IDEs además de Eclipse. En mi experiencia Netbeans es un buen entorno, con muchas ayudas, y maduro en su versión 8, además tiene detrás a una gran comunidad y a Oracle. Como dato en contra, durante el desarrollo de un proyecto mediano, en la versión 8.0, de cuando en cuando se quedaba "pensando" unos segundos. Por otro lado tenemos a JDeveloper, que es el IDE oficial de Oracle, muy potente y una opción recomendable para nuevos proyectos de gran tamaño, y si desarrollamos contra Oracle, y/o el servidor Weblogic. Para proyectos Spring está Eclipse STS que ofrece potentes wizards. Si nuestro servidor es JBoss o el nuevo WildFly podemos optar la solución adoptada aquí, Eclipse + JBoss Tools, o directamente por JBoss Developer Studio. La ventaja de optar por Eclipse es que podemos personalizar nuestro entorno instalando los plugins que elijamos. En definitiva tenemos múltiples opciones y la decisión muchas veces dependerá de las tecnologías que elijamos o nos imponga el tipo de proyecto o el propio cliente.

Ok, antes de nada vamos a crear una sencilla estructura de carpetas donde ir guardando el trabajo, y donde instalar el software. Por ejemplo la siguiente:

prac001 fig009.png

Bajo la carpeta TALLER creamos las siguientes:

  • BD: Para las bases de datos que vayamos instalando: MySQL, Derby, etc.

  • IDE: Para la instalación del IDE Eclipse. Instalad otros si queréis echarles un vistazo.

  • Servidor: Aquí irá nuestro JBoss EAP edición Community. Aunque si en el futuro vemos algo particular de Java EE 7 instalaremos WildFly o GlassFish.

  • Workspace: Para guardar los proyectos desarrollados en Eclipse.

El fichero comprimido es simplemente una forma rápida de hacer una copia de seguridad del workspace.

Instalación de Eclipse

Para instalar Eclipse, os aconsejo de nuevo que lo hagáis en Inglés, vamos a la página https://www.eclipse.org/downloads/ y elegimos la instalación para desarrolladores de Java EE.

prac001 fig010.png

Bajamos el fichero .zip, lo copiamos en la carpeta c:\TALLER\IDE\ y seleccionamos Extraer aquí, no hay programa de instalación. Entramos en la carpeta de Eclipse y doble click en eclipse.exe. Seleccionamos la carpeta c:\TALLER\workspace\ como espacio de trabajo. El IDE se carga y cerramos la pantalla inicial de bienvenida pulsando en el icono en la esquina arriba a la derecha.

prac001 fig015.png
No marquéis el check Use this as the default and do not ask again para así cambiar el workspace si queréis en un futuro. Si lo marcáis podéis volver a ver la pantalla de selección de la carpeta del workspace configurándolo en Window > Preferences > General > Startup and Shutdown > Workspaces.

Instalación de JBoss EAP, un servidor de aplicaciones Java EE 6

Ahora le toca al servidor. Nuestro entorno de trabajo necesita un servidor completo para depurar el código que estemos desarrollando. Navegamos a la página oficial del servidor JBoss en http://www.redhat.com/en/technologies/jboss-middleware/application-platform y pulsamos el botón TRY IT NOW dentro de la pestaña TRY, seleccionada por defecto.

prac001 fig020.png

Esto nos lleva a la página del servidor JBoss para desarrolladores.

prac001 fig022.png

Elegimos nuestro sistema operativo y pulsamos sobre el enlace del installer. Si no estamos ya logados saltaremos a la página de introducción de usuario y contraseña. Procedemos a la creación de una cuenta pulsando el enlace Create Account.

prac001 fig025.png

Después de introducir una serie de datos básicos aceptamos los términos del Programa de Desarrollador de Jboss. Esperamos a que la bajada del fichero acabe. Copiamos el fichero en la carpeta C:\TALLER\Servidor\ y lo arrancamos escribiendo el comando java -jar jboss-eap-6.3.0-installer.jar.

Se iniciará un sencillo wizard de instalación. Si os aparece un mensaje acerca del Firewall de Windows elegid la opción Permitir. A la hora de elegir la carpeta de instalación seleccionad como antes, C:\TALLER\Servidor\. Escribimos luego un nombre de usuario y una contraseña. Estas credenciales son las del usuario administrador del servidor, que lo gestionará a través del navegador usando la Consola de Administración. En la instalación de este servidor se eligieron las credenciales:

user

admin

password

abcd-1234

Apuntad siempre en un sitio seguro los datos de las credenciales que vayáis necesitando para recordarlas cuando sea necesario. En este Post ya llevamos dos credenciales.

Es interesante instalar también los ejemplos que trae el servidor. Son varios proyectos Maven que muestran ejemplos sencillos sobre el uso de las diferentes tecnologías Java EE incidiendo en las gestionadas desde Red Hat: JPA (Hibernate), CDI (Weld), EJB, JSF, etc. Si abrimos el pom.xml de alguno de estos proyectos veremos como se definen de las dependencias en proyectos que se despliegan en el servidor JBoss.

El wizard continúa por una serie de pantallas donde dejamos las opciones por defecto, la instalación finaliza a los pocos segundos. Y ya tenemos instalado un flamante servidor Java EE 6 en local. Podemos finalmente guardar y echar un vistazo al script de instalación.

prac001 fig030.png

Probando nuestro nuevo entrono de trabajo

Comprobamos que la instalación es correcta desplegando la aplicación web Hello World! localizada en los ejemplos recién instalados. Para arrancar manualmente el servidor abrimos una consola de comandos, vamos a la carpeta bin\ dentro de la carpeta del servidor y lo iniciamos escribiendo standalone.bat. Es importante no cerrar la ventana de comandos ya que si lo hacemos el proceso en que se ejecuta el servidor se terminará y éste se parará. Así que dejamos la ventana de comandos abierta, aunque sí podemos minimizarla.

Si antes no instalaste los ejemplos del servidor puedes bajarlos ahora en el enlace jboss-eap-quickstarts-6.3.0.GA.zip. Otra alternativa es obtener la aplicación desde Maven a partir del arquetipo maven-archetype-site-simple. Puedes consultar el Post anterior para recordar cómo lo hicimos.
prac001 fig035.png

Ahora abrimos otra consola de comandos y situamos en la carpeta del proyecto web helloworld C:\TALLER\Servidor\EAP-6.3.0\jboss-eap-quickstarts-6.3.0.GA\helloworld\.

prac001 fig040.png

Dentro de la carpeta del proyecto Maven escribimos el comando mvn clean install jboss-as:deploy. Se inicia la bajada de los artefactos de dependencias y plugins necesarios y finalmente el comando se ejecuta. Con una sola línea de comando hemos llevado a cabo todo el ciclo de construcción del proyecto incluyendo el despliegue de la aplicación en nuestro recién instalado servidor. Aún con un proyecto tan simple podemos apreciar aquí la potencia de Maven. Sí observamos el comando vemos que hemos ejecutado dos phases y un goal. La primera fase, clean, elimina cualquier fichero creado en un ciclo de construcción anterior, la segunda ejecuta todas las fases de ciclo por defecto, incluida la fase install, que crea una versión snapshot en nuestro repositorio local. Finalmente el goal deploy del plugin de Red Hat jboss-as toma el artefacto instalable de la carpeta target\ dentro de la carpeta del proyecto y lo despliega en el servidor.

Abrimos un navegador y vamos a la dirección http://localhost:8080/jboss-helloworld y si todo ha ido bien veremos el conocido mensaje Hello World!.

prac001 fig050.png

¿Y para desinstalar la aplicación? Otra única línea de comando: mvn jboss-as:undeploy. Refrescamos la ventana del navegador para ver el error 404 de recurso no disponible.

El plugin jboss-as es capaz de gestionar desde Maven cualquier operación contra el servidor JBoss. Para usarlo sobre un proyecto como acabamos de hacer sólo es necesario declararlo en la sección <build> del fichero pom.xml. Otra alternativa es incluir el goal de despliegue en la phase final del ciclo por defecto, la fase install, en el fichero pom.xml, y ejecutar entonces el comando mvn clean install, que ahora sólo hace referencia a las dos fases. En el fichero pom.xml tendríamos que tener lo siguiente:

<project>
    ...
    <build>
        ...
        <plugins>
            ...
            <plugin>
                <groupId>org.jboss.as.plugins</groupId>
                <artifactId>jboss-as-maven-plugin</artifactId>
                <version>7.7.Final</version>
                <executions>
                    <execution>
                        <phase>install</phase>
                        <goals>
                            <goal>deploy</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            ...
        </plugins>
        ...
    </build>
...
</project>

Paremos el servidor. Como fue arrancado desde una consola de comandos lo paramos cerrándola. Nos vamos a la ventana de la consola y pulsamos Ctrl + C. Escribimos S si nos pregunta si queremos finalizar el archivo por lotes y escribimos exit para cerrar la ventana.

Vamos ahora a reemplazar la ventana de comando por nuestro IDE para cargar el proyecto y probarlo. Abrimos Eclipse. Una vez dentro del IDE lo primero que hacemos es asegurarnos de que el JRE que se usará sea el contenido en el JDK instalado y no un JRE público fuera del JDK. Esto es necesario porque Eclipse necesita un JDK, como cualquier herramienta de desarrollo de este tipo, y no le basta sólo con un JRE. Me voy a Windows > Preferences > Java > Installed JREs y si el JRE no es el incluido en el JDK lo borramos, añadimos el incluido en el JDK y lo marcamos como JRE por defecto.

prac001 fig051.png
Si vamos a experimentar con los ejemplos del servidor en Eclipse es aconsejable comprimir antes la carpeta raíz que los contiene y tener así una copia de seguridad que nos permita recuperar el contenido de los ficheros originales cuando lo necesitemos.

El siguiente paso es importar el proyecto a Eclipse. Me voy a File > Import > Maven > Existing Maven Projects. Click en Next y luego en Browse…​ localizamos la carpeta del proyecto en C:\TALLER\Servidor\EAP-6.3.0\jboss-eap-quickstarts-6.3.0.GA\helloworld\.En el recuadro Projects se seleccionará automáticamente el fichero POM del proyecto. Pulsamos en Finish y se nos pregunta si deseamos que nos muestre el cheatsheet que es el conjunto de notas del proyecto, si contestamos afirmativamente luego podemos cerrarlas.

prac001 fig052.png

Arrancamos de nuevo el servidor de forma manual desde la ventana de comandos como hicimos antes. Para desplegar el ejemplo importado en el servidor pulsamos botón derecho sobre el proyecto y Run As… > Run Configurations > Maven Build, y creamos una nueva configuración de arranque rellenando el campo Goals con clean install jboss-as:deploy. Pulsamos el botón Apply y a continuación el botón Run para que Maven realice el ciclo. En la ventana Consola de Eclipse se puede observar la salida de texto del plugin de Maven durante la ejecución del ciclo de construcción.

Como antes para comprobar que la aplicación ha sido desplegada de nuevo vamos al navegador y escribimos la URL http://localhost:8080/jboss-helloworld.

Observemos como se muestra nuestro proyecto dentro de Eclipse. En la perspectiva inicial por defecto mostrada vemos la estructura del proyecto en un recuadro a la izquierda de la pantalla. Aquí podemos usar tres views de Eclipse diferentes: Package Explorer, Project Explorer y Navigator. Esta última nos presenta la estructura de directorios del proyecto sin más aderezos y en ocasiones es más limpia y clara. En las otras dos Eclipse aporta información adicional en forma de iconos y carpetas extra.

Si nos fijamos en la view Package Explorer o en la Proyect Explorer, si no está abierta lo hacemos en Window > Show Wiew > Other…​, es probable que observemos un icono de Warning sobre el de proyecto. Vayamos ahora a la pestaña Problems en la parte inferior de la pantalla para ver a que se debe esto.

prac001 fig055.png
A partir de la versión 1.4 la denominación y formato de versión cambia para el kit de desarrollo de Java Standard Edition. La versión cuatro se denomina J2SE 1.4 Development Kit y la cinco pasa a ser Java SE 5 Development Kit.

Lo que nos dice Eclipse es que nuestro proyecto está configurado, en el fichero POM de Maven, para el JDK 6 y en nuestra máquina tenemos uno distinto. Si tenemos actualizado el JDK es probable que se trate de la versión 8. Veamos qué significan las dos entradas de la figura anterior:

  • maven.compiler.source: Indica al compilador la versión del lenguaje que seguir al leer nuestro código fuente. Por ejemplo si el valor que fijo para mi proyecto es 1.4 entonces no será capaz de interpretar una clase genérica, que fue introducida en el JDK 5, y obtendremos un error de compilación si existe alguna. Si por el contrario fijo digamos la versión 7 para un código antiguo, sea de la versión 1.4, entonces también puedo obtener un error si por ejemplo en el código antiguo usé la palabra clave enum, ya que los enumerados se introducen en la versión 5 y en Java 7, al ser posterior, saltaría el error. Esto puede verse en la lista de incompatibilidades de la versión 5 de Java respecto de la anterior aquí.

  • maven.compiler.target: Le dice al compilador para qué máquina virtual queremos compilar. En general la máquina virtual de Java es compatible hacia atrás de modo que código compilado para la máquina 6, por ejemplo el código de un proyecto antiguo, también se ejecutaría en un servidor con la máquina virtual 8.

Dicho de otra manera, source es la versión de código Java en la que el compilador interpreta el fichero fuente cuando genera el bytecode. Y target es la versión que quiero de bytecode, que se corresponde con la versión de la máquina virtual que lo interpreta. Si queremos que un proyecto antiguo programado en la versión 1.4 se ejecute en una máquina virtual 7 entonces fijo los valores source sería 1.4 y target 7. Además, si tenemos ese mismo proyecto ya compilado en su día, con source 1.4 y target 1.4, seguirá funcionando si actualizamos la máquina virtual en la máquina del servidor desde la 1.4 a la 7 porque se tiene compatibilidad hacia atrás, sin embargo en una máquina virtual antigua no siempre podré ejecutar código compilado en versión más reciente.

prac001 fig055.png

Por lo tanto, para que desaparezca el warning, si tenemos instalada la versión 8 del JDK editamos en Eclipse el fichero pom.xml cambiando los dos valores anteriores a 1.8 y además actualizamos el proyecto pulsando botón derecho sobre el icono del proyecto > Maven > Update Project…

prac001 fig056.png

Nuestro primer plugin para Eclipse: las JBoss Tools

El último componente que vamos añadir a nuestro banco de trabajo de partida va a proporcionarnos un Eclipse vitaminado, agilizando bastante nuestro trabajo de desarrollo diario. Se trata de un conjunto de plugins (el plugin es el mecanismo empleado en Eclipse para suministrar características adicionales al IDE) bajo el nombre de JBoss Tools. Entre ellos el que usaremos en este Post es uno que nos permite controlar nuestro servidor JBoss desde Eclipse evitando tener que recurrir a la ventana de comandos.

Podemos ver los diferentes componentes contenidos en las JBoss Tools en la barra de menús de Eclipse en la opción Help > Installation Details. En la figura siguiente aparece seleccionado el componente mencionado para el acceso al servidor. Los plugins para cada componente se listan en la pestaña Plugins.

prac001 fig058.png

En la URL JBoss Tools - Features podemos ver la cantidad de tecnologías dentro y fuera del estándar Java EE para las que nos ofrece soporte. La parte de gestión del servidor lo proporciona se presenta en el enlace Server Tooling. El resto de características son muy interesantes, tenemos soporte para Hibernate (Persistencia) con ayudas como la generación automática de Entities a partir de la base de datos o un editor de Criteria y otro para consultas HQL. También hay soporte para CDI a la hora de escribir el código para nuestros beans, o soporte para Arquillian, un framework para pruebas unitarias en aplicaciones web empresariales. Para el aprendizaje de todas estas tecnologías el secreto es el mismo: Lectura de teoría básica para empezar, a continuación montar un aplicación básica y practicar y practicar tocando aquí y allá y viendo los efectos producidos, y vuelta a la documentación para consultar, en un proceso ciclico que nos dará cada vez más confianza en el uso de esa tecnología.

Para instalar las Tools abrimos Eclipse y vamos a la opción del menú Help > Eclipse Marketplace. En la entrada Find escribimos JBoss Tools (Luna) y en unos segundos aparecerá la entrada en la lista de productos, seleccionar y pulsar Install para que comience la instalación. En la siguiente pantalla dejamos marcados todos los plugins y pulsamos Confirmar.

prac001 fig065.png

Al finalizar la instalación se nos pedirá que permitamos reiniciar Eclipse. Al entrar después del reinicio se mostrará la página de Jboss Central que no es más que una pantalla de acceso a información relacionada con Jboss Tools y Jboss Studio (Eclipse + Jboss Tools). Desmarcamos la opción Show on Startup y cerramos la ventana.

prac001 fig070.png

Para acceder de nuevo a la pantalla pulsaremos sobre el iconoprac001-fig075.pngen la barra de herramientas.

Antes de añadir nuestro servidor a Eclipse desinstalamos nuestra aplicación Hello world! para que no entre en conflicto con el nuevo despliegue automático. Abrimos una última vez una ventana de consola para esto, y ejecutamos el comando standalone.bat de la carpeta del servidor para iniciarlo.

prac001 fig076.png

Abrimos otra ventana de comando, vamos a la carpeta de la aplicación Hello world!, similar a C:\TALLER\Servidor\EAP-6.3.0\jboss-eap-quickstarts-6.3.0.GA\helloworld y escribimos mvn jboss-as:undeploy para desistalarla.

prac001 fig078.png

Paramos ahora el servidor seleccionando la ventana de comandos donde lo iniciamos y pulsando la combinación de teclas Ctrl+C. Volvemos a Eclipse, nos vamos a la pestaña Servers y pulsamos el enlace para crear un nuevo conector a nuestro servidor Jboss.

prac001 fig080.png

Seleccionamos la plataforma EAP 6.1+ para iniciar el wizard de configuración del Connector y pulsamos Next.

prac001 fig085.png

Dejamos los valores como están en la siguiente pantalla y pulsamos Next. En la siguiente pantalla tenemos que proporcionar la carpeta de instalación de nuestro servidor y la localización de la máquina virtual.

prac001 fig090.png

Pulsamos el botón Browse… y seleccionamos el directorio del servidor y a continuación seleccionamos el JRE de nuestro JDK, el mismo que configuramos para Eclipse, para que así la máquina virtual que ejecute las aplicaciones sea la del JDK que compila. Para ello pulsamos en la opción Alternate JRE y seleccionamos el JRE. Es posible que se muestre el mensaje This runtime type requires a JDK. The selected virtual machine is not recognized as a JDK.. Sin embargo se trata se un mensaje equivocado provocado por la versión del JDK. Pulsamos Next de nuevo.

prac001 fig095.png

En la siguiente pantalla añadimos al servidor nuestro proyecto jboss-helloworld con el botón Add para que éste se despliegue al iniciar.

prac001 fig100.png

Y ya podamos controlar nuestro servidor desde Eclipse! Si nos vamos a la pestaña Servidores vemos que ahora existe un icono para el servidor y si lo expandimos observamos que nuestra aplicación está allí enlazada. Arranquemos ahora, simplemente pulsando sobre el icono del servidor con el botón derecho y seleccionando la opción Start.

prac001 fig105.png

Además en la pestaña Console podremos ver los mensajes de salida del log del servidor fechados y con información del módulo que lo genera. Pulsamos botón derecho de nuevo sobre el servidor y seleccionamos Show In > Console. En un primer vistazo podemos ver los diferentes mensajes del inicio del servidor, entre ellos por ejemplo el de la carga del módulo Weld CDI que usa nuestra pequeña aplicación de prueba para inyectar el bean de servicio que genera la cadena Hello World! que se muestra.

prac001 fig110.png

La aplicación será accesible desde nuestro navegador en la URL http://localhost:8080/jboss-helloworld.

Vamos a echar un vistazo a la consola de administración del servidor en la URL http://127.0.0.1:9990 o la equivalente http://localhost:9990. 127.0.0.1 no es más que la dirección IP de nuestra propia máquina, que es donde tenemos instalado nuestro servidor. Es equivalente al nombre localhost por convención. En Windows esto se define en el fichero C:\Windows\System32\drivers\etc\hots.

Necesitaremos las credenciales que definimos al crear el servidor (usuario: admin, contraseña: abcd-1234). La consola de administración tiene muchas posibilidades que se irán conociendo con la práctica. Por ejemplo para ver las aplicaciones instaladas me voy a Runtime > Server > Manage Deployments.

prac001 fig115.png

Muy bien, para terminar paramos el servidor (Ahora ya sin ventana de comandos!) bien desde la pestaña Console, pulsando el icono en forma de cuadrado rojo a la derecha, o bien pulsando con el botón derecho en Eclipse sobre nuestro recién creado enlace al servidor.

prac001 fig120.png

Hasta aquí el segundo Post, que no es poco. Con el entorno montado lo siguiente será crear una aplicación inicial con los elementos básicos y sobre la que podamos ensayar las últimas tecnologías y herramientas a través de la implementación funcionalidades nuevas que se irán añadiendo. En el siguiente Post empezaremos a montar esta aplicación y lo haremos desde cero y sin usar ningún wizard, veréis que una aplicación Java EE no es más que un conjunto de carpetas y ficheros que cumplen con una serie de estándares. Hasta pronto!


About the author

La metaweb


Discussions

comments powered by Disqus