Ale jestem pewien, co jestem odpowiedzialny. Czy po przesłaniu zapytania muszę zamknąć połączenie ? Czy też nie wolno mi zamknąć połączenia, ponieważ EclipseLink używa tego połączenia wewnętrznie, .
Dobre i poprawne pytanie. Wydaje się, że w dokumentacji brakuje semantyki wywołań unwrap()
.
chodzi EclipseLink, w zależności od tego, co mam z source:
EclipseLink daje odniesienie do aktualnie aktywnej connection
którego używa do aktualnie aktywnego klienta transakcji sesyjnej. Jeśli żadna transakcja nie jest aktywna, zostanie utworzony nowy nowy, powiązany z sesją i zwrócony z metody unwrap()
.
W rezultacie, IMHO, zatwierdzenie/wycofanie tak uzyskanego Connection
może prowadzić do niezdefiniowanych zachowań i/lub wyjątków. To samo dotyczy wykonywania DML, którego zmienione zapisy były wcześniej buforowane przez wewnętrzne pamięci podręczne eclipselink lub dla których istnieją zarządzane podmioty.
Podczas korzystania z tego interfejsu API, szczególnie w przypadku zabrudzenia transakcji bazowej, należy zachować ostrożność pod numerem.
Jeśli możesz odwołać się do klas wewnętrznych eclipselink, możesz uzyskać dostęp do wewnętrznej puli połączeń eclipselink, aby uzyskać wyłącznie Connection
(spójrz na org.eclipse.persistence.sessions.server.ServerSession.getConnectionPool(String)
).
Czy to jest Java EE lub SE? – perissf
Plain Java SE environment. – user1494080
Dlaczego potrzebujesz połączenia? JPA używa EntityManager w większości sytuacji. – perissf