pour avoir la possibilité de faire un rollback sur un ensemble de traitement en cas d'erreur : on peut utiliser une telecommande
attention l'utilisation de la telecommande n'améliore pas les performances
try {
DataControlCommandTransition telecommande = new DataControlCommandTransition(atenContext);
telecommande.beginTransaction(atenContext);
foreach (.............datacontrols ){
//traitement sur le dc
telecommande.playtransition(datacontrol);
}
telecommande.endTransaction(true);
} catch (LoggerException e1) {
String eventsString = "";
for (LoggerEvent event : e1.getEventList()) {
if (event != null) {
eventsString += Utils.nonNull(event.toString()) + " ; ";
}
}
L'erreur suivante arrive si on utilise dans le même thread monDatacontrol.transition et telecommande.playtransition(monDatacontrol).
_!_!_ERROR_!_!_ Same thread ask stmt twice !!! [null] and stackTrace=[java.lang.Throwable
at com.imagina.packbox.database.DatabaseConnection.reserveStatementFromPool(DatabaseConnection.java:1500)
at com.imagina.packbox.database.DatabaseConnection.createStatement(DatabaseConnection.java:791)
at com.imagina.packbox.lock.Lock.lock(Lock.java:259)
at com.imagina.packbox.lock.Lock.lockWait(Lock.java:201)
at com.imagina.packbox.lock.Lock.multipleLock(Lock.java:116)
at com.imagina.packbox.lock.LockResourceManager.lock(LockResourceManager.java:231)
at com.imagina.noon.toolbox.datacontrol.core.DataControl.transition(DataControl.java:3455)
at com.imagina.noon.toolbox.datacontrol.core.DataControl.transition(DataControl.java:3269)
Aucun commentaire:
Enregistrer un commentaire