문제

JSF2를 배우면서 백업 구성 요소가 무엇인지 확실하지 않다는 것을 깨달았습니다. 설계 관점에서 EJBS와 @ManagedBeans?

결국 나는 JPA를 사용하므로 EJB는 비즈니스 계층의 자연스러운 선택입니다. JSF에서 직접 EJB를 사용하는 것이 좋습니다 (설명 된대로 여기)?

현재 나는 사용에 기대고 있습니다 @ManagedBeans 비즈니스 계층에 액세스 할 필요가없는 구성 요소 (예 : 도우미보기) 또는 요청/세션 데이터를 처리합니다. 다른 목적으로, 예를 들어 그리드에 무언가를 나열하는 경우 EJB에 직접 액세스합니다.

이것은 좋은 디자인입니까? 내가 사용할 것입니다 @ManagedBeans 깨끗한 층 분리를 위해 모든 백 콩의 경우, 어떤 경우에는 EJB에만 위임하는 경우가 있습니까?

도움이 되었습니까?

해결책

매우 유효한 질문이지만 답은 프로젝트 접근 방식의 "엄격함"에 달려 있다고 생각합니다. 비즈니스 논리를 구현할 때 JSF 백킹 콩과 EJB 사이에는 실제로 약간의 중복성이 있습니다.

안에 이상적인 JSF 기능의 사용 converters, rendered, validator, 등받이 콩 ~할 수 있었다 실제로 깨끗한 비즈니스 로직 코드입니다. 그러나 실제로 일부 프리젠 테이션 관련 논리가 종종 누출됩니다.

이 프레젠테이션 관련 논리는 이상적으로는 EJB에 있지 않아야합니다. 이 프레젠테이션 관련 논리는 Faces 패키지에 따라 다를 수 있지만 필요하지 않습니다. 그것은 그것이 무엇입니까? 하다 그것은 프리젠 테이션과 관련이 있는지 여부를 만듭니다.

통합 구성 요소 모델에는 몇 가지 장점이 있습니다. 그리고 그것은 접근법입니다 이음매 그리고 . 두 경우 모두 선언 거래 등을 가진 비즈니스 구성 요소 등 JSF에서 직접 사용할 수 있습니다 (Spring은 EJB를 사용하지 않지만 유사한 모델을 제공합니다). 그러나 EJB Purist는 두 사람을 분리해야한다고 말합니다.

그래서 나에게 그것은 궁극적으로 프로젝트의 맛과 크기에 관한 문제입니다. JSF에서 EJB를 사용하는 중소형 프로젝트의 경우 잘 작동한다고 상상할 수 있습니다. 이 엄격함이 중요한 더 큰 프로젝트의 경우 레이어를 망치지 않도록하십시오.

다른 팁

Java EE 6에는 다양한 관리 콩 사이에 약간의 중첩이 있습니다.

View 레이어에서는 @ManagedBean을 고수 할 수있는 특별한 이점이 없습니다. CDI 변형 @Named는 동일하게 수행 할 수있는 것 같습니다. 예를 들어 전환 범위에 대한 액세스를 제공합니다.

현재의 사고는 결국 EJB 구성 요소 모델이 CDI 주석 세트로 개조 될 것입니다. 특히 전문가 그룹 회원 인 Reza Rahman은 종종 이것을 암시합니다. 예를 들어보십시오 Java EE 6의 종속성 주입 -1 부

당분간 이런 일이 일어나지 않았으므로 EJB Bean은 특히 JPA가 지속성을 위해 사용될 때 비즈니스 논리를 넣기에 가장 쉬운 곳으로 남아 있습니다.

그럼에도 불구하고 CDI가 EJB의 기능을 얻을 수 있는지 여부, IMHO는 여전히 "Backing Bean"개념에 별도의 콩을 사용하고 "비즈니스 로직"에 대한 별도의 Bean을 사용하는 것이 가장 모범 사례입니다.

백킹 콩은 실제로 미끄러질 수 있으며 모델 객체 및 서비스 (EJB)에 대한 일부 참조를 포함합니다. 뒷면 빈의 조치 방법은 거의 서비스에 직접 위임 할 수 있지만, 추가 값은 사용자에게 피드백 (성공 또는 실패시 facesmessages 추가)을 제공하고 작은 UI 수정을 수행하는 것입니다 (예 : 일부 대화 상자를 표시하는 부울을 거짓으로 설정) .

서비스 (비즈니스 로직)는 특정 프레젠테이션에 대해 아무것도 알지 못해야합니다. JSF 후원 콩, JAX-RS, 서블릿, 독립형 Java SE 원격 클라이언트 등에서 똑같이 사용할 수 있어야합니다.

모든 콩이 CDI 콩이 되더라도이 기본 책임 부서를 바꾸지는 않습니다.

흥미로운 기사, 그것에 대해 몰랐습니다. 그러나 나 에게이 기사는 JSF 관리 콩을 향한 소리처럼 냄새가납니다. 또한 JSF와 함께 EJB가 꽉 조여집니다. 소규모 (개인) 애플리케이션에서는 흥미로울 수 있지만 EJB의 서비스를 완전히 제어 할 수있는 실제 SOA 응용 프로그램에서는 그렇지 않을 수 있습니다.

무엇을 위해 무엇을 사용할 것인지, 나는 단지 @ManagedBean 하나 이상의 특정 JSF 뷰에 연결된 JSF 모델을 표시합니다. 완벽하게 사용할 수 있습니다 @EJB비 JSF 특정 비즈니스 로직 및/또는 데이터 모드의 경우. 주사 할 수 있습니다 @EJBS JSF 모델에서는 행동 방법으로 위임하고 getters/setter도 할 수 있지만 다른 방식으로는 안됩니다. 즉, JSF 모델을 @EJB, 이것은 단단한 커플 링으로 이어지고 만들 것입니다 @EJBJSF 컨텍스트 외부에서는 사용할 수 없습니다. 멀리, 당신의 디자인은 당신이 아무것도 가져 오지 않는 것을 보는 한 좋은 것처럼 들립니다. javax.faces 패키지 @EJB 수업.

XHTML에서 EJB를 호출하면 뷰에서 구현 선택과 비즈니스 계층 사이의 단단한 커플 링을 소개합니다.

관리되는 Bean을 사용하여 EJB를 호출하는 경우 (또는 심지어 비즈니스 대의원에 넣음) View Layer (XHTML)에 영향을 미치지 않고 비즈니스 계층을 스프링으로 완전히 변경할 수 있습니다.

IS는 기술적으로 가능하며, EJB를 관리하는 Bean으로 사용할 수있는 매우 쉽습니다. 아마도 이러한 공급 업체가 원하는 것일 것입니다. 그러나 그것이 올바른 일인지 여부는? - 아니.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top