tattletale_logo_600px
¿Alguna vez te has encontrado un problema al ejecutar tu aplicación web porque varios de los ficheros jar incluidos tienen las mismas clases en diferentes versiones y la que coge el servidor de aplicaciones es la incorrecta?

Utilizando la herramienta Tattletale de JBoss y su plugin Maven, puedes encontrar fácilmente si tienes clases duplicadas en la carpeta WEB-INF/lib de tu WAR y más importante, hacer que falle la construcción automáticamente si eso ocurre, de modo que no sea demasiado tarde y te ocurra en producción.

Simplemente añade la siguiente configuración del plugin en el pom de tu WAR, en la sección build/plugins. También se puede utilizar en EAR, assemblies y otros tipos de proyectos.

	
<plugin>
  <groupId>org.jboss.tattletale</groupId>
  <artifactId>tattletale-maven</artifactId>
  <version>1.1.2.Final</version>
  <executions>
    <execution>
      <phase>verify</phase> <!-- needs to run after WAR package has been built -->
      <goals>
        <goal>report</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <source>${project.build.directory}/${project.build.finalName}/WEB-INF/lib</source>
    <destination>${project.reporting.outputDirectory}/tattletale</destination>
    <reports>
      <report>jar</report>
      <report>multiplejars</report>
    </reports>
    <profiles>
      <profile>java6</profile>
    </profiles>
    <failOnWarn>true</failOnWarn>
    <!-- excluding some jars, if jar name contains any of these strings it won't be analyzed -->
    <excludes>
      <exclude>persistence-api-</exclude>
      <exclude>xmldsig-</exclude>
    </excludes>
  </configuration>
</plugin>

Tendrás que añadir el repositorio Maven de JBoss a la sección repositories de tu POM, o a tu gestor de repositorios. Asegúrate de utilizar el repositorio que solamente contiene artefactos JBoss o podrías experimentar conflictos entre artefactos en ese repositorio y el repositorio Central de Maven.

<repository>
  <id>jboss</id>
  <url>https://repository.jboss.org/nexus/content/repositories/releases</url>
  <releases>
    <enabled>true</enabled>
  </releases>
  <snapshots>
    <enabled>false</enabled>
  </snapshots>
</repository>

Nota: Añadir repositorios extra es una fuente común de problemas que provoca construcciones más lentas (se consulta todos los repositorios en busca de artefactos).

vía

Maven
HAZ LA CONSTRUCCIÓN REPRODUCIBLE

* Especifica siempre una versión de los plugins Maven2
Modo incorrecto

<plugin>
 <groupid>org.apache.maven.plugins</groupid>
 <artifactid>maven-surefire-plugin</artifactid>
</plugin>

Modo correcto

<plugin>
 <groupid>org.apache.maven.plugins</groupid>
 <artifactid>maven-surefire-plugin</artifactid>
 <version>2.3</version>
 </plugin>

Esto importa porque si no pones la versión, maven2 utiliza por defecto la ULTIMA disponible.

Esto quiere decir que

  • el resultado del plugin puede ser impredecible si la implementación ha cambiado (características nuevas/eliminadas, …)
  • tu proyecto, sin saberlo, se convierte automáticamente en un beta-tester para plugins de terceros si la última versión es una SNAPSHOT

Las nuevas versiones de m2eclipse mostrarán una advertencia en la consola. Puede revisar también el plugin enforcer de maven.

Leer el resto de esta entrada »

Ubuntu Thunderbird
Thunderbird se integra con el área de notificación de Unity (el gestor de ventanas por defecto de Ubuntu) de tal modo que si recibes un correo se pone en azul el icono con forma de sobre.

El problema es que este cambio de color no sucede con todos los correos sino que sucede únicamente si:

  • El mensaje ha sido enviado con prioridad alta O SI
  • El mensaje es etiquetado (por un filtro) O SI
  • El mensajes tiene como destinatario el receptor (esto es, no está en copia) Y el mensaje no tiene prioridad baja Y el mensaje no ha sido generado automáticamente Y el mensaje no procede de una lista de distribución

Pero a mi me interesa saber cuando me llega cualquier mensaje.

La forma de cambiar este comportamiento y que el icono se ponga azul al recibir cualquier mensajes pasa por crear la siguiente entrada booleana en about:config (Preferences –> Advanced –> General –> ConfigEditor) con valor true:

extensions.messagingmenu.attentionForAll

vía

Subversive Logo
Inicialmente tenía conectados en Eclipse varios proyectos con un SVN utilizando el plugin Subclipse.

Debido a unos problemas en la creación de patches, tuve que cambiar a Subversive.

El problema viene porque una vez eliminado el plugin de Subclise y añadido el de Subversive, la única opción que aparece al pulsar botón derecho sobre un proyecto –> Team, es “Apply Patch…

Esto es debido a que Eclipse “recuerda” que el proyecto estaba conectado al SVN usando Subclipse (que ya no está disponible) y no me permite volver a conectarlo usando Subversive.

Para solucionarlo tenemos dos opciones.

La primera opción (des-instalar/re-instalar los plugins):

  1. Des-instala Subversive
  2. Re-instala Subclipse
  3. Verifica que los proyectos están conectados al SVN
  4. Botón derecho sobre el proyecto –> Team –> Disconect. Asegúrate de marcar “Do not delete the SVN meta-information (e.g. .svn subdirectories).
  5. Des-instala Subclipse
  6. Re-instala Subversive
  7. Botón derecho sobre el proyecto –> Team –> Share Proyect…

La segunda opción (si no quieres des-instalar/re-instalar):

  1. Crea un nuevo workspace vacío
  2. Abre Eclipse utilizando dicho workspace
  3. File –> Import –> General –> Existing Projects into Workspace
  4. Selecciona el proyecto del viejo workspace
  5. Botón derecho sobre el proyecto –> Team –> Share Proyect…

vía

taglibs
Una de las limitaciones que tiene el estándar EL (Expression Language) de JSP (al menos hasta la versión 2.2), es que no permite acceder a las constantes de una clase Java.

Para suplir esta carencia podemos crearnos nuestra propia tagLib. A continuación incluyo el código completo de una sencilla etiqueta que yo mismo he creado. La idea es muy sencilla, guardar un Map en una variable definida a nivel de Contexto de Aplicación Web (por defecto, pero configurable) y reutilizar dicha variable si ya ha sido definida en algún momento (por defecto, pero configurable) para evitar estar continuamente analizando la clase de la que queremos “extraer” las constantes.

Leer el resto de esta entrada »

WebSphere Liberty Profile
A continuación se describen los pasos a seguir para configurar el acceso a transacciones IMS (Information Management System) desde WebSphere Liberty Profile.

WebShpere Liberty Profile, a partir de la versión 8.5.5.2, soporta la configuración de adaptadores de recursos que cumplan con la especificación Java EE Connector Architecture (JCA) 1.6, 1.5 o 1.0.

Leer el resto de esta entrada »

WebSphere Liberty Profile
A continuación se describen los pasos a seguir para configurar el acceso a transacciones CICS (Customer Information Control System) desde WebSphere Liberty Profile.

WebShpere Liberty Profile, a partir de la versión 8.5.5.2, soporta la configuración de adaptadores de recursos que cumplan con la especificación Java EE Connector Architecture (JCA) 1.6, 1.5 o 1.0.

Leer el resto de esta entrada »

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

A %d blogueros les gusta esto: