Bug #655
ferméProblème de connexions managées et de gestion des transactions dans com.stratelia.webactiv.util.Schema
Description
Quand les transactions sont gérées au sein d'un conteneur (EJB par exemple), les méthodes setAutoCommit(), commit() et rollback() d'une connexion JDBC obtenue depuis un DataSource, lèvent une exception SQLException.
Les méthodes createConnection(), commit() et rollback() de la classe Schema peuvent être modifiées pour à la fois continuer à gérer les transactions comme avant tant que la connexion mémorisée dans Schema n'est pas managée et qu'une transaction n'est pas commencée, ou bien éviter de faire quoi que ce soit avec les transactions dans le cas contraire. Le cas d'une connexion managée avec une transaction en cours peut être testé si getAutoCommit() retourne false.
Donc si getAutoCommit() retourne true, on peut appeler setAutoCommit(false), comme auparavant, sinon on n'appelle plus cette méthode. On garde cette information dans une nouvelles propriété afin de suivre la même règle dans les méthodes commit() et rollback() de la classe Schema.
De cette façon, et comme Schema est une classe centrale très impactante, on évite tout risque de dysfonctionnement de Silverpeas et on rend possible son utilisation (indirecte le plus souvent) par un EJB ou un managed bean (Spring ou autre).