Stateless 세션 Bean을 통해 Stateful 세션 Bean을 언제 사용합니까?
Stateful 세션 Bean은 다음과 같이 정의됩니다.
Stateful Session Beans 객체의 상태는 인스턴스 변수의 값으로 구성됩니다. Stateful 세션 Bean에서 인스턴스 변수는 고유 한 클라이언트 Bean 세션의 상태를 나타냅니다. 클라이언트가 Bean과 상호 작용 ( "대화")하기 때문에이 상태를 종종 대화 상태라고합니다.
상태 비 저장 세션 Bean은 다음과 같이 정의됩니다.
Stateless Session Beans Stateless 세션 Bean은 클라이언트와의 대화 상태를 유지하지 않습니다. 클라이언트가 stateless bean의 메소드를 호출 할 때 bean의 인스턴스 변수는 해당 클라이언트에 특정한 상태를 포함 할 수 있지만 호출 기간 동안 만 가능합니다. 메서드가 완료되면 클라이언트 별 상태가 유지되지 않아야합니다. 그러나 클라이언트는 풀링 된 Stateless Bean에서 인스턴스 변수의 상태를 변경할 수 있으며이 상태는 풀링 된 Stateless Bean의 다음 호출로 유지됩니다. 메소드 호출 동안을 제외하고 상태 비 저장 빈의 모든 인스턴스는 동일하므로 EJB 컨테이너가 모든 클라이언트에 인스턴스를 할당 할 수 있습니다. 즉, 상태 비 저장 세션 빈의 상태는 모든 클라이언트에 적용되어야합니다.
Stateful 세션 Bean에 비해 Stateless 세션 Bean을 사용하는 이점은 다음과 같습니다.
Stateless Session Bean은 여러 클라이언트를 지원할 수 있기 때문에 많은 클라이언트가 필요한 애플리케이션에 더 나은 확장 성을 제공 할 수 있습니다. 일반적으로 애플리케이션은 동일한 수의 클라이언트를 지원하기 위해 Stateful 세션 Bean보다 적은 Stateless 세션 Bean을 필요로합니다.
그래서 떠오르는 질문은 언제 Stateful Session Bean을 사용해야 하는가입니다. 이 문제에 대한 순진한 이해를 위해서는 가능한 한 stateless 세션 빈을 사용해야합니다.
Stateful Session Bean을 사용해야하는 후보는 무엇입니까? 좋은 예가 있습니까?
먼저 서버에서 Bean이 생성되고 처리되는 방식을 이해해야합니다.
대한 무 상태 세션 빈 서버는 풀에 인스턴스 변수 양을 유지할 수 있습니다. 클라이언트가 이러한 상태 비 저장 빈을 요청할 때마다 (예 : 메소드를 통해) 해당 요청을 처리하기 위해 임의의 인스턴스가 선택됩니다. 즉, 클라이언트가 두 개의 후속 요청을 수행하면 Stateless Bean의 두 가지 다른 인스턴스가 요청을 처리 할 수 있습니다. 실제로 두 요청 사이에는 대화 상태가 없습니다. 또한 클라이언트가 사라지더라도 상태 비 저장 빈은 파괴되지 않고 다른 클라이언트의 다음 요청을 처리 할 수 있습니다.
반면에 Stateful 세션 빈 은 클라이언트와 밀접하게 연결되어 있습니다. 각 인스턴스는 생성되고 단일 클라이언트에 바인딩되며 해당 특정 클라이언트의 요청 만 처리합니다. 따라서 Stateful Bean에서 두 개의 후속 요청을 수행하면 요청이 항상 동일한 Bean 인스턴스에서 제공됩니다. 즉, 요청간에 대화 상태를 유지할 수 있습니다. 라이프 사이클이 끝나면 클라이언트는 remove 메소드를 호출하고 Bean은 가비지 콜렉션을 위해 폐기 / 준비됩니다.
Stateless 또는 Stateful을 언제 사용해야합니까?
그것은 주로 대화 상태 를 유지할 것인지 여부에 따라 다릅니다 . 예를 들어 두 개의 숫자를 더하고 결과를 반환하는 메서드가있는 경우 일회성 작업이기 때문에 상태 비 저장 빈을 사용합니다. 이 메서드를 다른 번호로 두 번 호출하면 이전 추가 결과에 더 이상 관심이 없습니다.
그러나 예를 들어 클라이언트가 수행 한 요청 수를 세고 싶다면 Stateful Bean을 사용해야합니다. 이 시나리오에서는 클라이언트가 이전에 빈 메서드를 얼마나 자주 요청했는지 아는 것이 중요하므로 빈에서 대화 상태를 유지해야합니다 (예 : 변수 사용). 여기서 상태 비 저장 빈을 사용하면 클라이언트의 요청이 매번 다른 빈에서 제공되어 결과가 엉망이됩니다.
Stateful 세션 빈 을 사용하는 가장 좋은 예는 사용자가 구매하려는 모든 제품을 저장 하는 쇼핑 카트 라고 생각합니다 .
'IT TIP' 카테고리의 다른 글
jquery에서 href를 업데이트 (추가)하는 방법은 무엇입니까? (0) | 2020.10.13 |
---|---|
Rails 3.1을 여러 데이터베이스와 연결 (0) | 2020.10.13 |
다른 CSS 클래스를 사용하여 CSS 클래스의 속성을 재정의하는 방법 (0) | 2020.10.13 |
부트 스트랩 모달은 스크롤 막대를 제거합니다. (0) | 2020.10.13 |
System.web.mvc 누락 (0) | 2020.10.13 |