Tomcat에 배포 된 J2EE 서버 응용 프로그램에서 작업하고 있습니다. Spring 소스를 MVC 프레임 워크로 사용하고 Hibernate를 ORM 제공자로 사용합니다. 내 개체 모델에는 많은 지연 관계가 있습니다 (종속 개체는 요청시 가져옵니다). 상위 레벨 디자인은 서비스 레벨 메소드가 데이터베이스 조작을 수행하는 몇 가지 DAO 메소드를 호출하는 것과 유사합니다. 서비스 메소드는 Flex UI 또는 예약 된 작업으로 호출됩니다. Flex UI에서 호출 할 때 서비스 메소드는 잘 작동합니다. 즉, DAO 메소드를 사용하여 일부 객체를 가져오고 지연로드 작업까지 수행합니다. 이는 UI 서블릿으로 구성된 OpenSessionInViewFilter를 사용하면 가능합니다.예약 된 작업에서 LazyInitializationException을 해결하는 방법은 무엇입니까?
그러나 동일한 서비스 메소드가 예약 된 작업으로 호출되면 LazyInitializationException이 발생합니다. OpenSessionInViewFilter를 구성 할 수 없습니다. 서블릿이나 UI 요청이 연관되어 있지 않기 때문입니다.
서비스 메서드가 트랜잭션을 시작하고 모든 DAO 메서드가 트랜잭션이 활성 상태로 유지되고 최대 절전 모드 세션을 사용할 수 있도록 동일한 예약 트랜잭션에 참여하도록 예약 된 작업 메서드 주위에 트랜잭션을 구성하려고했습니다. 그러나 그것은 효과가 없습니다.
누구나 그런 구성을 사용할 수 있었는지 제안하십시오. 필요하다면, 나는 Hibernate 구성과 로그 메시지를 게시 할 수있다.
도움을 주셔서 감사합니다. Shreerang
은 당신이 주위에 거래를 포장하는 방법을 게시 할 수 없습니다 : 여기
TransactionTemplate
참조하시기 바랍니다 스프링 소스 문서에 대한 자세한 내용은예정된 직업? 어떤 부분이 작동하지 않는가 - 트랜잭션을 열지 않거나 거래가 너무 일찍 종료 되었습니까? – Rachel
귀하의 의견에 대답하기 위해, 나는 point-cut 표현식을 사용하여 자체 트랜잭션의 내부에 스케줄 된 작업 메소드를 래핑하려고했습니다. 그러나 point-cut은 실행을 시작할 때 실제로 내 메서드를 선택하지 않았으므로 트랜잭션이 전혀 시작되지 않았습니다. – Shreerang