Supposons que je la structure suivante dans mon projet (j'utilise iBatis comme DAO):Comment résoudre un problème de transactions imbriquées avec iBatis?
public class UsersManager {
public void do {
mySqlMapClient.startTransaction();
// my code here
mySqlMapClient.endTransaction();
mySqlMapClient.commitTransaction();
}
}
public class StatsManager {
public void do {
mySqlMapClient.startTransaction();
// my code here
mySqlMapClient.endTransaction();
mySqlMapClient.commitTransaction();
}
}
public class App {
public void do {
myUsersManager.do();
myStatsManager.do(); // here I get an exception, because the transaction is already started
}
}
Alors, ma question est, comment puis-je résoudre ce problème? J'ai plus de 150 transactions dans mon projet, donc ce n'est pas une solution facile pour réécrire toute la logique biz. Y at-il une approche standard pour des situations comme celle-ci et où dois-je regarder?
Eh bien, la prochaine chose que je ferai est d'apprendre le printemps. Cependant, j'ai déjà pris en compte que j'ai un énorme problème de conception mettant mes transactions dans les DAO. – Michael
En tout cas, merci beaucoup pour votre réponse. – Michael
Cela pourrait valoir le refactoring. Pensez à combien votre code sera plus petit si la logique de transaction est dans un endroit au lieu de 150 classes. C'est ce que la programmation orientée aspect peut faire pour les préoccupations transversales. Les transactions sont une; la journalisation en est une autre. Vous pourriez trouver que le mettre dans Spring iBatis n'est pas aussi difficile que vous l'imaginez. – duffymo