1

我得到這個用例:哪個是處理java MDB異常的最佳方法?

這個圖代表的企業模型。 Weblogic 10.3上的Java EE技術與IoC和AOP的Spring框架的槓桿作用,JPA與Spring jpatemplate的持久性以及交互框架的彈簧集成。 正如你所看到的,服務和網關之間沒有耦合,因爲春季整合添加了所有需要的魔術糖。現在我不得不處理異常處理。所有鏈都沒有檢查異常:數據訪問也沒有檢查異常,因爲jpatemplate在運行時異常中封裝了所有的sql異常。

所以,唯一的檢查異常,我把手上的MDB

@Override 
    @TransactionAttribute(TransactionAttributeType.REQUIRED) 
    public void onMessage(Message message) { 
     try { 
      TextMessage textMessage = (TextMessage) message; 
      String stringMessage = textMessage.getText(); 

      OnlineEventMessage<? extends Serializable> event = eventMessageParser.parse(stringMessage); 

      legacyEventMessageService.handle(event); 
     } catch (JMSException e) { 
      logger.error("si e' verificato un errore JMS nel processamento dell'evento {}", message, e); 
     } 
    } 

我發現,如果我得到例如NPE鏈條上的某些組件的消息被回滾的JMS隊列和過程被循環回去。

哪種情況下處理異常的最佳方法是? 捕獲MDB中的所有runtimeExceptions?

親切的問候 馬西莫

回答

1

這是處理在這種情況下異常的最好方法?捕獲MDB中的所有runtimeExceptions?

這取決於你想達到什麼。如果從你的描述中感覺到你想阻止郵件被回滾。是對的嗎?

在這種情況下,捕獲所有運行時異常只能到目前爲止。該系統也可能會引發錯誤,您不會那麼抓。所以你必須抓住Throwable。但是,那麼交易可能會超時,導致回滾。

總之,你想讓你的MDB成爲交易嗎?

另請注意,發件人的事務上下文不會傳播到MDB。

稍微偏離主題,但是你確定你需要jpatemplate嗎?看起來幾乎每個人都認爲JPA API本身很好,並且不需要Spring的任何「增強」,包括SpringSource本身。

+0

我注意到你的評論脫離主題,我想知道什麼是使用jpa而不是jpatemplate的折衷。 – 2011-02-03 20:38:40