2011-12-29 3 views
3

MVC 디자인 패턴을 복사하려고합니다. 그리고 이것은 내가하는 일이며 모든 요청을 처리하는 서블릿이 있습니다. 그것에 주사 된 ejbs가 있습니까? 따라서이 컨트롤러/서블릿은 @EJB 어노테이션으로 7-15 개의 ejbs로 선언됩니다.요청이 서블릿에서 완료 될 때마다 EJB가 서블릿에 주입됩니까?

예를 들어, 1 명의 사용자가 주 컨트롤러/서블릿을 호출하는지 묻고 싶습니다. ejbs는 그 호출에서만 주입되거나 사용자가 서블릿을 호출 할 때마다 매번 주입 되는가? 또는 ejbs는 서블릿이 처음 생성 될 때 삽입됩니까?

+0

수정 해 주셔서 감사합니다. @DataNucleus –

답변

2

삽입은 객체를 만들 때 수행되며 일반적으로 서블릿 컨테이너는 단일 스레드 모델의 경우 필수 항목은 아니지만 서블릿의 단일 인스턴스를 생성 한 후 별도의 스레드를 사용하는 경우 SingleThreadModel을 사용하지 않는 경우를 대비하여 케이스의 EJB를 한 번 만들어야합니다.

+0

감사합니다. 그게 분명해졌습니다 –

+1

이것은 사실이 아닙니다. SingleThreadModel은 서블릿이 한 번에 하나의 스레드 만 제공 할 수 있음을 의미합니다. 서블릿 컨테이너는 항상 한 번만 서블릿의 인스턴스를 생성합니다 (단일 스레드 모델 또는 그렇지 않은 경우). – Kal

+2

@Kal 서블릿 스펙을 확인하십시오 - SRV.2.2.1은 다음과 같이 말합니다 --- "SingleThreadModel 인터페이스를 사용하면 시간에 하나의 스레드 만 주어진 서블릿 인스턴스의 서비스 메소드에서 실행됩니다. 반드시 note 이 보증은 각 서블릿 인스턴스에만 적용된다. 컨테이너 은 이러한 객체를 풀링 할 수 있기 때문에 "본질적으로 다중 인스턴스가있을 수 있음을 의미한다 – Nrj

2

리소스는 객체 생성시에 주입됩니다 (정적 필드에는 삽입 할 수 없으므로 멤버 변수 만 삽입 할 수 있기 때문에).

서블릿의 경우 서블릿 클래스가 서블릿 컨테이너에 의해로드 된 다음 인스턴스가 만들어집니다. 이때 @EJB or @Resource이 주입됩니다. 그런 다음 컨테이너는 init() 메소드를 호출합니다.

+0

명확한 설명을 해주셔서 감사 드리며 서블릿이 생성 된 후 (즉, ejbs가 작성된 후) 올바른지 확인하십시오. 10 명의 사용자가 서블릿에 액세스하면 또는 ejb의 삽입은 그것이 생성 된 첫 번째 장소에서 이미 수행 되었기 때문에 더 이상 발생하지 않습니다 –

+1

예. 그들은 상태있는 세션 빈이 아니라면 그렇지 않습니다. 어떤 경우에는 세션 수만큼 세션을 진행하게됩니다. – Kal

관련 문제