2013-01-07 44 views
0

我遇到了Spring的PersistenceExceptionTranslationPostProcessor,這看起來很完美,因爲它抽象了在註釋爲@Repository的DAO中拋出的異常。JMS的PersistenceExceptionTranslationPostProcessor DAO

現在我有一個使用JMS(ActiveMQ的)的應用程序,而不是一個數據庫作爲後端。我想使用類似PersistenceExceptionTranslationPostProcessorJMSException小號轉化爲Spring的DataAccessException

之前,我去重新發明我在網上搜索了這樣的事情,但沒有發現它的輪子。也許我正在使用錯誤的搜索關鍵詞,所以第二次嘗試,有沒有人知道這種現有的東西,還是我必須發明這個輪子?


更新:

看來我要創建一個PersistenceExceptionTranslator自己。我也做了以下內容:

public abstract class AbstractJmsDao implements PersistenceExceptionTranslator 
{ 
    public void throwException() 
    { 
     try 
     { 
      throw new JMSException("test"); 
     } 
     catch (JMSException ex) 
     { 
      throw JmsUtils.convertJmsAccessException(ex); 
     } 
    } 

    @Override 
    public DataAccessException translateExceptionIfPossible(RuntimeException ex) 
    { 
     // translate exceptions here. 
    } 
} 

新增PersistenceExceptionTranslationPostProcessor到我的XML配置:

<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" /> 

附加說明我的DAO實現與@Repository

@Repository 
public class CustomerJmsDao extends AbstractJmsDao implements CustomerDao 
{ 
    public void test() 
    { 
     throwException(); 
    } 
} 

在我的抽象JMS DAO實現PersistenceExceptionTranslator

然而,當0123拋出,translateExceptionIfPossible()永遠不會被觸發(用斷點檢查)。我顯然在這裏失去了一些東西,但是我無法弄清楚什麼。

回答

0

雖然它並沒有轉化爲在DataAccessException體系例外,JmsUtils.convertJmsAccessException()轉換成春當量......

/** 
* Convert the specified checked {@link javax.jms.JMSException JMSException} to a 
* Spring runtime {@link org.springframework.jms.JmsException JmsException} equivalent. 
* @param ex the original checked JMSException to convert 
* @return the Spring runtime JmsException wrapping the given exception 
*/ 
+0

謝謝您的回答。我已經知道'JmsUtils'類,但這是難題的一個重要部分。我已經更新了我現在卡在哪裏的答案。 – siebz0r

+0

我不知道該JMS真正適合的DAO模式,而是使這項工作中,PersistenceExceptionTranslationPostProcessor需要PersistenceExceptionTranslationAdvisor這就需要一個需要自定義PersistenceExceptionTranslator這個參考一PersistenceExceptionTranslationInterceptor。否則... PostProcessor不知道應用您的翻譯器。 –