Rechercher dans ce blog

mercredi 11 avril 2012

DatacontrolCommandTransition

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