Obteniendo una Conexion a partir de un EntityManager

Hace unos dias cuando estaba realizando unos reportes con la herramienta iReport, me tope con la necesidad que para poder invocar los reportes elaborados era necesario enviar una instancia de un objeto Connection para el metodo que genera el reporte.

Crear una conexion es sencillo pero yo no estaba manejando mi conexion de la manera tradicional pues estaba usando JPA que es la API de persistencia de datos de Java y esta es la que maneja las conexiones y la configuracion de la cadena de conexion se guardda en la unidad de persistencia que es nada mas y nada menos que un XML.

En un principio pense en acceder al XML directamente, pero como sabia que la conexion se maneja a traves del objeto EntityManager decidi averiguar como se hacia y pues la forma fue la siguiente asi de simple:

public Connection getConnection() {
EntityManagerFactory emf=Persistence.createEntityManagerFactory("NombreUnidadPersistencia");
EntityManager em=emf.createEntityManager();
return ((oracle.toplink.essentials.ejb.cmp3.EntityManager)em)
.getServerSession()
.getDefaultConnectionPool()
.acquireConnection()
.getConnection();
}


Espero que esto le sirva cuando se tenga la necesidad de obtener una instancia de la conexion que esta utilizando a travez de un EntityManager.

Comentarios (3)

3 Response to "Obteniendo una Conexion a partir de un EntityManager"

  1. Anónimo Says:
    miércoles, enero 28, 2009

    Me ha servido de mucho, gracias y adelante...

  2. Anónimo Says:
    miércoles, octubre 27, 2010

    Hola estimado, me vota null la conexion que puedo estar haciendo mal, saludos

  3. Lucho says:
    miércoles, abril 20, 2011

    Mil Gracias!!! Es justo lo que necesito ya que me encuentro en la misma situación.
    La única diferencia es que trabajo con EclipseLink(JPA 2.0) por lo que la cadena "oracle.toplink.essentials.ejb.cmp3.EntityManager" no me sirve... podrías indicarme donde puedo obtener dicha cadena pero aplicada a mi caso? Muchas Gracias