2010-11-29 21 views
0

Je suis confronté à une situation très particulière. J'utilise le modèle hibernate avec spring 3.0.5 pour les opérations de DB. Lorsque j'essaie d'insérer un modèle utilisateur la première fois, une exception DataAccessException est levée, que j'attrape. Maintenant, je souhaite réessayer la même opération DB par exemple 3 fois. La deuxième fois quand il, aucune exception n'est levée.Réessayer après le lancement de Spring DataAccessException ne fonctionne pas

Voici le code:

package com.user.profile.dao; 

@Repository("userProfileDAOImpl") 
public class UserProfileDAOImpl implements IUserProfileDAO { 

@Autowired 
private HibernateTemplate hibernateTemplate; 

public Long insertUserProfileData(User user) throws AppNonFatalException { 
Long id = null; 
int retryCount = 0; 

while (retryCount < 3) { 
try { 
id = (Long)hibernateTemplate.save(user); 
} 
catch (DataAccessException e) { 
e.printStackTrace(); 
retryCount++; 
System.out.println("Retry Count = " + retryCount); 
if (retryCount > 3) { 
throw new AppNonFatalException(e.getLocalizedMessage(), "10000", e.getMessage(), e); 
} 
} 
catch (Exception e) { 
/* not coming inside this block too second time onwards */ 
System.out.println("Pure Exception"); 
} 
} 

return id; 
} 

} 

je lis que RuntimeExceptions ne doivent pas être pris. Ensuite, comment puis-je réessayer l'opération. Devrais-je réessayer à la couche de service? Est-ce que je manque quelque chose? Toute aide est appréciée.

Répondre

1

De https://community.oracle.com/docs/DOC-983543:

exceptions non vérifiées sont des exceptions qui ne ont pas besoin d'être déclarés dans une clause throws. Ils s'étendent RuntimeException. Une exception non cochée indique un problème inattendu probablement dû à un bogue dans le code.

Depuis DataAccessException est un RuntimeException, vous pouvez vérifier quelle est la cause réelle de l'exception et le fixer au lieu de l'attraper et recommencez l'opération.

+0

Peut-être que vous avez une erreur dans les mappages yout, ou la connexion échoue, etc. Si vous postez la trace de la pile de l'exception, je pourrais être en mesure de vous donner un conseil plus précis. – arturo