2013-06-12 7 views
0

JSF 2.1 응용 프로그램을 CDI로 마이그레이션하고 있습니다. @javax.faces.bean.ViewScoped 주석을 사용할 수 있으려면 here과 같이 MyFaces CODI를 사용하려고합니다.MyFaces CODI가 콩을 두 번 인스턴스화합니다.

응용 프로그램이 예상대로 작동하는 것 같지만 처음으로 액세스 할 때마다 @Named 콩의 생성자가 두 번 호출된다는 것을 로깅하여 알아 챘습니다. 그러나 @PostConstruct이라는 주석이 달린 메서드는 init()에만 한 번만 실행됩니다.

빈들이 두 번째 또는 네 번째 시간에 사용될 때 생성자는 정상적으로 예상대로 한 번만 호출됩니다.

내 응용 프로그램에서 MyFaces CODI jar 파일을 제거하는 순간에 문제가 발생하지 않습니다.

정상적인 현상입니까? 그렇다면 그 이유는 무엇입니까? 성능에 영향을 줍니까 어떤 문제가 발생할 수 있습니까?

나는 이것이 프록시 생성과 연결될 수 있다고 생각하지만, 100 % 명확하지 않으므로 설명에 크게 감사 할 것입니다.

내 구성 :

  • JSF 2.1
  • 인 Mojarra는 2.1.6
  • 에서 MyFaces CODI 1.0.5 (전체 번들 또는 코어 + JSF 2.0 시험)
  • 은 (무관는 : 3.5 Primefaces 및 Omnifaces 1.5)
  • 글래스 피시 3.1.2, 같은 결과를 제이 보스 EAP 6.0에서 테스트

감사.

답변

3

예, 프록시 만들기와 관련이 있으며 CDI에서 예상되는 동작입니다. 아마도 https://community.jboss.org/blogs/stuartdouglas/2010/10/12/weld-cdi-and-proxies을 보아라. 똑같은 말을하는 다른 설명을 찾을 수있을 것이다.

@ javax.faces.bean.ViewScoped와 CODI가 왜 발생하는지에 대한 이유는 CODI가 CDI 확장을 활성화하고 JSF ViewScope로 빈을 검색하여 런타임에 자체 CDI 기반 구현으로 바꾸기 때문입니다.

+0

기사에 대한 링크를 제공해 주셔서 감사 드리며, 큰 도움이됩니다. – Virginie

+0

이 대답을 수락하거나 질문의 ​​상태를 업데이트하십시오. –

+0

@Virgi 여러분, 천만입니다. – rdcrng

0

@rdcrng가 정확합니다.

CDI를 사용하려면 @PostConstruct 메서드가 필요합니다.