|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2008 Messages : 70 ![]() |
bonjour, je développe actuellement un programme dans lequel un client doit attendre qu'un autre fasse une action pour mettre à jour ses données.
En java j'utiliserai une méthode synchronized avec un wait et un notify pour le realiser mais en java ee je sèche. en gros pour donner un exemple simple je pourrais avoir: un client(1) pose des sous sur la table et attend qu'un autre les prenne un client(2) prend les sous et prévient l'autre que c'est fait 1 rafraîchi son affichage je suis dans un singleton déployé sur glassfish mais je ne pense pas que ça change grand chose (glassfish). en attendant vos idées, moi je suis à cours d'idées après avoir regardé du cotés des lock (les synchronized étant interdit dans les ejb) |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Formateur JAVA / XML Inscription : novembre 2007 Messages : 852 ![]() |
Alors 2 solutions :
1 - soit du JMS et Message Driven Bean pur (pas simple) 2 - soit @Asynchronous avec Future<V> sur un Session Bean En gros des méthodes EJB asynchrones : http://docs.oracle.com/javaee/6/tutorial/doc/gkkqg.html Perso, je ferai la solution 2. Si tu n'es pas en mode "EJB", tu peux toujours faire avec "Callable" et "Future" du framework Executor apparu avec Java 5.
__________________
Moins on code, moins il y a de bug ... et vice-versa ainsi qu'inversement ... |
|
|
00
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2008 Messages : 70 ![]() |
j'avais pensé à JMS mais ça me parait trop gros pour ce que je veux faire, asynchronous me parait bien mais... Comment je fais vu que la fonction que j'utilise est courte mais doit être bloquante?
si je comprends bien asynchronous c'est pour pouvoir continuer cotes client à faire des opérations en attendant la réponse du serveur, or moi je cherche à ce que le serveur bloque tant qu'un évènement n'a pas eu lieu (un commit sur une bd en fait). donc je dois faire une méthode dans laquelle je bloque en attendant qu'une autre méthode soit appelé par un autre client. je regarde asynchronous quand même, je suis peut être passé à cotes d'un truc. merci en tout cas pour ta réponse |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Formateur JAVA / XML Inscription : novembre 2007 Messages : 852 ![]() |
ah j'avais pas bien compris.
Alors oui, un Singleton me parait pas mal. Bloquant en Lock Write par défaut. Ou alors les Interceptor ... à creuser. Je vais continuer d'y réfléchir. Tu peux me donner un cas d'utilisation pour que j'ai les même "entrées" que toi ?
__________________
Moins on code, moins il y a de bug ... et vice-versa ainsi qu'inversement ... |
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Formateur JAVA / XML Inscription : novembre 2007 Messages : 852 ![]() |
Regarde dans l'API Concurrency, y'a peut-être ce qu'il te faut.
__________________
Moins on code, moins il y a de bug ... et vice-versa ainsi qu'inversement ... |
|
|
00
|
|
|
#6 |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2008 Messages : 70 ![]() |
client A:
fait appel à objetReponse methodeA(); cette methode modifie des valeurs et attend la validation des changements => commit dans une bd. elle attend en retour les nouvelles valeurs contenu dans la bd apres changement. client B: fait appel à void methodeB(); cette méthode valide les modification et lance le commit. Elle est aussi sensé débloquer le client A. le @lock ne m'a pas paru pertinent (d'ou mon post) vu qu'il ne permet que de limiter les accès à une ressource, dans mon cas le client B peut intervenir 2 minutes plus tard (asynchronous va donc me servir dans tous les cas), je n'ai donc pas d’accès concurrent. je vais regarder concurrency (et continuer asynchronous), merci pour ton aide |
|
|
00
|
|
|
#7 | ||||
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2008 Messages : 70 ![]() |
je me suis finalement tourné vers jms...
j'ai ecris une mini classe qui encapsule le peu d'utilisation que je veux en faire mais j'obtient une erreur à l'execution: Code :
j'ai créé la factory ainsi que la queue dans glassfish et je l'obtient par lookup: Code :
je continue à chercher sur le net mais j'ai encore beaucoup de lacune en jms donc beaucoup de lecture à faire. ps: pour la logique du mon code, seul le serveur va envoyer des messages, il donne le client à qui il envoie le message lors du send. |
||||
|
|
00
|
|
|
#8 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2008 Messages : 70 ![]() |
apres un peu de doc j'ai modifié ma classe jms comme suit:
Code :
ah bah j'ai juste fais une pause café et en revenant ça tourne :/ merci pour tes conseils fxrobin |
||
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Formateur JAVA / XML Inscription : novembre 2007 Messages : 852 ![]() |
![]() Joli.
__________________
Moins on code, moins il y a de bug ... et vice-versa ainsi qu'inversement ... |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com