Ma io sono sicuro di cosa sono responsabile. Devo chiudere la connessione dopo aver inviato le mie domande? Oppure non sono autorizzato a chiudere la connessione, perché anche EclipseLink utilizza questa connessione internamente.
Una domanda valida e valida. Sembra che alla documentazione manchi la semantica delle chiamate unwrap()
.
Per quanto riguarda EclipseLink, secondo da quello che ho ottenuto dal source:
EclipseLink ti dà una di riferimento al momento attiva connection
che utilizza per la attiva client transazione attualmente sessione. Se nessuna transazione è attiva, verrà creato uno nuovo, associato alla sessione e restituito dal metodo unwrap()
.
Di conseguenza, IMHO, un commit/rollback di tale valore ottenuto da Connection
può comportare comportamenti e/o eccezioni non definiti. Lo stesso è vero per l'esecuzione di DML che ha modificato i record precedentemente memorizzati nella cache dalle cache interne di eclipselink o per le quali esistono entità gestite.
Quindi, quando si utilizza questa API, soprattutto se la transazione sottostante è sporca, fare attenzione.
Se è possibile fare riferimento alle classi interne di eclipselink, è possibile accedere al pool di connessioni interne eclipselink per ottenere un Connection
esclusivamente (consultare org.eclipse.persistence.sessions.server.ServerSession.getConnectionPool(String)
).
È Java EE o SE? – perissf
Ambiente Java Java normale. – user1494080
Perché hai bisogno di una connessione? JPA utilizza EntityManager nella maggior parte delle situazioni. – perissf