J'ai une application Web (java, tomcat) qui permet aux utilisateurs de générer des rapports à l'aide de rapports Crystal. Le problème est que si un utilisateur demande un énorme rapport qui prend des heures pour terminer, mon application entière s'arrête. Y at-il un moyen d'arrêter une demande comme celle-ci, disons si après 5 minutes, il n'a pas été complet? Outre l'optimisation de la vitesse et la limitation des tailles de rapports, y a-t-il d'autres solutions de rechange?Arrêt d'une demande de serveur
Répondre
Je pense que vous n'exécutez pas la génération de rapport dans un autre thread. Il est préférable d'exécuter la génération de rapport dans un autre thread et d'envoyer un lien à l'utilisateur lorsqu'il est prêt.
Vous pouvez utiliser ExecutorService de java et définir un certain délai pour le thread et il expirera si cela prend plus que le temps que vous avez alloué pour cela.
Rechercher Java ExecutorService, Future, tutoriel appelable
Exemple de code:
Callable<Integer> callable = new CallableImpl(2);
ExecutorService executor = new ScheduledThreadPoolExecutor(5);
Future<Integer> future = executor.submit(callable);
Integer result = future.get(600,TimeUnit.seconds));
merci, je vais jeter un oeil à cette – ha1ogen
Une autre approche consiste à exécuter la génération de rapport dans un thread distinct (ou peut-être en utilisant ExecutorService
) et d'appeler Thread.interrupt()
lorsque le temps de génération dépasse un certain seuil. Les chances sont que le thread sera interrompu s'il se bloque actuellement sur les E/S (réseau, base de données).
- 1. node.js/Arrêt brutal du serveur sur demande
- 2. arrêt ajax demande
- 3. Arrêt d'une demande dans Tornado
- 4. Arrêt du serveur JBoss
- 5. perfino serveur marche/arrêt
- 6. Arrêt serveur RMI (Java)
- 7. Arrêt serveur HTTP Akka
- 8. arrêt NSData chargement du serveur
- 9. Arrêt du serveur apache mina
- 10. Arrêt d'un serveur Java RMI
- 11. AngularJS arrêt ajax spinner pour une demande
- 12. Arrête le serveur redis. Ni arrêt, ni arrêt fonctionne
- 13. Tomcat docker conteneur arrêt et existe après arrêt serveur Tomcat
- 14. WCF chat/serveur de jeu - arrêt client
- 15. arrêt d'un programme de serveur client
- 16. Arrêt du serveur de la région Hbase
- 17. Fin/Arrêt d'un serveur de socket NSFileHandle
- 18. Démarrage et arrêt du flacon à la demande
- 19. Demande de serveur Android
- 20. arrêt Ruby demande http modification le nom d'en-tête
- 21. PayPal Android SDK erreurs "demande a échoué avec la réponse du serveur: arrêt" "SERVER_COMMUNICATION_ERROR"
- 22. Arrêt d'un serveur de réseau d'accepter de nouvelles connexions
- 23. arrêt gracieux printemps - DEMANDE POST MÉTHODE NON COMPATIBLE
- 24. arrêt Programmatically Jetty avec xml configuré serveur
- 25. Démarrage et arrêt du script du serveur
- 26. Arrêt d'un serveur Python multitraitement BaseManager 'serve_forever'?
- 27. Arrêt du serveur en utilisant PHP
- 28. Arrêt du serveur à la sortie d'iTerminal
- 29. Arrêt, snapshotting et redémarrage du serveur EBS
- 30. Arrêt JBoss au redémarrage du serveur
_Why_ que votre mouture de l'application à l'arrêt? –
parce que la génération de rapports est monopolisant le processeur et les ressources memomey de tomcat je pense – ha1ogen
Exécuter des rapports comme ceci sur un système transactionnel n'est pas une bonne idée - vous devriez penser à la refonte ... – home