Je suis tombé sur le PersistenceExceptionTranslationPostProcessor
de Spring et cela semble parfait car cela fait abstraction des exceptions levées dans un DAO annoté avec @Repository
.PersistenceExceptionTranslationPostProcessor pour JMS DAO
Maintenant, j'ai une application qui utilise JMS (ActiveMQ) au lieu d'une base de données en tant que back-end. Je voudrais utiliser quelque chose comme PersistenceExceptionTranslationPostProcessor
pour traduire JMSException
à Spring . Avant de partir et de réinventer la roue, j'ai cherché sur le web pour une telle chose, mais je ne l'ai pas trouvé. Peut-être que j'utilise les mauvaises clés de recherche, alors un deuxième essai, est-ce que quelqu'un sait quelque chose comme ceci existant, ou dois-je inventer cette roue?
Mise à jour:
Il semble que je dois créer moi-même PersistenceExceptionTranslator
. Je l'ai fait ce qui suit:
Mis en œuvre PersistenceExceptionTranslator
sur mon JMS abstrait OAC:
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.
}
}
Ajouté PersistenceExceptionTranslationPostProcessor
à ma config XML:
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
Annotated mon implémentation DAO avec @Repository
:
@Repository
public class CustomerJmsDao extends AbstractJmsDao implements CustomerDao
{
public void test()
{
throwException();
}
}
Cependant, quand un RuntimeException
est levée, le translateExceptionIfPossible()
n'est jamais touché (vérifié avec le point d'arrêt). Il me manque évidemment quelque chose ici, mais je n'arrive pas à comprendre quoi.
Merci pour votre réponse. Je connaissais déjà la classe 'JmsUtils' mais c'est une pièce essentielle du puzzle. J'ai mis à jour ma réponse à l'endroit où je suis coincé maintenant. – siebz0r
Je ne suis pas sûr que JMS correspond vraiment au modèle DAO, mais pour que cela fonctionne, le PersistenceExceptionTranslationPostProcessor a besoin d'un PersistenceExceptionTranslationAdvisor qui nécessite un PersistenceExceptionTranslationInterceptor qui nécessite une référence à votre PersistenceExceptionTranslator personnalisé. Sinon, PostProcessor ne sait pas comment appliquer votre traducteur. –