문제

Oracle Occas 서버에서 서블릿이 실행됩니다. 현재 @Entity Annotaion을 사용하여 응용 프로그램의 엔티티 클래스에 데이터베이스의 일부 데이터를 매핑합니다. 그러나 EntityManager (@PersistEnceContext)를 주입하지 못하고, 그것이 별도의 엔티티 EJB가 아닌 내 서블릿 컨텍스트에서 실행되고 있기 때문에 내 이해에 대한 내 이해입니다. 그러나 EntityManagerFactory Works를 통해 관리자를 만들기 때문에 현재로서는 내가 사용하는 것입니다.

이제 응용 프로그램의 여러 재시작 후 Permgen 공간 오류가 발생합니다. 나는 이것이 어떻게 든 지속성과 관련이 있다고 생각한다. 내 최종 메소드에는 EntityManager.close ()에 대한 호출이 있지만 로그에는 결코 나타나지 않습니다.

이것이 나쁜 일을하는 나쁜 방법입니까? 별도의 엔티티 콩을 가지고 있어야합니까, 아니면 EntityManager를 어떻게 정리해야합니까?

도움이 되었습니까?

해결책

비슷한 문제가 있었고 ThreadLocal 및 서블릿 필터를 사용하여 해결했습니다.

다음은 내 블로그의 게시물이 무엇을 해야하는지 자세히 설명합니다.; 기본적으로 서블릿 필터는 엔티티 관리자를 설정 한 다음 서블릿 호출이 완료된 후에 닫습니다. 엔티티 관리자가 스레드 로컬 변수 (Hibernate의 권장 사항에 따라)로 사용할 수 있습니다. 또한 필터에서 예외를 포착하고 롤백을해야합니다.

BTW, Finalize는 당신이 생각하는 방식으로 호출되지 않습니다. finalize ~해야 한다 JVM이 출구되기 전에 호출되지만 그 외에는 오래 걸릴 수 있습니다.

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