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에서만 발생합니다.
감사합니다.
mojarra에서 @PreDestroy가 호출됩니다. 적어도 내 propyect에서 수행됩니다. 순수한 JSF 2 백킹 빈을 사용하면 많은 문제를 줄일 수 있다고 생각합니다. – IturPablo
@IturPablo 프로젝트에서 Spring을 사용합니까? –
Yess !!!, JSF 태그를 사용하고 제공된 서비스 빈에 액세스하려면 @ManageProperty ("# {}") 태그를 사용하십시오. 제 의견으로는 pure JSF beans를 사용하면 문제를 피할 수 있으며 사용중인 jsf 버전에 대해 확신 할 수 있습니다. – IturPablo