Salut à tous,
Je me retrouve avec un petit souci sur le commitTransaction des DAO. En fait il ne fonctionne pas du tout, il ne se passe rien en Base !
J'ai regardé le code et j'ai constaté dans TopiaDAOAbstract :
/**
* Par defaut ne fait rien
*/
public void commitTransaction() throws TopiaException {
}
/**
* Par defaut ne fait rien
*/
public void rollbackTransaction() throws TopiaException {
}
Les DAO générés n'étendent pas TopiaDAOAbstract mais TopiaDAODelegator qui lui implémente ces deux méthodes :
public void commitTransaction() throws TopiaException {
getParentDAO().commitTransaction();
}
public void rollbackTransaction() throws TopiaException {
getParentDAO().rollbackTransaction();
}
Il fait appel au parentDAO pour faire le commitTransaction(). Le parentDAO est initialisé au moment de la récupération du DAO, cad via la methode getMonDAO du ModelHelperDAO généré par ToPIA. Cette méthode appel le getDAO de TopiaContextImpl qui cherche le bon DAO et lui set comment parent un TopiaDAOHibernate par défaut.
TopiaDAOHibernate extends TopiaDAOAbstract et n'implémente pas les deux méthodes concernés ! Donc le commitTransaction() fait au départ ne fait rien.
Une autre classe extends TopiaDAOAbstract, il s'agit de TopiaDAOFlatfile qui elle, implémente les deux méthodes (vides comme dans le Abstract).
Donc normalement rien n'empêcherait de remplir ces deux méthodes directement dans TopiaDAOAbstract ! simplement avec context.commitTransaction() ?
Cela peut poser des problèmes si d'autres classes héritent de TopiaDAOAbstract...
Que faire donc ? Que pensez vous de ce problème ?
Flo