2014-04-29 2 views
-1

어플리케이션 탭을 닫을 때 FlowExecutionRestorationFailureException 예외가 발생합니다.Spring 웹 플로우에서 FlowExecutionRestorationFailureException이 발생합니다.

우리는 primeafaces 3.4.2 및 spring web flow 2.3.1에서 개발 된 응용 프로그램을 보유하고 있습니다.

이 응용 프로그램에는 홈 화면 (로그인 후 첫 번째 화면 표시)이 있고이 화면에는 계정 링크 (CommandLink)가 있습니다.

검색 링크 다른 탭 (이제 우리는 두 개의 탭 - 1. 홈 화면 2. 계정이 있음)을 계정 세부 정보와 함께 열어서 화면에 결제 버튼이 있습니다. 우리는 결제 버튼을 클릭하면 결제 화면으로 이동합니다.

그 후에는 탭의 닫기 아이콘을 클릭하여 결제 화면 탭을 닫습니다.

하지만 여전히 다른 탭에는 홈 스크린이 있으며, 계정 링크를 클릭합니다.

동일한 단계를 7-8 회 수행하십시오. 그 후 FlowExecutionRestorationFailureException 예외가 발생합니다.

흐름 스냅 샷 설정 :

webflow:flow-executor id="flowExecutor"> 
    <webflow:flow-execution-listeners> 
     <webflow:listener ref="facesContextListener" /> 
     <webflow:listener ref="securityFlowExecutionListener" /> 
    </webflow:flow-execution-listeners>  
    <webflow:flow-execution-repository max-executions="0" max-execution-snapshots="15" />  
</webflow:flow-executor> 

예외 추적 : 유형의 예외 보고서
메시지 요청 처리가 실패; 중첩 예외는 org.springframework.webflow.execution.repository.FlowExecutionRestorationFailureException : 키 'e1s1'을 사용하여 흐름 실행을 복원하는 중 문제가 발생했습니다.
설명 서버가이 요청을 수행하지 못하게하는 내부 오류가 발생했습니다.
예외
org.springframework.web.util.NestedServletException : 요청 처리에 실패했습니다. 중첩 예외는 org.springframework.webflow.execution.repository.FlowExecutionRestorationFailureException : 키 'e1s1'을 사용하여 흐름 실행을 복원하는 중에 문제가 발생했습니다. org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java:894) org.springframework .web.servlet.FrameworkServlet.doPost (FrameworkServlet.java:789) javax.servlet.http.HttpServlet.service (HttpServlet.java:641) javax.servlet.http.HttpServlet.service (HttpServlet.java:722) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:330) org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke (FilterSecurityInterceptor.java:118) org.springframework.security. web.access.intercept.FilterSecurityInterceptor.doFil (FilterChainProxy.java : 342) org.springframework.security.web.access.ExceptionTranslationFilter.doFilter (ExceptionTranslationFilter.java:113) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:342) org.springframework.security.web.session.SessionManagementFilter.doFilter (SessionManagementFilter.java:103) org.springframework.security.web .FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:342) org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter (SecurityContextHolderAwareRequestFilter.java:54) org.springframework.security.web.FilterChainProxy $ VirtualFi lterChain.doFilter (FilterChainProxy.자바 : 342) org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter (RequestCacheAwareFilter.java:45) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:342) org.springframework .security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter.doFilter (AbstractPreAuthenticatedProcessingFilter.java:88) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:342) org.springframework.security.web.authentication .logout.LogoutFilter.doFilter (LogoutFilter.java:105) 흐름에 대한

일부 세부 사항 : Flow Detials I가 시도 end billing sub flow 및 Home sub flow가 있지만, 계정 연결 시작을 다시 클릭하면 나중에 동일한 예외가 수신됩니다.

저에게 조언하거나 제안하십시오.

+0

이러한 각 화면에서 flowExecutionKey 및 flowId를 지정하고 있습니까? 일시 정지 된 경우 흐름을 복원/재개합니다. – Prasad

+0

아니요, 화면에 flowexcecutionkey 및 flowId를 지정하지 않았습니다. 일단 흐름 실행이 작성되면 웹 플로우는 흐름 실행 키를 지정합니다. – Vikas

+0

"검색 링크 다른 탭"은 어디에 있습니까? 반복해야 할 단계는 무엇입니까? 당신은 그것을 명확하게 할 수 있습니까? – Prasad

답변

1

구성보기 max-executions = "0"max-execution-snapshots = "15"가 여기에있는 키입니다.

"max-executions"속성은 동시에 실행될 수있는 플로우 실행 수를 지정합니다.

각 흐름 실행 요청은 상태의 스냅 샷을 생성합니다. "max-execution-snapshots"속성은 저장할 수있는 상태의 수를 지정합니다. 한도에 도달하면 가장 오래된 것을 먼저 제거합니다. 여러 탭을 열고 모두 동일한 실행과 연결되어있는 경우 공통 스냅 샷 제한이 있습니다.

max-executions = "0"및 max-execution-snapshots = "15": 15 개의 스냅 샷을 저장할 수 있습니다. 따라서 여러 탭을 열어 닫는 단계를 반복하면 어떤 시점에서 스냅 샷 한도가 15에 도달하고 스냅 샷 s1이 제거되고 이전 스냅 샷 (계정 링크를 클릭하여 e1s1)에 대한 링크에 액세스하려고하면 거기에 없습니다 더 이상. 저도 같은 문제를 가지고

최대-실행 = "5"최대 - 실행 - 스냅 샷 = "25"

+0

변경 사항을 적용한 후 처음으로 모든 단계를 반복 한 후 , ), 때로는 홈 화면을 다시 여는 중입니다. 즉, 잘못된 검색 화면을 열지 만 가끔 이 올바른 상태를 유지합니다 (Serarch 화면 열기). – Vikas

+0

스프링의 flow-execution-repository를 오버라이드하고지도에서 스냅 샷을 제거하지 않는 것보다 홈 화면에 속하는지 확인하는 조건 하나를 넣을 수 있습니까? – Vikas

0

:

이 같은 구성 뭔가를 변경 극복하기 위해. 어쩌면 당신은 레지스트리 속성을 놓쳤을 수도 있습니다. 적어도이 ( https://stackoverflow.com/a/13056141/5449497) 구성이 나를 위해 작동했습니다.

<webflow:flow-executor id="flowExecutor" flow-registry="flowRegistry"> 
    <webflow:flow-execution-listeners> 
    <webflow:listener ref="facesContextListener" /> 
    </webflow:flow-execution-listeners> 
</webflow:flow-executor> 

<bean id="facesContextListener" class="org.springframework.faces.webflow.FlowFacesContextLifecycleListener" /> 
관련 문제