2014-04-18 3 views
2

저는 Spring과 JSF2를 많이 사용하고 있으며 이들을 통합하는 가장 좋은 방법은 무엇인지 궁금해하고 있었습니까? 이제는 기본적으로 두 가지 방법이 있지만 두 가지 문제가 있습니다 :JSF2와 Spring3 통합 (AOP 포함)

a) 보통 @ManagedBean을 사용하고 @ManagedProperty을 사용하여 해당 빈에 Spring 서비스를 주입하십시오. 문제는 내가 사용할 수 없다는 것입니다. 봄에 AOP가 있기 때문에 @ManagedBean 분명히, 그것은 스프링 관리가 아니기 때문입니다. 나는 보통 사용자 정의 주석 @DatabaseOperation으로 주석이 달린 모든 메소드에 arround-aspect를 사용합니다. 또 다른 예로는 Spring-Security의 @Secured 등이 있습니다. 내 프로젝트에서 AOP를 많이 사용하고 "최상위 레벨"에서 사용할 수 없다는 것이 실제로 나를 제한하고있다.

b) SpringBeanFacesELResolver을 사용하여 Spring에서 관리하는 모든 것을 만드십시오. 프로 측면에서 AOP는 매력처럼 작동하지만 단점은 너무 크다.

  1. ViewScope 아니요. 생산 시스템에서이 https://github.com/michail-nikolaev/primefaces-spring-scopes과 같은 사용자 정의보기 범위 구현을 신뢰할 수 있는지 잘 모르겠습니다.
  2. 직렬화 할 수 없습니다. 그것은 이미 꽤 복잡하지만 AOP를 사용하면 org.springframework.aop.aspectj.AspectJPointcutAdvisor이 Serializable이 아니기 때문에 작동하지 않습니다.

제 질문은 어떻게 해결합니까? JSF2와 Spring3.x를 어떻게 통합합니까? 나는 가능성을 주로 사용하고있다. b) 대부분 다음 프로젝트에서 세션 복제가 필요하다.

추가 제안 사항?

답변

0

두 프레임 워크의 주된 통합 지점은 JSF가 일반적으로 상태 저장 방식으로 사용된다는 것입니다. 통합을 가장 원활하게하기 위해서는 Spring이 bean 작성 및 범위 지정뿐만 아니라 JSF 대신 statefulness 및 페이지 탐색 측면을 직접 처리하도록해야합니다.

두 번째 중요한 통합 지점은 뷰 표현 언어 수준입니다. 뷰를 생성하는 동안 스프링 빈에 액세스 할 수 있기를 원합니다. 즉, 관리되는 빈 계층이 더 이상 필요하지 않습니다.

두 프레임 워크에서 사용할 수있는 최상의 통합은 Spring 웹 플로우를 소개함으로써 제공됩니다. 자세한 내용은 here을 참조하십시오. SWF에서 JSF는 더 이상 bean 자체를 관리하지 않는다. 이것은 Spring에 의해 수행된다. JSF는 더 이상 페이지 탐색을 관리하지 않습니다.이 작업은 SWF 플로우 정의에서 처리됩니다.

또한 상태 보존은 SWF에서 처리됩니다. 흐름 정의 XML 파일은보기 탐색, 전환 작업, bean 정의 등을 위해 faces-config.xml의 대부분을 대체합니다.

SWF JSF 통합을 사용한다는 것은 faces-config.xml이 대부분 비어 있음을 의미합니다. 뷰를 빌드하는 동안 스프링 빈에 직접 액세스하는 표현식 언어를 사용할 수 있으며 뷰 범위를 사용할 수 있습니다.

응용 프로그램의 나머지 부분과 격리 된 페이지를 유지하려면 단일보기 상태 및 자체 전환으로 흐름을 만들 수 있습니다. SWF의 장점은 상자 밖으로 투명하게 작동하는 POST-REDIRECT-GET 메커니즘을 통해 중복 된 양식 제출을 방지한다는 것입니다.