Pero estoy seguro de lo que yo soy responsable de. ¿Tengo que cerrar la conexión después de enviar mis consultas? O no estoy autorizado a cerrar la conexión, porque EclipseLink también usa esta conexión internamente.
Una buena y válida pregunta. Parece que la documentación carece de la semántica de las llamadas unwrap()
.
En cuanto EclipseLink, de acuerdo a lo que obtuve de la source:
EclipseLink le da una referencia a la actualmente activa connection
que se utiliza para la sesión de transacción actualmente activa cliente. Si no hay ninguna transacción activa, se creará un nuevo, asociado con la sesión y devuelto desde el método unwrap()
.
Como resultado, en mi humilde opinión, una confirmación/restitución de tal obtenido Connection
puede dar lugar a un comportamiento indefinido y/o excepciones. Lo mismo es cierto para ejecutar DML, que los registros modificados han sido almacenados previamente en memoria caché interna de eclipselink o para los que existen entidades administradas.
Por lo tanto, al usar esta API, especialmente si la transacción subyacente está sucia, tenga cuidado.
Si puede consultar las clases internas de eclipselink, puede acceder al grupo de conexiones internas de eclipselink para obtener un Connection
exclusivamente (eche un vistazo a org.eclipse.persistence.sessions.server.ServerSession.getConnectionPool(String)
).
¿Es este Java EE o SE? – perissf
Entorno Java SE sin formato. – user1494080
¿Por qué necesitas una conexión? JPA usa EntityManager en la mayoría de las situaciones. – perissf