2014-10-08 5 views
0

@Stateful@SessionScoped 주석 및 그 차이점을 다른 게시물 (this 게시 포함)에서 읽었습니다. 정의 포인트에서 @sessionScoped은 클라이언트/웹 계층간에 세션이 필요/생성 될 때 사용되며 @Stateful은 Bussiness Logic 계층에서 필요합니다. 그러나 나는 그것들을 구현할 때 실질적인 차이점을 파악하지 못하고있다. 다음은 간단한 예를 들어 HTTP 세션이 주어진 사용자와 서버 사이에 @SessionScoped 콩에 의해 유지되는 방법@stateful 및 @sessionScoped - 차이점 및이를 언제 올바르게 사용할 수 있습니까?

@Named 
@SessionScoped 
ShoppingCartUIBean { 

@inject 
    shoppingCart cart; 
    // more code 
} 

@Stateful 
ShoppingCart { 

//business logic of adding/updating/deleting cart items 
} 
  1. 입니까? 즉, 다른 컴퓨터에서 장바구니를 열었을 때 내 사용자 프로필과 연결된 장바구니를 볼 수 있어야합니다. 어떻게 확립 되었습니까?
  2. 위의 두 콩을 annonations으로 바꾸면 어떻게됩니까? 어떤 효과가 있을까요? (미안하지만 바보 같을 수도 있습니다. Java EE 세계에 들어가기 때문에 올바른 기본 정보를 얻고 싶습니다.)
  3. Differences : @SessionScoped vs @Stateful and @ApplicationScoped vs @Singleton 위의 위대한 게시물에 따르면, @Stateful 빈은 웹 응용 프로그램에서 거의 사용되지 않습니다. @Stateful이 절대적으로 필요한 경우가 있습니까?
  4. 관련된 참고 사항 : @stateful 콩을 @ApplicatonScoped 콩에 삽입하는 것이 맞습니까? 이것은 애플리케이션 전체가 하나의 @stateful 빈을 가지고 있고 모든 클라이언트가 프록시를 통해 하나의 상태있는 빈의 동일한 인스턴스를 사용한다는 것을 의미합니다. (여기에 설명 된대로 @StatefulservletsEJB example for stateless and stateful beans difference에 삽입하지 마십시오.

감사합니다.

답변

0

나는 최선을 다해 당신의 질문에 답하려고 노력할 것입니다.

Ad.1 @SessionScoped는 브라우저 세션과 관련되어 있으므로 다른 컴퓨터 (또는 브라우저)에서 동일한 세션을 볼 수 없습니다.

Ad.2 동일한 범위로만 동일한 구성 요소로 생각할 수는 없습니다. 기본적인 생각은 EJB와 JSF 빈이 다른 아키텍처 레이어에 의존한다는 것입니다. EJB 빈은 비즈니스 로직을 구현해야하며 jsf 빈은 양식과 기타 ui 구성 요소를 유지 관리해야합니다.

Ad.3 @Stateful beans는 시임 프레임 워크에서 매우 유용합니다. 이러한 bean과 extended persistence context를 사용하는 것은 lazy initialization error에 대한 해결책입니다. 아마도 이것이 seam creators가 그 bean을 사용하는 이유입니다. 나는 성능에 따라 Stateless beans를 선호하지만 유스 케이스에 의존하지는 않는다.

Ad.4 일반적으로 "범위가 좁은"빈을 "범위 초과"빈에 삽입하면 안됩니다. 세션이 파괴되고이 애플리케이션 빈이 파괴 된 세션 빈 대신에 있어야하는 동안 애플리케이션 범위가 존재합니까?

이 답변 중 하나라도 잘못 되었다면 수정하십시오.

+1

네 번째 점이 잘못되었다고 생각합니다. 이것은 모든 세션마다 항상 단일 세션 빈입니다. 단일 세션이 절대로 파괴되지 않습니다 .. –