2012-06-04 2 views
1

Spring 3.1.0.RELEASE, JSF 2.x, JPA 2 with Hibernate Provider를 사용하여 웹 애플리케이션을 수행하고 있습니다. 친숙한 URL에 PrettyFaces 3.3.2를 사용합니다. 응용 프로그램은 Tomcat 6.35에서 실행됩니다. 내가 @PreDestroy이 공연이 질문에 @PreDestroy never called on @ViewScoped을처럼 호출하지 않는 것을 알 수 http://comdynamics.net/blog/109/spring3-jsf2-view-scope/사용자 정의 ViewScope가있는 Managed beans

public class ViewScope implements Scope { 

    private static final Logger logger = LoggerFactory.getLogger(ViewScope.class); 

    @Override 
    public Object get(String name, ObjectFactory objectFactory) { 
     final Map<String, Object> viewMap = FacesContext.getCurrentInstance().getViewRoot().getViewMap(); 

     Object instance = viewMap.get(name); 
     if (instance == null) { 
      instance = objectFactory.getObject(); 
      viewMap.put(name, instance); 
     } 
     return instance; 
    } 

    @Override 
    public Object remove(String name) { 
     logger.debug("ViewScope::remove {}", name); 
     return FacesContext.getCurrentInstance().getViewRoot().getViewMap().remove(name); 
    } 

    @Override 
    public String getConversationId() { 
     return null; 
    } 

    @Override 
    public void registerDestructionCallback(String name, Runnable callback) { 
     //Not supported 
    } 

    @Override 
    public Object resolveContextualObject(String key) { 
     return null; 
    } 
} 

: 나는 웹에있는 구현을 수행하기로 결정 그래서

은 내가 JSF ViewScope를 사용하고 싶었다.

ViewScope가있는 Managed Bean이 절대로 소멸되지 않는다는 의미입니까? 기억을 누출시키는 행동. 이 범위를 그렇게 사용해야합니까?

봄이나 Mojarra의 맞춤형 Viewscope에서만 발생합니다.

감사합니다.

+0

mojarra에서 @PreDestroy가 호출됩니다. 적어도 내 propyect에서 수행됩니다. 순수한 JSF 2 백킹 빈을 사용하면 많은 문제를 줄일 수 있다고 생각합니다. – IturPablo

+0

@IturPablo 프로젝트에서 Spring을 사용합니까? –

+0

Yess !!!, JSF 태그를 사용하고 제공된 서비스 빈에 액세스하려면 @ManageProperty ("# {}") 태그를 사용하십시오. 제 의견으로는 pure JSF beans를 사용하면 문제를 피할 수 있으며 사용중인 jsf 버전에 대해 확신 할 수 있습니다. – IturPablo

답변

1

보기 범위가 잘못 구현되어 있습니다. 스프링 콩 objectFactory.getObject();을 만들지 만 절대 파괴하지 않습니다.

해결하려면 registerDestructionCallback을 지원하는 correct implementation을 확인하십시오.

BWT, 현재 Mojjara 구현은 too@PreDestory을 호출하지 않습니다. 하지만 적어도 콩 인스턴스를 해제합니다.

0

스프링 사용자 정의 뷰 범위를 사용하여 Jsf 뷰 범위 Bean 메모리 누수에 대한 해결 방법을 시도했습니다. Jsf 2.1 & 2.2. 아래 링크에서 코드를 사용해보십시오. Memory leak with ViewScoped bean?