Frage

Ich bin vor eine ganz besondere Situation. Ich verwende Hibernate-Vorlage mit Feder 3.0.5 für DB-Operationen. Wenn ich versuche, ein User-Modell zum ersten Mal einlegen, wird ein DataAccessException geworfen, die ich fangen. Nun wünsche ich den gleichen DB-Betrieb für etwa 3-mal wiederholen. Das zweite Mal, wenn es keine Ausnahme ausgelöst wird.

Hier ist der 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;
}

}

Ich habe gelesen, dass Runtime sollte nicht gefangen werden. Dann, wie Sie wiederholen ich den Vorgang. Soll ich bei der Dienstschicht wiederholen? Bin ich etwas fehlt? Jede Hilfe ist willkommen.

War es hilfreich?

Lösung

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

  

Ungeprüfter Ausnahmen sind Ausnahmen   , die nicht in einem zu erklären muß   throws-Klausel. sie erstrecken sich   Runtime. ein ungeprüfter   Ausnahme zeigt ein unerwartetes   Problem, das vermutlich aufgrund eines Fehlers ist   im Code.

Da DataAccessException ein RuntimeException ist, könnten Sie prüfen wollen, was die eigentliche Ursache für die Ausnahme ist und es zu beheben, anstatt sie zu kontrollieren und wiederholen Sie den Vorgang.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top