2011-04-18 3 views
0

엔터프라이즈 이벤트 기반 응용 프로그램이 있습니다. JMS 대기열에서 읽는 16 개의 MDB가 있습니다. 모든 MDB가이 큐에서 읽는 중지 이후MDB가이 예외 이후에 작동하지 않습니다.

####<Apr 18, 2011 11:47:15 AM CEST> <Error> <WebLogicServer> <sapmop11> <cont0Server11> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1303120035886> <BEA-000337> <[STUCK] ExecuteThread: '8' for queue: 'weblogic.kernel.Default (self-tuning)' h 
as been busy for "647" seconds working on the request "[email protected]", which is more than the configured time (StuckThreadMaxTime) of "600" seconds. Stack trace: 
     java.lang.Thread.sleep(Native Method) 
     weblogic.ejb.container.internal.JMSPollerManager.waitForPollersToStop(JMSPollerManager.java:82) 
     weblogic.ejb.container.internal.JMSConnectionPoller.waitForMessagePollerExit(JMSConnectionPoller.java:795) 
     weblogic.ejb.container.internal.JMSConnectionPoller.disconnect(JMSConnectionPoller.java:920) 
     weblogic.ejb.container.internal.MDConnectionManager.timerExpired(MDConnectionManager.java:166) 
     weblogic.timers.internal.TimerImpl.run(TimerImpl.java:273) 
     weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:516) 
     weblogic.work.ExecuteThread.execute(ExecuteThread.java:201) 
     weblogic.work.ExecuteThread.run(ExecuteThread.java:173) 
> 
####<Apr 18, 2011 11:48:15 AM CEST> <Error> <WebLogicServer> <sapmop11> <cont0Server11> <[ACTIVE] ExecuteThread: '9' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1303120095935> <BEA-000337> <[STUCK] ExecuteThread: '8' for queue: 'weblogic.kernel.Default (self-tuning)' h 
as been busy for "707" seconds working on the request "[email protected]", which is more than the configured time (StuckThreadMaxTime) of "600" seconds. Stack trace: 
     java.lang.Thread.sleep(Native Method) 
     weblogic.ejb.container.internal.JMSPollerManager.waitForPollersToStop(JMSPollerManager.java:82) 
     weblogic.ejb.container.internal.JMSConnectionPoller.waitForMessagePollerExit(JMSConnectionPoller.java:795) 
     weblogic.ejb.container.internal.JMSConnectionPoller.disconnect(JMSConnectionPoller.java:920) 
     weblogic.ejb.container.internal.MDConnectionManager.timerExpired(MDConnectionManager.java:166) 
     weblogic.timers.internal.TimerImpl.run(TimerImpl.java:273) 
     weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:516) 
     weblogic.work.ExecuteThread.execute(ExecuteThread.java:201) 
     weblogic.work.ExecuteThread.run(ExecuteThread.java:173) 
> 

및 응용 프로그램을 다시 시작해야 : 나는 일부 통제되지 않은 예외가 도착했을 때 나는이 스택을받을 수 있습니다.

이있는 MDB의의 onMessage 코드 :

@Override 
    @TransactionAttribute(TransactionAttributeType.REQUIRED) 
    public void onMessage(Message message) { 
     OnlineEventMessage<? extends Serializable> eventMessage = null; 
     try { 
      TextMessage textMessage = (TextMessage) message; 
      String stringMessage = textMessage.getText(); 

      logger.debug("e' stato ricevuto il messaggio {}", stringMessage); 
      logger.debug("eventMessageParser {}", onlineEventMessageParser); 
      logger.debug("legacyEventMessageService {}", legacyEventMessageService); 

      EventMessageAnagrafica anagrafica = anagraficaParser.parse(stringMessage, true); 
      String multichannelId = anagrafica.getMultichannelId(); 

      eventMessage = onlineEventMessageParser.parse(stringMessage, true); 

      MDC.put("multichannelId", multichannelId); 
      MDC.put("eventType", eventMessage.getEventType().getEventCode()); 
      legacyEventMessageService.handle(eventMessage); 
     } catch (JMSException e) { 
      retryJmsTemplate.send(destination, new RedeliveryMessageCreatorUtil(message)); 
      logger.error("si e' verificato un errore JMS nel processamento dell'evento {}, riaccodamento in corso...", e); 
     } catch (RuntimeException e) { 
      logger.error("si e' verificata una runtime exception per il messaggio {}", e); 

      legacyErrorHandlerService.handle(eventMessage); 

     } catch (Exception e) { 
      logger.error("si e' verificato un errore inaspettato per il messaggio {}", e); 
      if (eventMessage != null && eventMessage.getIdEventMessage() != null) { 
       logger.error("Il messaggio gia' presente nelle catene di elaborazione"); 
       OnlineEventMessage<?> onlineMessage = eventMessageDao.getItemByID(eventMessage.getIdEventMessage()); 
       if (onlineMessage != null) { 
        onlineMessage.setEventState(EventState.PROCESSING_ERROR); 
        eventMessageDao.updateItem(onlineMessage); 
        eventMessageDao.flush(); 
       } 
      } 
      context.setRollbackOnly(); 
     } 
    } 

어떤 생각? 친절한 답변 마시모

답변

0

이것은 거래 문제처럼 보입니다. 다음 번에 스레드 덤프를 가져 와서 스레드가 수행중인 작업을 살펴보십시오. 이 작업은 관리 콘솔을 통해 수행 할 수 있습니다.

관련 문제