IT TIP

Stateless 세션 Bean을 통해 Stateful 세션 Bean을 언제 사용합니까?

itqueen 2020. 10. 13. 19:58
반응형

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 세션 빈 을 사용하는 가장 좋은 예는 사용자가 구매하려는 모든 제품을 저장 하는 쇼핑 카트 라고 생각합니다 .

참고 URL : https://stackoverflow.com/questions/18000431/when-to-use-stateful-session-bean-over-stateless-session-bean

반응형