Communauté Informatique NDFR.net

Communauté Informatique NDFR.net (http://www.ndfr.net/forums/index.php)
-   Programmation (C/C++, Delphi, VB, etc.) (http://www.ndfr.net/forums/forumdisplay.php?f=64)
-   -   [JAVA] stocker un appel de procédure pour l'éxécuter plus tard (http://www.ndfr.net/forums/showthread.php?t=7307)

Cougar 26-04-2006 17:11

[JAVA] stocker un appel de procédure pour l'éxécuter plus tard
 
Si y a des experts java parmis vous, je suis prenneur :)
Voilà ce que je voudrai faire :
j'ai une liste de tâches à exécuter dans laquelle je voudrai stocker directement la procédure à laquelle je veux faire appel.

Par exemple dans ma liste :

Acheter(pain) <--- Acheter(viande) <--- PayerPar(carte_bleu) <--- etc

chaque case représente une procédure, et j'aimerai donc pouvoir parcourir cette liste et exécuter la tâche qui convient au moment où je le veux (par exemple je fais pas Acheter(pain) avant le 24/06/2006 )

Donc l'idée ça serait de stocker quelque part cette "appel" et pouvoir l'exécuter au bon moment et ce essentiellement pour éviter de devoir faire un gros switch du genre :
si procedure.type = "Acheter" alors je sais que le paramètre est un objet Aliment qui est stocké dans tel variable de la classe tâche .

En écrivant ça je me rend compte que ça ressemble un peu au principe d'un Scheduler simplifié, mais je pense pas qu'on puisse interagir avec sur celui de la JVM.

Benjy 26-04-2006 17:37

http://www.onjava.com/pub/a/onjava/2...10/quartz.html

Sinon dans Google si tu tapes "JVM scheduler" ya pas mal de trucs sur le thread scheduling.

Cougar 26-04-2006 22:31

J'oriente mes recherches vers le package reflection en espérant réussir à faire quelque chose :)
http://www.laltruiste.com/document.p...ospection.html
http://ricky81.developpez.com/tutori...pi/reflection/

jboga 27-04-2006 08:24

Tu as peut-être déjà trouvé, mais effectivement le package "reflection" peut de permettre de faire ce genre de choses.
Par contre tu devras forcément stocker la classe de ton objet, pour pourvoir le caster au bon moment et invoquer les bonnes méthodes dessus.

fonji 27-04-2006 13:15

Quote:

Originally Posted by jboga
Par contre tu devras forcément stocker la classe de ton objet, pour pourvoir le caster au bon moment et invoquer les bonnes méthodes dessus.

Et que vive "instance of" :)

jboga 27-04-2006 19:23

Quote:

Originally Posted by fonji
Et que vive "instance of" :)

Oui mais avec "instance of" tu auras un truc du genre :

Code:

if(A instance of ClassA)
{
}
else if(A instance of classB)
{
}
else if(A instance of classC)
{
}
else if(A instance of classD)
{
}

Ce que veut, je crois, éviter Cougar.
Alors qu'avec la "reflection", si tu as la methode que tu veux appeler, tu peux faire un truc du genre (je n'ai plus l'API en tête) :

Code:

method.invoke(maClass.cast(monObjet), new Object[]{les parametres de la methodes}
monObjet est de type Object, c'est donc générique (sous réserve d'avoir la bonne méthode à appeler).
Enfin bon, chacun a sa façon de faire, et faut faire ce qui convient le mieux à chacun :) .
Le package "reflection" est très intéressant et très utile :D .

renaud91 28-04-2006 14:54

Un petit exemple
 
1 Attachment(s)
Bonjour,

tu trouveras un petit exemple dans le fichier joint.
Dans mon exemple les tâches sont exécutées les unes à la suite des autres dans une thread. Dans ton cas utilises quartz comme cité plus haut mon code n'est pas thread safe, et ajuste le code.

J'ai codé ça vite, c'est largement perfectible.
N'hésites pas si tu as des questions.

A+,
Renaud.

Cougar 28-04-2006 15:33

Merci beaucoup, pile ce que je cherchais :)

Par non thread safe tu sous entends que si, dans la ListeMagique il y a une tâche qui doit lire la variable et une autre la modifier, rien n'empêche que ça se produise en même temps ?
A ce moment là il "suffirait" d'ajouter une sémaphore dans la procédure que l'on doit exécuter, qui avant de modifier, attendra que l'autre procédure ait finie de lire ?

renaud91 28-04-2006 20:11

Oui
 
Salut,

oui c'est exactement ce que je voulais dire :D

Bonne continuation,
Renaud.


All times are GMT +2. The time now is 18:24.

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.