2011-02-24 4 views
2

저는 비즈니스 로직을 처리하기위한 해당 EJB 클래스를 가진 다수의 JPA 엔티티 클래스가있는 첫 번째 Java EE 어플리케이션을 개발했습니다. 내가 한 일은 빈들 중 하나를 Stateless에서 SessionScoped로 변경했기 때문에 사용자가 일련의 양식 필드를 통해 작업 할 수있게하는 데 사용할 수 있습니다. 모든 양식 필드는 JSF 양식으로 렌더링됩니다.Java EE : Bean을 사용하여 비즈니스 로직에서 프리젠 테이션 로직을 분리

그러나 EJB에서 "submitStep1"및 "goBackToStep2"와 같은 메소드를 구현하는 것과 같이 분명히 잘못되었다고 생각하기 시작했습니다. 이 메소드는 JSF 페이지에서 다양한 태그의 렌더링 요소에 사용되는 표시기를 설정하므로 분명히 "표현 논리"입니다.

제 질문은 어떻게 코드를 다시 구성해야합니까? 나는 JSF 페이지의 프리젠 테이션 로직을 다루고 다른 모든 ejbs (그리고 확장자는 JPA 클래스)를 사용할 수있는 하나의 SessionScoped (또는 stateful?) 빈을 가져야한다고 생각하고있다. 이 빈은 내 응용 프로그램의 프레젠테이션 계층 수준에있을 것입니다. 즉, 비즈니스 로직 계층에 세션 범위 세션 빈이 필요하지 않음을 의미합니다.

이제이 모든 것이 나에게 의미가 있으며, 아마도 내가 할 일입니다. 그러나 내 질문에 대한 이유는 내 JSF xhtml 페이지에서 JSF EL 태그를 많이 사용하여 EJB 컨텐츠를 참조한다는 것입니다. 프레젠테이션 계층 수업을 작성할 때 조심해야 할 JPA 관련 함정이 있습니까?

제 질문은 꽤 모호하며 실제로 구체적인 예와 관련이 없습니다. 그리고 Stateful v Stateful vs Stateless Beans에 대한 많은 정보를 찾았지 만 의도 한 구조가 가장 좋은 정보를 원합니다.

+0

가능한 [JSF 컨트롤러, 서비스 및 DAO] (https://stackoverflow.com/questions/30639785/jsf-controller-service-and-dao) 중복 가능 – Kukeltje

답변

0

프레젠테이션 목적으로 백킹 빈을 사용하는 이유는 무엇입니까? 범위를 손쉽게 구성하고 EJB를 비즈니스 계층에 남겨 둘 수 있습니다.

프레젠테이션 계층에서 직접 엔터티를 사용하는 경우 트랜잭션 범위, 특히 지연 관계와 관련하여 알고 있어야합니다. 즉, 일반적으로 요청 당 하나의 트랜잭션이 사용됩니다. 즉, 여러 요청 중에서 엔티티가 분리되므로 지연 관계를로드 할 수 있도록 다시 요청해야합니다. 자동으로 요청하거나 처리하는 필터를 사용할 수 있습니다. 다른 요청 중에도 동일한 트랜잭션을 유지할 수 있지만 긴 트랜잭션은 일반적으로 좋은 생각이 아닙니다. 특히 트랜잭션 중에 DB에 업데이트/생성이있는 경우에는 특히 좋습니다.

+0

회신에 대한 환호. 그래, 나는 당신이 거래 범위에 대해 무슨 뜻인지 안다. Anyhoo, 필자는 프리젠 테이션 로직을 백킹 빈으로 옮길 수 있었고 이제 EJB는 비즈니스 계층만을 처리합니다. 처음에는 모든 Java EE 앱을 개발하는 데 꽤 좋은 경험이었습니다. – JohnHailey

관련 문제