프록시를 초기화할 수 없습니다. 세션 없음
다음과 같은 오류가 발생했습니다.
프록시를 초기화할 수 없습니다. 세션 없음
자바, 동면기, 스프링으로 작업하고 있어요.PDF 문서를 생성하려고 할 때 이 오류가 발생하며, 다음 단계에 따라 문서를 즉시 생성하여 데이터베이스에 저장합니다.
POST 방식으로 앱에 요청을 보냈습니다.그러면 PDF가 즉시 생성되어 사용자에게 표시됩니다.
그 요청 직후에 다른 요청을 보내지만, Ajax를 통해 요청을 보냅니다.이렇게 하면 동일한 PDF가 생성되지만 DB에 저장됩니다.
이 오류는 "프록시를 초기화할 수 없음 - 세션 없음" 오류로 인해 쿼리를 실행할 수 없음을 나타냅니다.
같은 사용자 세션에서 같은 메서드를 두 번 호출하는 것이 잘못된 건가요?두 가지 요청이 모두 끝나기 전에 세션이 종료될 수 있습니까?
누가 무슨 일이 일어나고 있는지 내가 이해할 수 있도록 도와줬으면 좋겠다.
문제는 휴지 상태 세션이 하나의 요청에만 존속한다는 것입니다.요청 시작 시 열리고 마지막에 닫힙니다.정답은 다음과 같습니다.두 요청이 모두 완료되기 전에 휴지 상태 세션이 닫힙니다.
정확히 무슨 일이 일어나고 있는 거죠?엔티티 개체는 두 요청 모두 활성 상태입니다. 어떻게요?HTTP 세션(세션이라고 불리는 다른 것)에 저장되어 있습니다.사용하는 프레임워크에 대한 자세한 정보는 제공할 수 없습니다.그러나 사용하고 있는 프레임워크가 어떻게든 엔티티를 HTTP 세션에 보관 유지하고 있는 것은 확실합니다.이렇게 하면 여러 요청에 대해 동일한 개체로 쉽게 작업할 수 있습니다.
두 번째 요청 처리가 시작되면 코드는 휴지 상태에 의해 느릿느릿 초기화된 엔티티(일반적으로 컬렉션의 요소)에 액세스하려고 합니다.엔티티가 휴지 상태 세션에 연결되어 있지 않으므로 휴지 상태 프록시를 읽기 전에 초기화할 수 없습니다.Ajax 요청 처리 시작 시 세션을 열고 엔티티를 세션에 다시 연결해야 합니다.
편집:
배후에서 무슨 일이 벌어지고 있는지 간략하게 설명하겠습니다.모든 Java 웹 프레임워크에는 요청을 처리하는 하나 이상의 서블릿이 있습니다.서블릿은 최종적으로 응답을 생성하는 새로운 스레드(HttpResponse)를 작성함으로써 각 요구(HttpRequest)를 처리합니다.각 요청을 처리하는 방법은 이 스레드 내에서 실행됩니다.
요청 처리 시작 시 응용 프로그램은 처리에 필요한 리소스를 할당해야 합니다(트랜잭션, 휴지 상태 세션 등).처리 사이클이 끝나면 이러한 리소스가 해방됩니다(트랜잭션 커밋, 휴지 상태 세션 종료, JDBC 연결 해제 등).이러한 자원의 라이프 사이클은 프레임워크로 관리하거나 코드로 관리할 수 있습니다.
상태 비저장 프로토콜의 응용 프로그램 상태를 HTTP로 지원하기 위해 HttpSession 개체가 있습니다.당사(또는 프레임워크)는 동일한 클라이언트의 서로 다른 요구 사이클 간에 관련된 정보를 HttpSession에 올렸습니다.
첫 번째 요구 휴지 상태의 처리 중에 데이터베이스에서 엔티티가 읽기(느긋하게)됩니다.느린 초기화로 인해 이 개체 구조의 일부 부분이 최대 절전 모드 프록시 개체입니다.이러한 오브젝트는 오브젝트를 작성한 휴지 상태 세션과 관련되어 있습니다.
두 번째 요청을 처리하려고 하면 프레임워크는 HttpSession 개체에서 이전 요청의 엔티티를 검색합니다.그런 다음 느리게 초기화되어 현재 휴지 상태 프록시 개체인 하위 엔티티에서 속성에 액세스하려고 합니다.휴지 상태 프록시 개체는 다른 사용자가 속성에 액세스하려고 할 때 데이터베이스의 정보로 채우도록 휴지 상태 세션에 요청하는 실제 개체를 모방한 것입니다.이것이 바로 휴지 상태 프록시가 하려는 것입니다.그러나 이전 요청 처리가 끝날 때 세션이 닫혔기 때문에 이제 하이드라이제이션(실제 정보로 채워짐)을 위해 사용할 최대 절전 세션이 없습니다.
두 번째 요청 시작 시 휴지 상태 세션을 이미 열었을 수 있지만 프록시 개체가 포함된 엔티티는 다른 휴지 상태 세션에 의해 읽혔기 때문에 이 엔티티가 인식되지 않습니다.엔티티를 새로운 휴지 상태 세션에 다시 연결해야 합니다.
엔티티를 하는 방법에 는 많은 만, 에서는 가장 이 있습니다.session.update(entity).
도움이 됐으면 좋겠다.
언급URL : https://stackoverflow.com/questions/16752799/could-not-initialize-proxy-no-session
'source' 카테고리의 다른 글
| 개체에 속성이 있는지 확인합니다. (0) | 2023.02.14 |
|---|---|
| "현대" 브라우저는 한 번에 몇 개의 HTML 요소를 처리할 수 있습니까? (0) | 2023.02.14 |
| 변경 시 입력 모델이 Integer에서 String으로 변경됨 (0) | 2023.02.14 |
| React + ES6 + 웹 팩을 사용하여 구성 요소를 가져오고 내보내는 방법은 무엇입니까? (0) | 2023.02.14 |
| MySQL 쿼리 런타임 감소 (0) | 2023.01.29 |