모든 EntityManager를 close ()해야합니까?
내 자체 개발 지속성 프레임 워크를 JPA로 마이그레이션하기 시작했습니다.
지속성 프레임 워크가 많은 배관을 숨긴다는 점을 감안할 때 EntityManagers를 닫지 않으면 리소스 누출이 발생하는지 또는 프레임 워크가 나를 위해 수집하고 닫을 것인지 알고 싶습니다.
모든 곳에서 그들을 닫으려고하는데 꼭해야하나요?
현재 TopLink를 사용하는 이유는 NetBeans에서 쉽게 작동하기 때문이지만 다른 JPA 공급자를 조사하게되어 기쁩니다.
그것은 당신이 그것을 얻은 방법에 달려 있습니다.
EntityManagerFactory를 사용하여 만든 경우 어떤 프레임 워크를 사용하든 관계없이 닫아야합니다.
의존성 주입을 사용하여 얻은 경우 (예 : EJB 및 @PersistenceContext 주석 사용) 수동으로 닫지 않아야합니다 (AFAIK로 인해 RuntimeException이 발생 함).
당신은해야합니다.
프레임 워크는 EM을 어떻게 사용 하려는지 모르기 때문에이를 닫을 수 없습니다 (예외로, 완료시에는 보장되지 않음). 예, 닫지 않으면 리소스 누출이 발생합니다.
아이디어는 "always close java.sql.Connection"(일부 데이터 소스에 비활성으로 자동으로 닫히는 설정이 있음에도 불구하고) 또는 "always close Hibernate session"과 같습니다.
게다가 이식 가능한 코드를 작성할 계획이라면 특정 JPA 공급자가 "스마트하다"는 데 의존해서는 안됩니다. 다른 공급자는 제때 EM을 닫지 못할 수도 있습니다.
내 저장소에서 주석을 EntityManager
사용하여 얻었습니다 @PersistenceContext
. 커넥션 풀이 도달 한 후에도 maxPoolSize
정리되지 않는 것을 볼 수 있습니다 .
그러나 EntityManager
사용 EntityManagerFactory
하여 호출 entitymanager.close()
하면 연결이 정리됩니다. c3p0
연결 풀 라이브러리로 사용 하고 있습니다.
참고 URL : https://stackoverflow.com/questions/220374/do-i-have-to-close-every-entitymanager
'developer tip' 카테고리의 다른 글
Node.js 동일한 읽기 가능한 스트림을 여러 (쓰기 가능한) 대상으로 파이핑 (0) | 2020.11.21 |
---|---|
단일 2D 배열을 할당하는 것이 전체 크기와 모양이 동일한 여러 1D 배열을 할당하는 루프보다 더 오래 걸리는 이유는 무엇입니까? (0) | 2020.11.21 |
CSS, 중앙 div, 크기에 맞게 축소? (0) | 2020.11.21 |
SQL Server의 LDF 파일은 무엇입니까? (0) | 2020.11.21 |
JVM 힙 매개 변수 (0) | 2020.11.21 |