我遇到了 Spring 的PersistenceExceptionTranslationPostProcessor
,这似乎很完美,因为它抽象了在带有注释的 DAO 中抛出的异常@Repository
。
现在我有一个使用 JMS (ActiveMQ) 而不是数据库作为后端的应用程序。我想使用类似PersistenceExceptionTranslationPostProcessor
将JMSException
s 翻译成 Spring 的东西DataAccessException
。
在我去重新发明轮子之前,我在网上搜索了这样的东西,但没有找到。也许我使用了错误的搜索键,所以作为第二次尝试,有没有人知道这样的东西存在,或者我必须发明这个轮子?
更新:
看来我必须创造一个PersistenceExceptionTranslator
自己。我做了以下事情:
PersistenceExceptionTranslator
在我的抽象 JMS DAO 上实现:
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();
}
}
但是,当 aRuntimeException
被抛出时,translateExceptionIfPossible()
永远不会被命中(用断点检查)。我显然在这里遗漏了一些东西,但是我不知道是什么。