2010-07-23 8 views
5

Je connais l'état de l'API "Un client sûr pour travailler avec vos cartes SQL", mais je veux comprendre comment cela fonctionne un peu mieux et je me demandais si quelqu'un l'utilisait dans un environnement multithread avec des transactions. Par exemple en utilisant:iBatis SqlMapClient et la sécurité des threads

void doSomeSql() throws SQLException{ 
    sqlMapper.startTransaction(); 
    sqlMapper.startBatch(); 
    final Map paramMap = new HashMap(); 
    paramMap.put("data", "data"); 
    Integer num = (Integer) sqlMapper.queryForObject("getRowCount", paramMap);//get row count 
    sqlMapper.insert("insertData", paramMap); //insert row 
    num = (Integer) sqlMapper.queryForObject("getRowCount", paramMap);//get row count again 
    sqlMapper.executeBatch(); 
    sqlMapper.commitTransaction(); 
} 

Si cela a été utilisé sur l'endroit où plusieurs threads peuvent appeler cela et il n'y a qu'un seul objet sqlMapper partagé aurait-il des fils qui exécutent le lot car un autre thread appelé executeBatch()? Cela devient plus d'un problème si j'ai beaucoup d'autres méthodes faisant des mises à jour de suppression etc. en utilisant le même sqlMapper dans d'autres threads.

Je ne veux pas démarrer une transaction dans un thread, et avoir un autre commit avant que le thread précédent a été fait. Je comprends que je peux synchroniser sur tout cela, mais je préférerais ne pas le faire.

Répondre

2

Chaque thread obtiendra sa propre connexion DB, et les transactions fonctionneront comme vous le souhaitez: elles sont également par connexion DB.