bonjour,
j'utilise l'api quartz pour ordonnancement de taches. En effet l'utilisateurs de mon application, chargent des fichiers que je dois traiter par un job quartz.
Je souhaite mettre un timeout pour interrompre et libérer les threads qui dépassent un certain temps d'exécution.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount =10 org.quartz.threadPool.threadPriority = 5 org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true
J'ai fiat des recherches, mais je n'ai pas trouvé comment faire avec quartz, aussi j'ai essayé d'utiliser l'api concurrency avec le code suivant :
Une exception est bien levée après expiration de 100ms, mais le traitement continue.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 private static void testTimeout() throws Exception { ExecutorService executor = Executors.newCachedThreadPool(); Callable<Object> task = new Callable<Object>() { public Object call() throws InterruptedException, MalformedURLException, Exception { return compte(2000000000); } }; Future<Object> future = executor.submit(task); try { System.out.println("Avant appel : "+ new Date()); Object result = future.get(100, TimeUnit.MILLISECONDS); System.out.println("Apres appel : "+ new Date()); }catch (TimeoutException te){ future.cancel(true); executor.shutdownNow(); throw new Exception("TimeoutException : cette action a pris plus que le temps permi"); }catch(ExecutionException ee){ future.cancel(true); executor.shutdownNow(); throw new Exception("ExecutionException : Une erreur d'execution s'est produite"); }catch(InterruptedException ie){ future.cancel(true); executor.shutdownNow(); throw new Exception("InterruptedException : Une erreur a servenu"); } }
Avez vous une idée comment implémenter un timeout ?
Merci.
Partager