Mostrando entradas con la etiqueta jee7 glassfish. Mostrar todas las entradas
Mostrando entradas con la etiqueta jee7 glassfish. Mostrar todas las entradas

miércoles, 27 de noviembre de 2013

Tests Arquillian con Maven y Gradle

Recientemente publiqué una entrada: Aplicación CRUD con JEE7, en la que explicaba que había subido un proyecto a github: jee7-crud, con lo básico para realizar una aplicación CRUD con: JSF, EJB, JPA, JAX-RS.

Bien, acabo de actualizar jee7-crud, y le he metido herramientas básicas de testing:

  • JUnit
  • Mockito
  • Arquillian

Lo he preparado para que funcione con las dos herramientas de construcción de proyectos más populares actualmente: Maven y Gradle.

Este proyecto, A mi personalmente, me sirve de base para comenzar otros proyectos nuevos. Espero que os sea de alguna utilidad.

lunes, 4 de noviembre de 2013

Configurar Logback en Glassfish

Por defecto Glassfish gestiona el logging a través de java.util.Logging. En este enlace se explica cómo configurarlo: Configuring the Logging Service

Tal y cómo está montado, algo tan sencillo como modificar el formato de las trazas, requiere subir un jar propio con un Handler a medida. (http://stackoverflow.com/questions/9609380/glassfish-3-how-do-you-change-the-default-logging-format)

Personalmente prefiero configurar Glassfish para poder utilizar Logback. Los pasos son los siguientes:

Añadir Jars

Es necesario copiar en el directorio glassfish/lib/endorsed las últimas versiones de las siguientes librerías:

Arrancar Logback en el arranque

Abrimos el fichero "glassfish/domains/domain1/config/domain.xml" y en la primera sección "java-config" añadimos:

-Dlogback.configurationFile=file:///${com.sun.aas.instanceRoot}/config/logback.xml

Configurar Logback

Creamos el fichero "glassfish/domains/domain1/config/logback.xml" a nuestro gusto. Por ejemplo:




 
  /opt/glassfish.log
  
   
   logFile.%d{yyyy-MM-dd}.log

   
   30
  

  
   %d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg%n
   
  
 

  
        

 
  
 


Podríamos configurar varios appenders con varios loggers para que cada aplicación web desplegada escriba en un fichero diferente.

Loggear desde nuestra aplicación

Desde nuestra aplicación tendremos que añadir una dependencia con slf4j-api:

provided 'org.slf4j:slf4j-api:1.7.5'

Por ultimo desde nuestro código ya podemos incluir las librerías de slf4j y loggear sin problemas:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

....

private static final Logger logger = LoggerFactory.getLogger(OurClass.class);

....

logger.debug ("log message");

viernes, 25 de octubre de 2013

Aplicación CRUD con JEE 7

A continuación os voy a compartir el código de una simple aplicación web que utiliza JEE7 y se despliega en un Glassfish 4.

Descargar código fuente

El código está basado en la siguiente entrada de Arun Gupta. Concretamente el código original se encuentra aquí. Recomiendo la lectura de la entrada entera. Me parece que hace una buena comparación entre Spring y JEE6, aunque personalmente creo que se equivoca en un aspecto. En uno de los puntos hace una comparación de rendimiento entre Glassfish+JEE6 y Glassfish+Spring. Creo que lo más fiel a la realidad sería utilizar Tomcat+Spring, ya que la aplicación programada con Spring no va a utilizar gran parte de las funcionalidades del Glassfish.

El código original viene con un sencillo CRUD sobre una entidad "Persona". Las tecnologías que se utilizan son: JSF, EJB, JPA.

El código fuente con mis modificaciones os lo podéis descargar aquí. He añadido JAX-RS para exponer un Servicio WEB REST a través de JSON.

Una vez que tengamos el código descargado podemos desplegarlo a través de nuestro IDE, o generar el WAR a través de maven (mvn package) o gradle (gradle war) y desplegarlo manualmente.

Para que la aplicación funcione será necesario configurar un Datasource en Glassfish. Tal y cómo se indica en el fichero "src/main/resources/META-INF/persistence.xml", la aplicación web se conecta al nombre JNDI "jdbc/myDataSource".

En este caso voy a explicar los pasos para crear un Datasource que se conecte a una base de datos Postgresql en Glassfish.

Una vez arrancado el glassfish vamos a http://localhost:4848 , Resources -> JDBC -> JDBC Connection Pools y pulsamos sobre el botón New.


En esta pantalla rellenamos los siguientes campos:

  • Pool Name: MyDatabase. Ponemos el nombre de nuestra base de datos, o el nombre que más rabia nos de.
  • ResourceType: javax.sql.ConnectionPoolDatasource
  • Database Driver Vendor: Postgresql

y pulsamos sobre Next. La parte superior de la siguiente pantalla tiene que quedar como en la siguiente imagen. No tocamos nada.



En la parte inferior tendremos que configurar las siguientes propiedades de conexión con nuestra base de datos:
  • User
  • DatabaseName
  • Password
  • ServerName
  • PortNumber. El puerto por defecto del postgresql es 5432


Al pulsar sobre "Finish" ya tenemos nuestro pool creado. Ahora nos falta crear la entrada JNDI que conecte con el pool que hemos creado. Para ello vamos a Resources -> JDBC -> JDBC Resources



Creamos un nuevo Resource pulsando sobre el botón "New" y configuramos los siguientes campos:
  • JNDI Name: jdbc/myDatasource
  • Pool Name: Elegimos el nombre del pool que acabamos de crear.


Una vez configurado el Datasource la aplicación web ya debería poder desplegarse y funcionar perfectamente.