Translate

jueves, 11 de diciembre de 2014

Problema común con Netbeans 8.0.1, Glassfish 4.1 y SessionScoped CDI 1.1


Un error que se ha estado reportando mucho en los talleres, Hackatones y demás actividades de iniciación a Java EE 7 es el derivado al intentar anotaciones del paquete javax.enterprise cuando se realiza un proyecto en Netbeans  8.01 con Glassfish 4.1. A continuación se detalle el Problema, el efecto y las posibles soluciones:


Ambiente:
Java JDK 1.7.0_45
Netbeans 8.0.1
Glassfish 4.1

Proyecto creado:




La Causa:
https://netbeans.org/bugzilla/show_bug.cgi?id=247013

El Problema:
Cuando se desea utilizar la anotación de CDI 1.1 SessionScoped (habiendo indicado en la creación del proyecto que la biblioteca son dadas por el Servidor, en este caso Glassfish 4.1), Netbeans no resuelve javax.enterprise.context.SessionScoped.



La Solución V1:
Dado que Netbeans solamente reconoce javax.faces.bean.SessionScoped, pero debido a que esa no es la anotación que queremos usar y que el objetivo de este post no es comparar javax.faces.bean.SessionScoped con javax.enterprise.context.SessionScoped, la solución (al momento de escribir este post) es agregar en las propiedades del proyecto la biblioteca referente a JavaEE 7 dado que por alguna razón Netbeans no lo resuelve en Glassfish 4.1.


La Solución V2:
Susitutir Glassfish 4.1 por Glassfish 4.0 e indicar a Netbeans que utilice está anterior versión de GlassFish.

La solución V3:
Crear un proyecto en donde las dependencias sean utilizadas bajo un Project Object Model, en otras palabras: Utilizar Maven. Esta es mi solución cinco estrellas ;).






2 comentarios:

  1. intentaste colocar el jar "cdi-api.jar" en la libreria del proyecto eso me funcio a mi

    ResponderEliminar
  2. Si, esa también es otra opción. Solo que como buena práctica, cdi-api.jar no debe de ir dentro del War o Ear de cada aplicación. Por ello que en maven seria una dependencia de tipo provided.
    Saludos!

    ResponderEliminar