2014-07-11 1 views
0

우리는 클라이언트에서 실행중인 angularjs와 JSON 데이터를 제공하고 사용하는 J2EE 애플리케이션으로 애플리케이션을 빌드 할 것입니다. REST는 관심 분리 원칙을 위반하는 EJB 3.1 메소드에 주석을 달고 있습니까?

@path, @get 및 기타 HTTP 관련 것과 같은 직접 javax.ws.rs 주석과 우리의 @Stateless EJB를 우리의 사업 방법을 노출하는 나쁜 관행인가? 우리는 "웹 관련"가져 오기로 채워지는 경우 비즈니스 코드가 " impure"이 될 것이라고 우려하고 있습니다.

아니면 편집증 환자입니까?

답변

1

http://docs.oracle.com/javaee/6/tutorial/doc/gipjg.html스테이트리스 세션 빈은 웹 서비스을 구현할 수 있습니다. 그래서, 나는

무 상태 세션 빈 웹 서비스와 같은 기능을 사용할 수 있도록 안정적이지 EJB들에 REST 주석을 추가 할 확실히해야한다고 생각

와 대화 상태를 유지하지 않는 무 상태 세션 빈 클라이언트. 클라이언트가 Stateless Bean의 메소드를 호출 할 때, bean의 인스턴스 변수는 해당 클라이언트에 고유 한 상태 (호출 기간 동안 만)가 포함될 수 있습니다 ( ). 메서드가 일 때 클라이언트 특정 상태를 유지하면 안됩니다. 그러나 클라이언트는 풀링 된 상태없는 빈에서 인스턴스 변수의 상태를 변경할 수 있으며이 상태는 풀링 된 상태 비 저장 빈 의 다음 호출까지 보류됩니다. 메소드 호출 중을 제외하고, 모든 상태 비 저장 빈 인스턴스는 동등하므로 EJB 컨테이너가 모든 클라이언트에 인스턴스를 할당 할 수 있습니다. 즉, 상태 비 저장 세션 빈의 상태는 모든 클라이언트에 적용되어야합니다.

여러 클라이언트를 지원할 수 있기 때문에 상태 비 저장 세션빈은 개의 클라이언트를 필요로하는 응용 프로그램에 대해 더 나은 확장 성을 제공 할 수 있습니다. 일반적으로 응용 프로그램은 같은 수의 클라이언트를 지원하기 위해 stateful 세션 bean보다 더 적은 stateless 세션 bean을 필요로합니다.

상태 비 저장 세션 빈은 웹 서비스을 구현할 수 있지만 상태 빈 세션 빈은 구현할 수 없습니다.

+0

나는 개인적으로 접근 방식을 좋아한다. EJB 프로그래밍 패러다임은 요청이 들어 왔을 때 컨테이너가 강제로 트랜잭션을 시작하고 실패시 커밋 또는 롤백을 수행하도록합니다. 대신 BL을 SLSB에 넣지 않고 일부 CDI 컨트롤러 개체에 위임합니다. –

+0

@ wand-maker는 "웹 서비스를 구현할 수 있습니다 _"라고하기 때문에 그렇게하는 것이 좋지 않습니다. – bruno

+0

@ bruno 음, 모든 평범한 결정에 대해 열심히 생각하는 것도 좋은 습관이 아닙니다. 때로는 길을 택하고 코스를 배우고 길을 취하는 것이 더 나은 곳을 택하는 것이 좋습니다. "우수 사례"라는 문구가 매우 두려워서 동료 개발자가 더 많은 의사 결정을 내리는 데 도움이된다고 느낀다 –