0

我遇到了 Spring 的PersistenceExceptionTranslationPostProcessor,这似乎很完美,因为它抽象了在带有注释的 DAO 中抛出的异常@Repository

现在我有一个使用 JMS (ActiveMQ) 而不是数据库作为后端的应用程序。我想使用类似PersistenceExceptionTranslationPostProcessorJMSExceptions 翻译成 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()永远不会被命中(用断点检查)。我显然在这里遗漏了一些东西,但是我不知道是什么。

4

1 回答 1

0

虽然它不会转换为 DataAccessException 层次结构中的异常,但会JmsUtils.convertJmsAccessException()转换为 Spring 等价物......

/**
 * 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
 */
于 2013-01-07T16:54:56.823 回答