2008-08-27 5 views
6

내 이해대로 상태 비 저장 세션빈은 비즈니스 로직을 코딩하는 데 사용됩니다. 인스턴스가 여러 요청에 의해 공유되므로 인스턴스 변수에 데이터를 저장할 수 없습니다. 그래서 그들은 싱글 톤 (Singleton) 클래스와 같은 것처럼 보입니다. 그러나 차이점은 모든 요청에 ​​대해 상태 비 저장 세션 빈의 개별 인스턴스를 생성 (또는 풀에서 재사용)하는 것입니다.왜 무국적 세션 빈은 단일 스레드입니까?

Google 검색에서 Java EE 사양이 단일 스레드라고 가정하고 있습니다. 그러나 나는 왜 단일 스레드 수 지정 이유를 얻을 수 없습니까?

답변

5

SLSB는 TX 컨텍스트로 인해 단일 스레드이며, 주체는 호출 될 때 Bean 인스턴스와 연관됩니다. 이 빈은 풀되며 최대 풀 크기에 도달하지 않는 한 개별 스레드 (공급 업체에 따라 다름)에서 처리됩니다.

모든 호출이 Tx 컨텍스트, 보안 컨텍스트 정보 등을 포함하는 요청 정보가 포함 된 servlet doGet/Post처럼 보일 것입니다. 따라서 최소한 코드는 깨끗하게 보입니다 (개발자에 따라 다름).

4

스테이트리스 세션 빈이 단일 스레드 인 가장 큰 이유는 컨테이너에 대해 확장 성을 높이기 위해서입니다. 컨테이너는 런타임 환경에 대한 많은 가정을 간소화 할 수 있습니다. 두 번째 이유는 개발자가 다른 스레드 컨텍스트에서 결코 호출되지 않기 때문에 비즈니스 로직에서 동기화 또는 재진입에 대해 개발자가 염려 할 필요가 없으므로 개발자가 더 쉽게 사용할 수 있도록하는 것입니다.

원래 EJB 1.0 사양의 검토에서이 논리가 논의 된 것을 기억합니다. 스펙의 목표 섹션을 살펴 보겠습니다. 사양 목록은 http://java.sun.com/products/ejb/docs.html을 참조하십시오.

관련 문제