세월이 지난 WebLogic J2EE 애플리케이션은 Stateless Session Bean을 사용하는 메시지 구동 Bean을 가지고 있습니다. MDB onMessage 메소드는 상태 비 저장 세션 빈의 홈 인터페이스를 가져오고 홈 인터페이스의 create() 메소드를 호출하여 실제 비 상태 세션 빈을 가져옵니다.스테이트리스 세션 빈을 사용한 후에 MDB 호출 remove()를 수행해야합니까?
코드는 직접 사용, 세션 빈을 캐시하지 않습니다
public void onMessage(Message message)
{
...
MySessionBeanLocal ejbLocal = MySessionBeanLocalHome.create();
ejbLocal.myMethod();
는 MDB에 해당하는 제거() 호출이 없습니다.
제 질문은이 경우 remove()를 호출하지 않는 것이 좋습니까?
나는 하나가 상태 FUL 세션 빈에 대한() 제거를 호출 할 필요가 있음을 상당히 확신하지만, 제거() 호출 상태 적은에 필요한 경우 나 덜 분명하다.
우리는 최근 상당한 성능 향상을했지만 갑자기이 예외와 부하 상태 세션 빈에서 실행하기 시작
java.lang.RuntimeException가 : 에서는 MyApplication, EJBComponent : EJB MyMessageDrivenBean (응용 프로그램의 호출하여 MyApplication을 .jar)은 사용 가능한 풀에서 인스턴스를 가져 오기 위해 대기하는 동안 시간이 초과되었습니다. weblogic.ejb20.pool.StatelessSessionPool.waitForBean (StatelessSessionPool.java:229) weblogic.ejb20.manager.StatelessManager.preInvoke에서 weblogic.ejb20.pool.StatelessSessionPool.getBean (StatelessSessionPool.java:100) 에서 (StatelessManager에서 . 자바 : weblogic.ejb20.internal.BaseEJBLocalObject.preInvoke (BaseEJBLocalObject.java:228 140) ) weblogic.ejb20.internal.StatelessEJBLocalObject.preInvoke (StatelessEJBLocalObject.java:53에서 ) MyMessageDrivenBean_x56omo_ELOImpl.processMessage (MyMessageDrivenBean_x56omo_ELOImpl.java에서 : 28) weblogic.ejb20.internal.MDListener.execute (MDListener.java:370) 에서 MyMessageDrivenBean.onMessage (TBMessageListener.java:94) 에서 weblogic.ejb20.internal.MDListener.onM에서
이<message-driven-descriptor>
<pool>
<max-beans-in-free-pool>20</max-beans-in-free-pool>
<initial-beans-in-free-pool>5</initial-beans-in-free-pool>
우리의 무 상태 세션 빈 풀이 : weblogic.jms.client.JMSSession.onMessage에서 essage (MDListener.java:262) (JMSSession.java:2678)
우리의 MDB 풀로 설정 설정 :
<stateless-session-descriptor>
<pool>
<max-beans-in-free-pool>50</max-beans-in-free-pool>
<initial-beans-in-free-pool>5</initial-beans-in-free-pool>
내 질문은,뿐만 아니라 국가에 대한 적은 세션 빈을 제거()를 호출에도 책임이있는 무 상태 세션 빈에 만들 호출하는 MDB()인가? (이 애플리케이션은 remove()를 호출하지 않고 수년간 실행 한 것으로 보이지만 향상된 처리량으로 인해 오래된 버그가 노출되었는지 궁금합니다.)