문제

방금 자체로 만든 지속성 프레임 워크를 JPA로 마이그레이션하기 시작했습니다.

지속성 프레임 워크가 많은 배관을 숨기고 있다는 점을 감안할 때, 엔티티 관리자를 닫지 않으면 리소스 누출을 만들지 않거나 프레임 워크가 저를 위해 수집하여 닫을 지 알고 싶습니다.

나는 모든 곳에서 그들을 닫으려고하지만해야합니까?

현재 TopLink를 사용하는 것은 NetBeans와 쉽게 작동하지만 다른 JPA 제공 업체를 조사하게되어 기쁩니다.

도움이 되었습니까?

해결책

그것은 당신이 그것을 얻는 방법에 따라 다릅니다.

EntityManagerFactory를 사용하여 만든 경우 사용하는 프레임 워크에 관계없이 닫아야합니다.

종속성 주입 (예 : EJB 및 @PersistEnceContext 주석 사용)을 사용하여 얻은 경우 손으로 닫지 않아야합니다 (afaik 그것은 runtimeexception을 유발합니다).

다른 팁

당신은해야합니다.

프레임 워크는 EM을 어떻게 사용하려고하는지 알지 못하므로 EM을 닫을 수는 없습니다 (마무리시 보장되지 않는 최종화가 제외). 예, 닫지 않으면 자원 누출이 발생합니다.

아이디어는 "항상 닫는 java.sql.connection"과 동일합니다 (일부 데이터 소스에는 비 활동으로 자동으로 닫을 수있는 설정이 있음) 또는 "항상 최대 절전 모드 세션"이 있습니다.

또한 휴대용 코드를 작성하려는 경우 특정 JPA 제공 업체 "Smart"에 의존해서는 안됩니다. 다른 사람은 EM을 제 시간에 닫지 못할 수 있습니다.

나는 얻었다 EntityManager 사용 @PersistenceContext 내 저장소에 주석. ConnectionPools가 그에 도달 한 후에 알 수 있습니다 maxPoolSize 청소되지 않습니다.

그러나 내가 만든 경우 EntityManager 사용 EntityManagerFactory 그리고 전화 entitymanager.close() 그런 다음 연결이 정리됩니다. 나는 사용 중입니다 c3p0 ConnectionPool 라이브러리로.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top