2012-11-07 2 views
2

내 응용 프로그램에는 SLSB로 구현 된 "근로자"풀이 있습니다.언제 Stateless Session Bean 풀 초기화가 발생합니까?

<glassfish-ejb-jar> 
    <enterprise-beans> 
     <ejb> 
      <ejb-name>Worker</ejb-name> 
      <jndi-name>Worker</jndi-name> 
      <bean-pool> 

       <steady-pool-size>10</steady-pool-size> 
       <resize-quantity>2</resize-quantity> 
       <max-pool-size>30</max-pool-size> 
       <pool-idle-timeout-in-seconds>300</pool-idle-timeout-in-seconds> 
      </bean-pool> 
     </ejb> 
    </enterprise-beans> 
</glassfish-ejb-jar> 

실제로 풀 시작을 제대로 치수가 다음과 같은

나는 풀 초기화와 관련된 내 glassfish-ejb-jar.xml 일부 속성에 정의했습니다.

유일한 점은 초기화가 시작시 발생하지만 잠시 후 발생한다는 것입니다. 이것은 실제로 풀을 사용하려고 시도했지만 초기화되지 않은 클라이언트를 찾는데 어떤 문제가 있습니다.

시작시 풀 초기화를 트리거하는 방법이 있습니까? 아니면 완전히 컨테이너에 남아 있습니까?

답변

0

만약 문제가 해결 되었다면. 풀 초기화를 강제로 수행 할 방법을 찾지 못했지만 풀 구성원이 필요하자마자 전체 풀이로드됩니다.

이것은 분명히 "게으른"것으로 들리지만 실제로 응용 프로그램의 흐름에 문제가 발생하지 않더라도 풀링 된 콩은 상당히 무거 우므로 성능 문제를 확실히 나타냅니다.

2

Q : 시작시 풀 초기화를 트리거하는 방법이 있습니까? 아니면 이 완전히 컨테이너에 남아 있습니까?

예. web.xml 구성 1로 매개 변수 load-on-startup 설정을해야합니다 사용 시작 서블릿, 즉 서블릿 -

자바 EE 5 (EJB 3.0) 이상 : 그것은 당신이 사용하는 자바 EE 버전에 따라 달라집니다. 해당 서블릿의 init 메소드에서 Worker bean을 인스턴스화하고 시작시 모든 것이 발생합니다. 서블릿 구성의 예 :

<servlet> 
    <servlet-name>MyStartupServlet></servlet-name> 
    <servlet-class>your.package.MyStartupServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

자바 EE 6 (EJB 3.1)는 - 싱글 콩 @Startup 주석을 사용합니다. doc에서 :

EJB 컨테이너는 싱글 세션 빈 구현 클래스가 javax.ejb.Startup 주석 주석이없는 한 싱글 세션 빈 인스턴스를 초기화 할 때 결정하기위한 책임이 있습니다. 이 경우, 때때로 EJB 컨테이너는 불행하게도 그들은 싱글이 아닌 응용 프로그램 시작

+0

에 싱글 세션 빈을 초기화해야합니다, 열망 초기화했다. 실제로 초기화 프로 시저의 경우 @Startup으로 주석 처리 된 싱글 톤을 가지고 있지만 이러한 빈은 풀링해야합니다. – fabpicca

+0

그럴 경우 빈을 그대로두고 (SLSB, 풀링 ..) 인스턴스 생성을 위해 특별한 싱글 톤을 사용하십시오. 그들은 이제 귀하의 고객을 위해 준비가 될 것입니다. 그러나 잠시 사용하지 않으면 컨테이너가이를 제거 할 것임을 명심하십시오. –

관련 문제