December 04, 2012

JPA + Logger slf4j

Objetivo:


   Entender e implementar el sistema de logging para los SQL de JPA en projectos Java.


Herramientas:

Introducción:


   SLF4J como lo dice su nombre en inglés es una fachada (facade) que estandariza el formato de hacer logging (mensaje que entregan información a los desarrolladores), para poder intercambiar entre distintos tipos de implementaciones sin tener que realizar cambios en el código.


Configuración:

1.-   Añadir el paquete slf4j-log4j12 en el classpath. En particular, yo lo he hecho con maven.



Lo anterior agrega las dependencias slf4j-apilog4j


2.- Configurar persistence.xml y log4j.xml

persistence.xml:




En el cógigo anterior se listan los niveles de logging que existen en eclipselink. Luego, se define el nivel de "log" en FINE y finalmente se indica que "logger" se utilizará. En particular, indican 3 posibles alternativas.

3.- Finalmente, se debe implementar las clases que conectará el logger que se deseea utilizar con eclipselink. Por ejemplo, yo utilizé una creada por lukas

package cl.molavec.punto.db.eclipselink;

import org.eclipse.persistence.logging.AbstractSessionLog;
import org.eclipse.persistence.logging.SessionLog;
import org.eclipse.persistence.logging.SessionLogEntry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class CustomSessionLogger extends AbstractSessionLog implements SessionLog {
 public static final Logger LOG = LoggerFactory.getLogger(CustomSessionLogger.class);
 public void log(SessionLogEntry sessionLogEntry) {
  switch (sessionLogEntry.getLevel()) {
   case SEVERE:
    LOG.error(sessionLogEntry.getMessage());
    break;
   case WARNING:
    LOG.warn(sessionLogEntry.getMessage());
    break;
   case INFO:
    LOG.info(sessionLogEntry.getMessage());
    break;
   case FINE:
    LOG.info(sessionLogEntry.getMessage());
    break;
   default:
    LOG.debug(sessionLogEntry.getMessage());
         }
 }
}





aunque también es posible utilizar otras como las que se ofrecen en el tutorial para usar log4j con eclipselink.
| The End |

November 24, 2012

Maven + Eclipse

Se detecta un problema al hacer "Maven Update" desde eclipse

Pero dice que le falta tools.jar versión 1.5

Para solucionarlo, hay que agregar en eclipse.ini :

-vm
/opt/java/jdk1.6.0_37/bin

En la primera línea del archivo
Ojo que es el jdk

November 23, 2012

Campos de entrada en openoffice

Como ingresar campos:

 http://losremediosinformaticos.blogspot.com/2008/12/insertar-campos-de-entrada-en.html|


The End |

November 18, 2012

Fresh Workspace

Como tener un workspace fresco de eclipse-maven.
(Revisar los pasos todos los pasos y ver si hay algunos que se puedan omitir)

Limpiar  workspace:
  1. En Eclipse sacar todos los proyectos, con delete (sin eliminar los datos), luego cerrar eclipse
  2. Eliminar la carpeta servers del workspace y .metadata
    • rm -rf servers .metadata  
  3. Dentro de cada proyecto eliminar .settings .proyect y .classpath
    • rm -rf .settings .proyect  .classpath
  4. Eliminar la carpeta target con maven
    • mvn clean
Rehacer  workspace:
  1. Abrir Eclipse
  2. Agregar compilador por omisión y definir donde se encuentra el jdk
    •  Windows/preference/java/compiler 1.6
  3. Importar proyecto mediante maven
    •  File/import/Existing maven proyect
  4. En cada proyecto properties agregar los facets
    •  Convert to facet Form
  5. Agregar Junit4
    • properties/java build path/libraries/add libraries/junit
  6. Crear nuevo servidor, agregar un servidor tomcat 7, usar el jdk por omisión
  7. En la configuración del servidor
    • publishing : never publish automatically
  8. En el Deployment assembly del proyecto web que se va a ejecutar, se debe agregar Maven, se deben agregar los proyectos del cual depende, además y muy importante, debe estar bien mapeado, debe tener todos los siguientes sources y deploy path.
    (Determinar cuales son imprecindibles, yo creo que por ejemplo /src/main/java no lo es porque eso agregaría los .java al war)
  9. En el Build Path se pueden determinar rutas para que sea más fácil acceder a todo al contenido, cuidado con los bucles, si los hay habrá que usar exclude, ejemplo: