On Mon, 27 Jun 2011 16:45:45 +0200 Tony Chemit <chemit@codelutin.com> wrote:
Suite d'une discussion sur un coin de table sous l'intiative de Brendan... puis sur reuniondev ... L'idée serait d'ouvrir une transaction au début d'une action et d'utiliser un intercepteur après le rendu de l'action.
Soit un contrat d'action
TopiaTransactionAware
+ getTransaction() : TopiaContext
Tres bonne idee ..
Pour le moment c'est codé dans T3, mais il serait bien d'avoir ça disponible pour tout le monde.
org.nuiton.nuiton-web:nuiton-struts2 serait le meilleur endroit.
dans un package org.nuiton.web.struts2.topia .
La je ne sais pas trop ce qui est le mieux. Je verrais bien plutot dans Topia un nouveau module avec une dépendance sur struts2. On utilise topia mais pas ce module, ca doit passer. On utilise ce module, ca veut dire qu'on fait du struts, ca passe aussi et si on en a besoin c qu'on utilise aussi topia. Si on detruit le projet Topia, y'a rien d'autre a penser (pas de class dans nuiton-web a supprimer. Donc au niveau des pom.xml ça me paraît plus simple. Mais comme j'ai dit, je ne sais pas si c'est mieux. ...
A vos retours (et améliorations).
J'aurais bien vu un autre mécanisme (mais c plus compliqué a implanter et je ne sais pas si ca fonction dans tous les cas) - lorsqu'une action est TopiaAware, il faut aussi un setTransaction - l'intercepteur dans ce cas utilise le setTransaction pour injecter un TopiaContext - l'intercepteur ferme le context si besoin a la fin Le TopiaContext est un 'proxy' sur lequel on ne peut pas faire de beginTransaction ni de commit/close et autre. Car c'est a l'intercepteur de gerer ca. Par contre ce proxy n'ouvre réellement une transaction que s'il est utilisé. Avantage: - les actions ne gere rien, on leur donne tout - la transaction n'est ouvert que s'il y a vraiment besoin - on partage le meme context ouvert tout le long de le requete HTTP Inconveniant: - il faut configurer quelque part la source, pour que l'intercepteur puisse creer les TopiaContext - on ne peut avoir qu'une source pour tous les TopiaAware - on partage le meme context ouvert tout le long de le requete HTTP (et oui ca peut aussi etre un incoveniant On peut aussi imaginer un mixte des deux solutions: Si l'utilisateur veut creer lui meme ca transaction, il ne fait rien dans le setTransaction. Et l'intercepteur quelque soit le TopiaContext qu'il recupere par le getTransaction le commit/ferme (et en cas d'exception, il le rollback/ferme) Je ne sais pas si je suis clair, ne si ca repond a la question :). Mais on peut en rediscuter de vive voix -- Benjamin POUSSIN -------------------- tél: +33 (0) 2 40 50 29 28 email: poussin@codelutin.com http://www.codelutin.com