0

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.

Répondre

0

Bien qu'il ne se traduit pas des exceptions dans la hiérarchie des DataAccessException, JmsUtils.convertJmsAccessException() convertit en équivalents printemps ...

/** 
* 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

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

+0

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. –