我遇到了Spring的PersistenceExceptionTranslationPostProcessor
,這看起來很完美,因爲它抽象了在註釋爲@Repository
的DAO中拋出的異常。JMS的PersistenceExceptionTranslationPostProcessor DAO
現在我有一個使用JMS(ActiveMQ的)的應用程序,而不是一個數據庫作爲後端。我想使用類似PersistenceExceptionTranslationPostProcessor
到JMSException
小號轉化爲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()
永遠不會被觸發(用斷點檢查)。我顯然在這裏失去了一些東西,但是我無法弄清楚什麼。
謝謝您的回答。我已經知道'JmsUtils'類,但這是難題的一個重要部分。我已經更新了我現在卡在哪裏的答案。 – siebz0r
我不知道該JMS真正適合的DAO模式,而是使這項工作中,PersistenceExceptionTranslationPostProcessor需要PersistenceExceptionTranslationAdvisor這就需要一個需要自定義PersistenceExceptionTranslator這個參考一PersistenceExceptionTranslationInterceptor。否則... PostProcessor不知道應用您的翻譯器。 –