2009-07-22 7 views
0

Je souhaite contrôler moi-même la transaction de mise en veille prolongée afin de pouvoir revenir en arrière à tout moment. J'appelle un thread pour faire des affaires mais je ne l'attends pas pour finir son travail et mettre à jour DB. Cette mise à jour n'est disponible que lorsque la méthode se termine, mais je souhaite valider les modifications dans chaque boucle for, donc j'ai besoin de contrôler la transaction d'hibernation.Transaction de l'utilisateur de printemps avec hibernate

Mon code d'échantillon est ci-dessous:

for(BaseFileprocess fileProcess : unprocessedFiles) { 
      BaseFileprocessfunctype functionType = fileProcessFunctionTypeService.findBySerno(fileProcess.getFunctioncodeserno()); 
      if(functionType != null) { 
       taskExecutor.execute(new ServiceCallThread(functionType.getFunctionname(), fileProcess.getSerno(), fileProcess.getFilename())); 
       fileProcess.setStatu("1"); 
       fileProcessService.update(fileProcess);//I need commit here 
      } 
      else { 
       System.out.println("There is no defined Function Type"); 
      } 
     } 

Toute suggestion?

+0

Ce peu de code n'est pas vraiment intéressant, nous devons voir le bit qui fait fonctionner le hibernate. – skaffman

Répondre

2

Regardez dans transactionTemplate de printemps. De la docs:

// single TransactionTemplate shared amongst all methods in this instance 
private final TransactionTemplate transactionTemplate; 

// use constructor-injection to supply the PlatformTransactionManager 
public SimpleService(PlatformTransactionManager transactionManager) { 
    Assert.notNull(transactionManager, "The 'transactionManager' argument must not be null."); 
    this.transactionTemplate = new TransactionTemplate(transactionManager); 
} 

public Object someServiceMethod() { 
    return transactionTemplate.execute(new TransactionCallback() { 

     // the code in this method executes in a transactional context 
     public Object doInTransaction(TransactionStatus status) { 
      updateOperation1(); 
      return resultOfUpdateOperation2(); 
     } 
    }); 
} 
+0

Merci. Le modèle de transaction me convient. – firstthumb

Questions connexes