2012-05-08 2 views
8

클라이언트 상태 저장 기능이 켜져 있고 ViewScoped 백업 빈을 사용합니다. 클라이언트 상태 저장이 켜져 있고 ViewScoped bean을 사용할 때, ViewScoped bean은 페이지에 대해 serialz되고, 페이지에 직렬화 된 토큰/키와 함께 세션에 저장됩니다 (페이지가 페이지가 다시 게시 된 경우 세션의 bean)클라이언트 상태 저장 기능이 켜져 있으면 ViewScoped Bean이 페이지에 직렬화됩니까?

직렬화 된 경우 ViewScoped Bean에 직렬화 된 인스턴스에 큰 인스턴스 변수를 저장하지 않도록 신경 쓰고 싶을 수도 있습니다 페이지로 이동하고 전선을 통해 앞뒤로 이동합니다.

답변

9

클라이언트 상태 절약이 켜져 있고 우리가 ViewScoped 콩을 사용하는 경우, 페이지에 직렬화 토큰/키를 사용하여 세션에 저장된의 ViewScoped 빈 페이지에 serialzied 또는 말이다?

Mojarra 2.x는 HTTP 세션에서 범위가 지정된 bean을 저장합니다. 세션에 뷰 범위가 지정된 최대 25 개의 기본 값이있는 문서화되지 않은 설정이 있습니다. issue 4015을 참조하십시오. 즉, 실제 뷰 범위 bean 인스턴스는 절대로 JSF 뷰 상태로 저장되지 않는다. 그것들은 JSF 뷰 상태로 저장되는 UUID에 의해서만 참조됩니다. 따라서 클라이언트/서버 상태 저장 방법에 관계없이 JSF 뷰 상태로 직렬화되지 않습니다.


여기 우려가 직렬화하는 경우는, 페이지 직렬화 돌아 간다, 우리는 다음에 대한 ViewScoped 콩에 많은 인스턴스 변수를 저장하지 않는 걱정을 할 수도 있음을 수 있습니다/앞뒤로 와이어.

이것은 유효한 우려 사항입니다. 사실이라 할지라도, 우리는 다소 극단적 인 경우에 대해서 이야기하고 있습니다. 각 평균 속성이 10 개인 100 개의 평균 엔터티 컬렉션은 이미 뷰 상태 크기에 ~ 5KB가 넘지 않아야합니다. 텍스트 기반 리소스 당 최대 70 %까지 웹 서버에서 gzip 압축을 사용하면 많은 대역폭을 다시 얻을 수 있습니다.

그러나 대용량 데이터를 처리하는 경우 HTTP 세션 저장소 크기가 문제가 될 수 있습니다. 참고 : JSF 2.2 Memory Consumption: Why does Mojarra keep the ViewScoped Beans of the last 25 Views in Memory? 뷰 범위가 지정된 bean은 참조하는 페이지가 GET 탐색 또는 브라우저 탭 닫기에 의해 언로드되는 즉시 파기되어야합니다. 기본 JSF 뷰 범위 Bean은 그렇게하지 않습니다. 그것은 다른보기로 다시 게시하는 동안 또는 세션이 만료 될 때만 파괴됩니다.

JSF 유틸리티 라이브러리 OmniFaces을 사용하는 경우 버전 2.2 이후로 @org.omnifaces.cdi.ViewScoped은 언로드 중에 파손을 지원합니다. 이것은 HTTP 세션 저장 크기에 긍정적 인 효과가 있어야합니다.

+0

고마워 - 이건 알아두면 좋은 정보 야. – BestPractices

+0

여러분을 환영합니다. – BalusC

+0

위대한 답변에 추가 : 렌더링 된 클라이언트 뷰 상태를 추가로 암호화 할 수 있습니다. 나는 이것도 JSF 2.2의 기본값이 될 것이라고 생각한다. –

3

최근 버전의 JSF에서는 BalusC의 답변이 맞지 않습니다. 최신 버전의 경우 javax.faces.view.ViewScoped 빈의 데이터가 서버에 보관됩니다. JAVASERVERFACES-3090

+0

머리를 주셔서 감사합니다. 답변을 업데이트했습니다. – BalusC