Je veux une seule instance d'un singleton pour toutes les jvms

Je veux une seule instance d'un singleton pour toutes les jvms - Java - Programmation

Marsh Posté le 04-06-2009 à 09:55:23    

Voilà, mon programme tourne sous Jboss 5.
J'ai un singleton qui est utilisé par mes classes ejb et par mes classes "normales" (aucune classe n'hérite du singleton, elles l'utilisent seulement).
Le problème, c'est que j'ai deux jvm: une qui fait tourner les conteneurs ejb et une qui fait tourner mon programme. J'ai donc deux instances du singleton, une pour chaque jvm.
 
Comment faire pour qu'il n'y ait qu'une seule instance du singleton, commune aux deux jvm?

Reply

Marsh Posté le 04-06-2009 à 09:55:23   

Reply

Marsh Posté le 04-06-2009 à 10:57:16    

Impossible d'avoir la même instance sur 2 JVMs différentes.


---------------
Light is right
Reply

Marsh Posté le 04-06-2009 à 10:59:46    

Il faudrait créer une jvm 'serveur' et tes autres jvm viennent s'y connecter pour récupérer le singleton commun.

Reply

Marsh Posté le 04-06-2009 à 12:19:40    

Et en passant par RMI?
J'ai trouvé ça: http://www.javaspecialists.eu/archive/Issue052.html
mais je ne suis pas sûr d'avoir bien compris (je suis mauvais en anglais).
Les solutions des paragraphes "Clustering and RMI Singletons" et "Service Locators" s'appliquent bien à mon cas?

Reply

Marsh Posté le 05-06-2009 à 11:08:57    

J'ai essayé d'obtenir le singleton par rmi: je crée le singleton sur la jvm où il y a mes ejbs, et la jvm de mon client demande et obtient le singleton, par rmi. Mais ça ne règle pas le problème: ça à l'air d'être une copie du singleton que je reçoit. Le singleton que je reçoit dans ma jvm client via rmi n'a pas la même référence que le singleton de la jvm de jboss (où il y a les ejbs), et lorsque je change des valeurs du singleton de la jvm de jboss, ces changements ne se répercutent pas sur le singleton de ma jvm client.
 
Est-ce qu'il y a un moyen (mémoire partagée?) pour avoir un singleton commun à plusieures jvms, de façon que les changements dans le singleton soient visibles dans toutes ces jvms?

Reply

Marsh Posté le 05-06-2009 à 11:58:04    

Citation :

Impossible d'avoir la même instance sur 2 JVMs différentes.


Au mieux tu peut avoir une copie synchronisée


---------------
Light is right
Reply

Marsh Posté le 29-10-2009 à 09:57:33    

FrenchFrogger a écrit :

Est-ce qu'il y a un moyen (mémoire partagée?) pour avoir un singleton commun à plusieures jvms, de façon que les changements dans le singleton soient visibles dans toutes ces jvms?


 
Et pourquoi obtenir a référence du singleton?  Si l'un des singletons est le singleton "master", c'est-à-dire, l'une des JVM est la JVM "master", pourquoi pas lui demander ce dont tu as besoin, comme un service, soit une commande "get", soit un commande "update", et puis, utiliser la méthode synchronized dedans du singleton "master" ?

Reply

Marsh Posté le 08-11-2009 à 10:08:20    

FrenchFrogger a écrit :

Et en passant par RMI?
J'ai trouvé ça: http://www.javaspecialists.eu/archive/Issue052.html
mais je ne suis pas sûr d'avoir bien compris (je suis mauvais en anglais).
Les solutions des paragraphes "Clustering and RMI Singletons" et "Service Locators" s'appliquent bien à mon cas?


Je dirais oui pour Service locator. Tu fais un service et non un singleton. Si tu te poses cette question, c'est probablement que tu n'as pas compris l'architecture du système que tu es censé développer, va demander des explications à l'architecte.


Message édité par el muchacho le 08-11-2009 à 10:13:53

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed