Dans une webapp, nous avons la gestion des transactions en utilisant intercepteurs struts2intercepteurs Struts2 (après Voir Rendus Interceptor) n'est pas appelé avant que la demande de redirection revient du navigateur
code pseudo de l'intercepteur
public String intercept(ActionInvocation invocation) throws Exception {
TransactionService.startTransaction();
invocation.invoke();
TransactionService.commitTransaction();
}
lorsque la action renvoie 'redirect' (302), parfois la requête redirigée arrive sur le serveur avant que 'TransactionService.commitTransaction()' soit appelée. (Qui ressemble à l'appel réseau est plus rapide que la pile déroulage)
ci-dessous un message de journal capturé explique ce
2017-10-04 09:18:37,693 [task-37] DEBUG (interceptors) TransactionInterceptor begin
2017-10-04 09:18:37,949 [task-38] DEBUG (interceptors) TransactionInterceptor begin
2017-10-04 09:18:37,963 [task-37] DEBUG (interceptors) TransactionInterceptor commit
2017-10-04 09:18:37,955 [task-38] ERROR (interceptors) SecurityInterceptor: Failed to execute Action:
dans ce qui précède log Task-37 (fil) suppose pour sauvegarder/mettre à jour des enregistrements dans DB et d'émettre un rediriger pour actualiser la vue, son intercepteur va valider la transaction. Mais le thread de redirection (tâche - 38) a atteint le serveur avant que la validation ne se produise.
Je regarde PreResultListener ou 'Chain Result'. (les deux options ont leurs propres problèmes) J'apprécie grandement toute entrée pour résoudre ce problème
Merci d'avance.
vous ne devriez pas écrire votre propre intercepteur, si vous ne le pouvez pas. –
son peu vieux code, donc je ne peux pas faire beaucoup là – user1919511
vous ne pouvez rien faire avec ce code parce que ce code ne fonctionne pas –